gschmidt 发表于 2022-7-5 20:03:20

检查是否存在块

你好
 
我正在创建一个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

Tharwat 发表于 2022-7-5 20:22:05

这应该为变量“blk”指定一个唯一的名称。
 

(setq nm "Anchor-Wires-" i 0)
(while (tblsearch "BLOCK" (setq blk (strcat nm (itoa (setq i (1+ i)))))))

gschmidt 发表于 2022-7-5 20:37:33

Thanx man的WHILE语句确实更有效。
但我想知道WHILE是否可以与if语句合并?

Tharwat 发表于 2022-7-5 20:48:24

不客气。
 
 
在您的案例中不需要使用if函数,除非您有比之前带来的目标更高的目标

David Bethel 发表于 2022-7-5 21:05:16

我用了一些类似的东西:
(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]
查看完整版本: 检查是否存在块