乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 4|回复: 4

[编程交流] 检查是否存在块

[复制链接]

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:03:20 | 显示全部楼层 |阅读模式
你好
 
我正在创建一个LISP代码,该代码使用ENTMAKE创建块,但我被卡住了。
如何提高代码效率
如果块不存在:使用名称X-1创建它
如果块存在(X-1):使用名称X-2、X-3等创建它。
 
我有一个代码可以工作,但我觉得它可以更有效
 
  1. ; Set Block Name
  2. (setq blk "Anchor-Wires-1")
  3. (setq count 1)
  4. (while
  5.                 (tblsearch "BLOCK" (strcat "Anchor-Wires-" (rtos count 2 0)))
  6.                 (setq blk (strcat "Anchor-Wires-" (rtos (1+ count) 2 0)))
  7.                 (setq count (1+ count))
  8. )       
  9. (if        (not (tblsearch "BLOCK" blk))
  10.         (progn
  11.                 ; Make block of Anchor Wires - Header
  12.                 (entmake
  13.                         (list
  14.                                 '(0 . "BLOCK")
  15.                                  (cons 10 (trans ins_pt 1 0))
  16.                                  (cons 2 blk)
  17.                                  (cons 70 2)
  18.                        )
  19.                        )
  20.                        Rest of the Code  
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:22:05 | 显示全部楼层
这应该为变量“blk”指定一个唯一的名称。
 
  1. (setq nm "Anchor-Wires-" i 0)
  2. (while (tblsearch "BLOCK" (setq blk (strcat nm (itoa (setq i (1+ i)))))))
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:37:33 | 显示全部楼层
Thanx man的WHILE语句确实更有效。
但我想知道WHILE是否可以与if语句合并?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:48:24 | 显示全部楼层
不客气。
 
 
在您的案例中不需要使用if函数,除非您有比之前带来的目标更高的目标
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 21:05:16 | 显示全部楼层
我用了一些类似的东西:
  1. (defun nw_block (fe / nw_set)
  2.   (setq bc 1 bn "TEMP1")
  3.   (while (tblsearch "BLOCK" bn)
  4.         (setq bc (1+ bc) bn (strcat "TEMP" (itoa bc))))
  5.   (setq nw_set (ssadd))
  6.   (while fe
  7.       (ssadd fe nw_set)
  8.       (setq fe (entnext fe)))
  9.   (command "_.UCS" "_World")
  10.   (setvar "CECOLOR" "BYLAYER")
  11.   (setvar "CELTYPE" "BYLAYER")
  12.   (setvar "THICKNESS" 0)
  13.   (command "_.BLOCK" bn '(0 0 0) nw_set "")
  14.   (redraw))

 
记录创建的第一个实体名称。这将添加此后创建的所有图元以创建块。
 
HH-David
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 01:15 , Processed in 1.391544 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表