乐筑天下

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

[编程交流] 尝试l时出现错误消息

[复制链接]

15

主题

53

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 22:45:20 | 显示全部楼层 |阅读模式
我在autocad 2015中遇到了这个错误,但由于某种原因,2014年没有。
 
如果没有事先调用(*push error using command*),则无法从*error*调用(命令)。
建议将(命令)调用转换为(命令-s)。
 
谁能帮我理解这意味着什么?我一直在使用Afralisp的代码
 
  1. (defun c:drawline ()                                        ;define function
  2. (initerr)                                        ;intit error
  3. (setvar "cmdecho" 0)                                ;reset variables
  4. (setvar "osmode" 32)
  5. (command "undo" "m")                                ;set mark
  6. (setq pt1 (getpoint "\nPick First Point: "))        ;get points
  7. (setq pt2 (getpoint pt1 "\nPick Second Point: "))
  8. (command "LAYER" "M" "2" "")                        ;change layer
  9. (command "Line" pt1 pt2 "")                        ;draw line
  10. (setq pt3 (getpoint pt2 "\nPick Third Point: "));get 3rd point
  11. (setvar "osmode" 0)                                ;reset snap
  12. (command "Line" pt2 pt3 "")                        ;draw line
  13. (reset)                                                ;reset variables
  14.   (princ)
  15. )
  16. (defun error()                                                ;load function
  17. (prompt "\nGlobal Error Trap Loaded")                        ;inform user
  18. (princ)
  19. );defun
  20. ;;;*==========================================================
  21. (defun initerr ()                                        ;init error
  22. (setq oldlayer (getvar "clayer"))                        ;save settings
  23. (setq oldsnap (getvar "osmode"))
  24. (setq oldpick (getvar "pickbox"))
  25. (setq temperr *error*)                                ;save *error*
  26. (setq *error* trap)                                        ;reassign *error*
  27. (princ)
  28. );defun
  29. ;;;*===========================================================
  30. (defun trap (errmsg)                                        ;define trap
  31. (command nil nil nil)
  32. (if (not (member errmsg '("console break" "Function Cancelled"))
  33.      )
  34.    (princ (strcat "\nError: " errmsg))                        ;print message
  35. )                 
  36. (command "undo" "b")                                        ;undo back
  37. (setvar "clayer" oldlayer)                                ;reset settings
  38. (setvar "blipmode" 1)
  39. (setvar "menuecho" 0)
  40. (setvar "highlight" 1)
  41. (setvar "osmode" oldsnap)
  42. (setvar "pickbox" oldpick)
  43. (princ "\nError Resetting Enviroment ")                ;inform user
  44. (terpri)
  45. (setq *error* temperr)                                ;restore *error*
  46. (princ)
  47. );defun
  48. ;;;*===========================================================
  49. (defun reset ()                                                ;define reset
  50. (setq *error* temperr)                                ;restore *error*
  51. (setvar "clayer" oldlayer)                                ;reset settings
  52. (setvar "blipmode" 1)
  53. (setvar "menuecho" 0)
  54. (setvar "highlight" 1)
  55. (setvar "osmode" oldsnap)
  56. (setvar "pickbox" oldpick)
  57. (princ)
  58. );defun

 
您可以在此处找到代码:http://www.afralisp.net/autolisp/tutorials/error-trapping.php
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:04:03 | 显示全部楼层
请尝试更换此部件
  1. (defun trap (errmsg)     ;define trap
  2. (command nil nil nil)
  3. (if (not (member errmsg '("console break" "Function Cancelled"))
  4.      )
  5.    (princ (strcat "\nError: " errmsg))   ;print message
  6. )                 
  7. (command "undo" "b")     ;undo back

使用:
  1. (defun trap (errmsg)     ;define trap
  2. ([color=magenta]command-s[/color])
  3. (if (not (member errmsg '("console break" "Function Cancelled"))
  4.      )
  5.    (princ (strcat "\nError: " errmsg))   ;print message
  6. )                 
  7. ([color=magenta]command-s[/color] "undo" "b")     ;undo back

建议在错误陷阱中使用该函数,并且AutoCAD 2015似乎正在强制执行该规则;从帮助:
回复

使用道具 举报

15

主题

53

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 23:30:10 | 显示全部楼层
谢谢,这似乎奏效了。如果你不介意的话,我还有一个问题。我将此用作测试,因此请确保您知道,如果此操作适用于此特定函数,那么它应该适用于我的其他函数。我似乎无法让错误捕捉工作。你能帮帮我吗?
  1. (defun c: trec()
  2. (initerr)
  3. (setvar "clayer" "text_25")
  4. (setvar "osmode" 2)
  5. (command "undo" "m")
  6. (command "rectang")
  7. (reset)
  8. (princ)
  9. );defun

 
由于某些原因,当调用此函数时,变量不会设置,因此调用此命令之前的原始设置仍然存在。你能帮我弄清楚为什么clayer和osmode没有为此做好准备吗?
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:37:12 | 显示全部楼层
由于调用命令的方式,无法达到重置功能。这将确保AutoLISP恢复:
  1. ...
  2. (command "[color=red]_[/color]rectang")
  3. [color=red] (while (> (getvar "CMDACTIVE") 0)[/color]
  4. [color=red]  (command pause)[/color]
  5. [color=red] )[/color]
  6. (reset)
  7. )
回复

使用道具 举报

15

主题

53

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 23:58:13 | 显示全部楼层
非常感谢你的帮助。现在一切都好了。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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