Lee Chu Chu 发表于 2022-7-5 22:46:24

ESC用户输入

是否需要检查用户是否已输入命令行并使用lisp,以便在用户按下esc键后立即通知用户,以不仅取消命令,而且还设置数量?

Lee Mac 发表于 2022-7-5 23:05:14

您可以在本地定义的*error*函数中执行必要的操作-更多信息请参见此处。

ur_naz 发表于 2022-7-5 23:17:19

请查看vl catch all apply、vl-catch-all-error-p、vl catch all error message函数。这些功能有助于避免应用程序中的大多数异常。当调用*error*函数并中断程序时,vl catch all apply可以替代try,但在其他autolisp语言中使用的finally构造除外

Lee Chu Chu 发表于 2022-7-5 23:33:59

我正在使用vl catch all apply,但它似乎没有达到我想要的效果。我一直按esc键取消命令,但它不会取消lisp反应器,该反应器应该在我取消命令时调用。

Lee Chu Chu 发表于 2022-7-5 23:47:25

@李。我正在尝试使用lisp反应堆。基本上,这个lisp反应器保存在一个lisp文件中,包含了我的很多通用代码。我想在命令行中使用特定函数时调用这个lisp reactor。因此,在该命令运行时,已经设置了图层和捕捉设置等变量,但一旦该命令被取消或结束,我想在启动该命令之前将其设置回原始设置。我只希望这个反应堆在接到命令后能正常工作。这是我一直在使用的lisp reactor代码。感谢ronjonp在以下时间编写此代码:http://www.theswamp.org/index.php?topic=16519.5;wap2

(if (not *rjp-lispReactors*)
(setq        *rjp-lispReactors*
(vlr-lisp-reactor
nil
'((:vlr-lispWillStart . strtlsp)
    (:vlr-lispCancelled . cncllsp)
   )
)
)
(princ)
)
(defun strtlsp (calling-reactor strtlspInfo / stlisp)
(setq        stlisp          (strcase (nth 0 strtlspInfo) T)
rjp-varlist nil
rjp-varlist (mapcar '(lambda (x) (cons x (getvar x)))
   '("apbox"             "aperture"
   "attdia"             "attmode"
   "aunits"             "autosnap"
   "blipmode"   "cecolor"
   "celtscale"    "clayer"
   "cmddia"             "cmdecho"
   "dimassoc"   "dragmode"
   "edgemode"   "elevation"
   "expert"             "fillmode"
   "gridmode"   "gripsize"
   "highlight"    "ltscale"
   "orthomode"    "osmode"
   "osnapcoord"   "plinewid"
   "snapang"             "snapmode"
   "textsize"
    )
   )
)
(princ "LISP START")
)
(defun cncllsp (calling-reactor cncllspInfo /)
(mapcar '(lambda (x)
    (vl-catch-all-apply
      'setvar
      (list (car x) (cdr x))
    )
)
rjp-varlist
)
(princ "\n <<Lisp cancelled...>>")
)

 
我看到反应堆确实启动了,因为我看到打印的消息LISP start,但每当我按esc取消功能时,消息LISP CANCELED不会打印出来,并且设置不会恢复到启动时。无论如何,我可以修改这个代码来专门做到这一点?我也尝试过使用命令反应器,但使用它们有点不可靠,而且它只能在整个lisp文件中使用,因为它正在等待调用命令。所以我不知道我应该做什么,如果我甚至应该使用lisp反应堆或没有。
页: [1]
查看完整版本: ESC用户输入