按下ESC按钮
你好在我的函数开始时,我将一些变量(如snapmode)设置为0 ABN,并在开始时还原值。如果使用AutoLisp例程的人在函数结束之前按下ESC按钮,我该怎么办?发生这种情况时,有没有办法恢复变量?
谢谢 您需要在代码检查AfraLISP中使用错误处理程序。net获取有关如何实现这一点的主题 类似于:
(setq olderr *error* *error* errtrap)
(defun errtrap (msg)
(if oldvars (mapcar 'setvar vlst oldvars))
(setq *error* olderr)
)
(setq vlst (list "OSMODE" "CLAYER") ; list changed system vars here
oldvars (mapcar 'getvar vlst))
谢谢我看看它在我的程序中是否有效! 您也可以将错误处理程序作为本地化的子例程。你只要把它命名为“error”。
例如
没有什么特别的,只是简单一点。 Alan,上面可能会简单一些,但我不建议重新定义内置ACAD*错误*例程。。。。
程序完成后,应恢复先前的“错误”设置。
李
通过本地化*错误*,您正在这样做。当我退出例程时(即使我必须执行*error*函数),原始*error*将被恢复。
只要它是本地化的,它只会持续到例程所持续的时间。 我想说,这甚至是一种更安全的方法,因为如果您在错误恢复时以某种方式设法逃脱,那么您就不会有通过不运行表达式来恢复原始错误例程的问题:(setq*error*orig\u error)
我可能错了,所以我不是说这是一条路。如果有人愿意插话,我洗耳恭听。如果我做错了,我想知道。 好吧,tbh,我以前让我所有的错误处理程序都与你发布的几乎相同,但最近因为这个原因我改变了:
http://www.cadtutor.net/forum/showpost.php?p=213140&postcount=19
查看第三个要点
干杯
李 在玩了一段时间并尝试了许多变体之后,我推荐alanjt的错误捕捉方法。这是最短最简单的方法,我敢说是最安全的方法。Lee Mac提到的JohnM的建议值得考虑,但关于*error*的第三项令人困惑,因为AutoCAD文档将*error*称为“用户可定义的错误处理函数”你应该重新定义它,然后恢复默认值。好的,通过在主函数中定位*错误*,这就是所发生的事情,用最少的代码量。李,如果你回想几个月前,CAB用这种错误陷阱重写了一些中心线程序。这种方法可能有问题,但到目前为止我还没有找到。它看起来是错误的,因为*error*总是被称为一个函数,将其放在局部var列表中表明它是一个变量名。也许它实际上有点像指向函数的指针。无论如何,这似乎是可行的。
页:
[1]
2