乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 89|回复: 4

[编程交流] ESC用户输入

[复制链接]

15

主题

53

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 22:46:24 | 显示全部楼层 |阅读模式
是否需要检查用户是否已输入命令行并使用lisp,以便在用户按下esc键后立即通知用户,以不仅取消命令,而且还设置数量?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:05:14 | 显示全部楼层
您可以在本地定义的*error*函数中执行必要的操作-更多信息请参见此处。
回复

使用道具 举报

1

主题

20

帖子

12

银币

初来乍到

Rank: 1

铜币
14
发表于 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构造除外
回复

使用道具 举报

15

主题

53

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 23:33:59 | 显示全部楼层
我正在使用vl catch all apply,但它似乎没有达到我想要的效果。我一直按esc键取消命令,但它不会取消lisp反应器,该反应器应该在我取消命令时调用。
回复

使用道具 举报

15

主题

53

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 23:47:25 | 显示全部楼层
@李。我正在尝试使用lisp反应堆。基本上,这个lisp反应器保存在一个lisp文件中,包含了我的很多通用代码。我想在命令行中使用特定函数时调用这个lisp reactor。因此,在该命令运行时,已经设置了图层和捕捉设置等变量,但一旦该命令被取消或结束,我想在启动该命令之前将其设置回原始设置。我只希望这个反应堆在接到命令后能正常工作。这是我一直在使用的lisp reactor代码。感谢ronjonp在以下时间编写此代码:http://www.theswamp.org/index.php?topic=16519.5;wap2
  1. (if (not *rjp-lispReactors*)
  2. (setq        *rjp-lispReactors*
  3. (vlr-lisp-reactor
  4.   nil
  5.   '((:vlr-lispWillStart . strtlsp)
  6.     (:vlr-lispCancelled . cncllsp)
  7.    )
  8. )
  9. )
  10. (princ)
  11. )
  12. (defun strtlsp (calling-reactor strtlspInfo / stlisp)
  13. (setq        stlisp            (strcase (nth 0 strtlspInfo) T)
  14. rjp-varlist nil
  15. rjp-varlist (mapcar '(lambda (x) (cons x (getvar x)))
  16.    '("apbox"             "aperture"
  17.      "attdia"             "attmode"
  18.      "aunits"             "autosnap"
  19.      "blipmode"     "cecolor"
  20.      "celtscale"    "clayer"
  21.      "cmddia"             "cmdecho"
  22.      "dimassoc"     "dragmode"
  23.      "edgemode"     "elevation"
  24.      "expert"             "fillmode"
  25.      "gridmode"     "gripsize"
  26.      "highlight"    "ltscale"
  27.      "orthomode"    "osmode"
  28.      "osnapcoord"   "plinewid"
  29.      "snapang"             "snapmode"
  30.      "textsize"
  31.     )
  32.    )
  33. )
  34. (princ "LISP START")
  35. )
  36. (defun cncllsp (calling-reactor cncllspInfo /)
  37. (mapcar '(lambda (x)
  38.     (vl-catch-all-apply
  39.       'setvar
  40.       (list (car x) (cdr x))
  41.     )
  42.   )
  43. rjp-varlist
  44. )
  45. (princ "\n <<Lisp cancelled...>>")
  46. )

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

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 03:16 , Processed in 0.430811 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表