检查是否存在块
你好我正在创建一个LISP代码,该代码使用ENTMAKE创建块,但我被卡住了。
如何提高代码效率
如果块不存在:使用名称X-1创建它
如果块存在(X-1):使用名称X-2、X-3等创建它。
我有一个代码可以工作,但我觉得它可以更有效
; Set Block Name
(setq blk "Anchor-Wires-1")
(setq count 1)
(while
(tblsearch "BLOCK" (strcat "Anchor-Wires-" (rtos count 2 0)))
(setq blk (strcat "Anchor-Wires-" (rtos (1+ count) 2 0)))
(setq count (1+ count))
)
(if (not (tblsearch "BLOCK" blk))
(progn
; Make block of Anchor Wires - Header
(entmake
(list
'(0 . "BLOCK")
(cons 10 (trans ins_pt 1 0))
(cons 2 blk)
(cons 70 2)
)
)
Rest of the Code 这应该为变量“blk”指定一个唯一的名称。
(setq nm "Anchor-Wires-" i 0)
(while (tblsearch "BLOCK" (setq blk (strcat nm (itoa (setq i (1+ i)))))))
Thanx man的WHILE语句确实更有效。
但我想知道WHILE是否可以与if语句合并? 不客气。
在您的案例中不需要使用if函数,除非您有比之前带来的目标更高的目标 我用了一些类似的东西:
(defun nw_block (fe / nw_set)
(setq bc 1 bn "TEMP1")
(while (tblsearch "BLOCK" bn)
(setq bc (1+ bc) bn (strcat "TEMP" (itoa bc))))
(setq nw_set (ssadd))
(while fe
(ssadd fe nw_set)
(setq fe (entnext fe)))
(command "_.UCS" "_World")
(setvar "CECOLOR" "BYLAYER")
(setvar "CELTYPE" "BYLAYER")
(setvar "THICKNESS" 0)
(command "_.BLOCK" bn '(0 0 0) nw_set "")
(redraw))
记录创建的第一个实体名称。这将添加此后创建的所有图元以创建块。
HH-David
页:
[1]