乐筑天下

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

[编程交流] 按下ESC按钮

[复制链接]

5

主题

23

帖子

18

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 15:03:02 | 显示全部楼层 |阅读模式
你好
在我的函数开始时,我将一些变量(如snapmode)设置为0 ABN,并在开始时还原值。如果使用AutoLisp例程的人在函数结束之前按下ESC按钮,我该怎么办?发生这种情况时,有没有办法恢复变量?
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:11:25 | 显示全部楼层
您需要在代码检查AfraLISP中使用错误处理程序。net获取有关如何实现这一点的主题
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:16:43 | 显示全部楼层
类似于:
 
  1. (setq olderr *error* *error* errtrap)
  2. (defun errtrap (msg)
  3. (if oldvars (mapcar 'setvar vlst oldvars))
  4. (setq *error* olderr)
  5. )
  6. (setq vlst (list "OSMODE" "CLAYER") ; list changed system vars here
  7.        oldvars (mapcar 'getvar vlst))
回复

使用道具 举报

5

主题

23

帖子

18

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 15:22:46 | 显示全部楼层
谢谢我看看它在我的程序中是否有效!
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 15:30:33 | 显示全部楼层
您也可以将错误处理程序作为本地化的子例程。你只要把它命名为“error”。
例如
 
没有什么特别的,只是简单一点。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:34:38 | 显示全部楼层
Alan,上面可能会简单一些,但我不建议重新定义内置ACAD*错误*例程。。。。
 
程序完成后,应恢复先前的“错误”设置。
 
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 15:42:17 | 显示全部楼层
 
通过本地化*错误*,您正在这样做。当我退出例程时(即使我必须执行*error*函数),原始*error*将被恢复。
只要它是本地化的,它只会持续到例程所持续的时间。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 15:45:51 | 显示全部楼层
我想说,这甚至是一种更安全的方法,因为如果您在错误恢复时以某种方式设法逃脱,那么您就不会有通过不运行表达式来恢复原始错误例程的问题:(setq*error*orig\u error)
 
我可能错了,所以我不是说这是一条路。如果有人愿意插话,我洗耳恭听。如果我做错了,我想知道。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:53:52 | 显示全部楼层
好吧,tbh,我以前让我所有的错误处理程序都与你发布的几乎相同,但最近因为这个原因我改变了:
 
http://www.cadtutor.net/forum/showpost.php?p=213140&postcount=19
 
查看第三个要点
 
干杯
 
回复

使用道具 举报

10

主题

109

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 16:02:58 | 显示全部楼层
在玩了一段时间并尝试了许多变体之后,我推荐alanjt的错误捕捉方法。这是最短最简单的方法,我敢说是最安全的方法。Lee Mac提到的JohnM的建议值得考虑,但关于*error*的第三项令人困惑,因为AutoCAD文档将*error*称为“用户可定义的错误处理函数”你应该重新定义它,然后恢复默认值。好的,通过在主函数中定位*错误*,这就是所发生的事情,用最少的代码量。李,如果你回想几个月前,CAB用这种错误陷阱重写了一些中心线程序。这种方法可能有问题,但到目前为止我还没有找到。它看起来是错误的,因为*error*总是被称为一个函数,将其放在局部var列表中表明它是一个变量名。也许它实际上有点像指向函数的指针。无论如何,这似乎是可行的。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 21:08 , Processed in 0.427387 second(s), 83 queries .

© 2020-2025 乐筑天下

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