使用 AutoLISP 命令功能时,您必须注意活动对象捕捉。一种方法是在 (command ...) 表达式中强制对象捕捉到“无”:
(defun c:wwq (/ a pt1)
(setq a 0)
(while (< a 10)
(setq a (+ 1 a))
(setq pt1 (list a a))
(command "_circle" "_none" pt1 1)
)
(princ)
)
或者,您可以通过在代码开头将 OSMODE 系统变量设置为 0 并在最后恢复之前的值来停用每个 osnap(为了真正安全,此方法应该需要和错误处理程序来确保重置之前的值以防代码执行过程中发生错误)。
(defun c:wwq (/ a pt1 os)
(setq a 0
os (getvar 'osmode)
)
(setvar 'osmode 0)
(while (< a 10)
(setq a (+ 1 a))
(setq pt1 (list a a))
(command "_circle" pt1 1)
)
(setvar 'osmode os)
(princ)
)
另一种方法是使用更快且不关心 osnaps 的 entmake 函数。
(defun c:wwq (/ a)
(setq a 0.0)
(while (< a 10.0)
(setq a (+ 1.0 a))
(entmake
(list
(cons 0 "CIRCLE")
(list 10 a a 0.0)
(cons 40 1.0)
)
)
)
(princ)
)