Lisp函数无法正常工作
嘿,伙计们,这整件事都有点陌生。这是我自己编写的第一个代码。一个朋友告诉我关于错误捕获的事情,我打算以后用它来节省时间。唯一的问题是,当我使用它时,它没有使用(setvars)命令,我觉得它可以工作,但我不知道为什么它不工作。我可以在“VLIDE”中加载1个defun setvars,然后从defun c:qc复制每一行,它以我希望的方式工作,任何帮助都会很好。 欢迎来到CADTutor
我不知道为什么你的函数不起作用,请注意使用“qc”作为函数语法,因为你不应该使用AutoCAD别名作为函数语法。
这对我来说很有用:
(defun setvars ( vl nlv inout / vlv )
(if (= inout 0)
(progn
(setq vlv (mapcar 'getvar vl))
(mapcar 'setvar vl nlv)
)
(mapcar 'setvar vl nlv)
)
vlv
)
(defun c:test1 (/ *error* lst vlv )
(defun *error* ( msg )
(and vlv (setvars lst vlv 1))
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ)
)
(setq lst '("ORTHOMODE" "OSMODE")
vlv(setvars lst '(0 0) 0))
(command "_.line")
(while (= 1 (logand 1 (getvar 'CMDACTIVE)))
(command pause)
)
(setvars lst vlv 1)
(princ)
)
但你也可以这样做:
(defun setvars ( vl nlv / ol )
(setq ol (mapcar 'getvar vl))
(mapcar 'setvar vl nlv)
ol
)
(defun c:test2 (/ *error* lst vlv )
(defun *error* ( msg )
(and vlv (setvars lst vlv))
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ)
)
(setq lst '("ORTHOMODE" "OSMODE")
vlv (setvars lst '(0 0)))
(command "_.line")
(while (= 1 (logand 1 (getvar 'CMDACTIVE)))
(command pause)
)
(setvars lst vlv)
(princ)
)
李 非常感谢李。我阅读了你的代码,发现了我的代码不起作用的原因。我的lisp按预期工作,但没有暂停用户输入。我还没来得及画线,它就已经Lisp程序了
我的新代码
(defun setvars (vl nlv inout)
(if(= inout 0)
(progn
(setq vlv (mapcar 'getvar vl))
(mapcar 'setvar vl nlv)
)
)
(if(= inout 1)
(progn
(mapcar 'setvar vl vlv)
)
)
)
;; quick test
(defun c:test3 (/)
(setq svin '(setvars '(ORTHOMODE OSMODE) '(1 16383) 0))
(setq svout '(setvars '(ORTHOMODE OSMODE) '(1 16383) 1))
(eval svin)
(command "_.line")
(while (= 1 (logand 1 (getvar 'CMDACTIVE)))
(command pause)
)
(eval svout)
)
(defun *error* ( msg )
(eval svout)
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ)
)
现在,只要有人“试图逃跑”,它就会重置所有值。 仅供参考,使用命令别名作为命令名并没有任何坏处。命令的优先级始终高于acad中定义的别名。pgp和不会影响对原始的任何调用,因为它们总是使用完整的命令名而不是别名来调用。然而,问题在于试图定义与现有命令同名的命令。
如。
4
页:
[1]