乐筑天下

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

[编程交流] 脚本错误

[复制链接]

40

主题

102

帖子

62

银币

后起之秀

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

铜币
200
发表于 2022-7-5 17:12:59 | 显示全部楼层 |阅读模式
大家好
 
几年来,我一直在使用下面的脚本计算dwg中的线条长度,没有问题。
今天我得到了以下错误。。。
 
“如果未事先调用(*push error using command*),则无法从*error*调用(命令)。
建议将(命令)调用转换为(命令-s)。"
 
我不是程序员,所以我看不出问题出在哪里。有人知道哪里有问题吗?
 
非常感谢
抢劫
 
 
脚本错误。txt文件
脚本错误。txt文件
回复

使用道具 举报

40

主题

102

帖子

62

银币

后起之秀

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

铜币
200
发表于 2022-7-5 17:19:18 | 显示全部楼层
结果是我们办公室的其他用户运行这个脚本没有任何问题,所以出现了另一个问题。
我被难住了,时间不多了。
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 17:19:38 | 显示全部楼层
这将有助于张贴在正确的论坛。我已经将您的帖子转移到AutoLISP、Visual LISP和DCL论坛。
回复

使用道具 举报

40

主题

102

帖子

62

银币

后起之秀

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

铜币
200
发表于 2022-7-5 17:25:28 | 显示全部楼层
很好,谢谢你把它搬过来。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:26:41 | 显示全部楼层
因此,我只不过是将(vl load com)添加到您的“脚本”中,并将所有“命令”重命名为“command-s”,为我测试和工作:
  1. (defun dxf (n ed) (cdr (assoc n ed)))
  2. (defun bom-code (ssfilter        /       errexit undox   restore
  3. *error* olderr  oldcmdecho      %l      %t
  4. sset    %i      en      ed      p1      p2
  5. ot      a1      a2      r
  6. )
  7. (defun errexit (s)
  8. (princ)
  9. (restore)
  10. )
  11. (defun undox ()
  12. (command-s "._undo" "_E")
  13. (setvar "cmdecho" oldcmdecho)
  14. (setq *error* olderr)
  15. (princ)
  16. )
  17. (setq olderr  *error*
  18. restore undox
  19. *error* errexit
  20. )
  21. (setq oldcmdecho (getvar "cmdecho"))
  22. (setvar "cmdecho" 0)
  23. (command-s "._UNDO" "_BE")
  24. (setq %i 0
  25. %t 0
  26. )
  27. (vl-load-com)
  28. (setq sset (ssget ssfilter))
  29. (if sset
  30. (progn
  31.      (princ "\nLengths:")
  32.      (repeat (sslength sset)
  33.                 (setq en (ssname sset %i))
  34.                 (setq ed (entget en))
  35.                 (setq ot (dxf 0 ed))
  36.                 (setq curve (vlax-ename->vla-object en))
  37.                 (if (vl-catch-all-error-p
  38.                         (setq len        (vl-catch-all-apply
  39.                                 'vlax-curve-getDistAtParam
  40.                                 (list        curve
  41.                                         (vl-catch-all-apply
  42.                                                 'vlax-curve-getEndParam
  43.                                                 (list curve)
  44.                                         )
  45.                                 )
  46.                         )
  47.                         )
  48.                 )
  49.                 nil
  50.                 len
  51.                 )
  52.                 (setq %l len)
  53.                
  54.                 (setq %i (1+ %i)
  55.                         %t (+ %l %t)
  56.                 )
  57.                 (terpri)
  58.                 ;(princ %l )
  59.                 (princ (rtos %l (getvar "lunits")(getvar "luprec")))
  60.         )
  61.      (princ "\nTotal = ")
  62.      ;(princ %t)
  63.      (princ (rtos %t (getvar "lunits")(getvar "luprec")))
  64.      (textpage)
  65. )
  66. )
  67. (setq sset nil)
  68. (restore)
  69. )
  70. (defun bom-code-old (ssfilter        /       errexit undox   restore
  71. *error* olderr  oldcmdecho      %l      %t
  72. sset    %i      en      ed      p1      p2
  73. ot      a1      a2      r
  74. )
  75. (defun errexit (s)
  76. (princ)
  77. (restore)
  78. )
  79. (defun undox ()
  80. (command-s "._undo" "_E")
  81. (setvar "cmdecho" oldcmdecho)
  82. (setq *error* olderr)
  83. (princ)
  84. )
  85. (setq olderr  *error*
  86. restore undox
  87. *error* errexit
  88. )
  89. (setq oldcmdecho (getvar "cmdecho"))
  90. (setvar "cmdecho" 0)
  91. (command-s "._UNDO" "_BE")
  92. (setq %i 0
  93. %t 0
  94. )
  95. (setq sset (ssget ssfilter))
  96. (if sset
  97. (progn
  98.      (princ "\nLengths:")
  99.      (repeat (sslength sset)
  100.                 (setq en (ssname sset %i))
  101.                 (setq ed (entget en))
  102.                 (setq ot (dxf 0 ed))
  103.                 (cond
  104.                         ((= ot "LINE")
  105.                                 (setq p1 (dxf 10 ed)
  106.                                         p2 (dxf 11 ed)
  107.                                         %l (distance p1 p2)
  108.                                 )
  109.                         )
  110.                         ((= ot "ARC")
  111.                                 (setq a1 (dxf 50 ed)
  112.                                         a2 (dxf 51 ed)
  113.                                         r  (dxf 40 ed)
  114.                                         %l (* r (abs (- a2 a1)))
  115.                                 )
  116.                         )
  117.                         (t
  118.                                 (command-s "._area" "_obj" en)
  119.                                 (setq %l (getvar "perimeter"))
  120.                                
  121.                         )
  122.                 )
  123.                 (setq %i (1+ %i)
  124.                         %t (+ %l %t)
  125.                 )
  126.                 (terpri)
  127.                 (princ %l)
  128.         )
  129.      (princ "\nTotal = ")
  130.      (princ %t)
  131.      (textpage)
  132. )
  133. )
  134. (setq sset nil)
  135. (restore)
  136. )
  137. (defun c:lmeasure ()
  138. (initget "Lines Arcs Polylines Splines ALL")
  139. (setq ans (getkword
  140.         "Enter an option [Lines/Arcs/Polylines/Splines/Kill Dwayne?] : "
  141. )
  142. )
  143. (cond
  144.         ((= ans "Lines") (c:bom_lines))
  145.         ((= ans "Arcs") (c:bom_arcs))
  146.         ((= ans "Polylines") (c:bom_polylines))
  147.         ((= ans "Splines") (c:bom_splines))
  148.         (t
  149.                 (bom-code '((-4 . "<OR")
  150.                         (0 . "LINE")
  151.                         (0 . "ARC")
  152.                         (0 . "POLYLINE")
  153.                         (0 . "LWPOLYLINE")
  154.                         (0 . "SPLINE")
  155.                         (-4 . "OR>")
  156.                 )
  157.                 )
  158.         )
  159. )
  160. (princ)
  161. )
  162. (defun c:bom_lines ()
  163. (bom-code '((0 . "LINE")))
  164. (princ)
  165. )
  166. (defun c:bom_arcs ()
  167. (bom-code '((0 . "ARC")))
  168. (princ)
  169. )
  170. (defun c:bom_polylines ()
  171. (bom-code '((-4 . "<OR")
  172.         (0 . "POLYLINE")
  173.         (0 . "LWPOLYLINE")
  174.         (-4 . "OR>")
  175. )
  176. )
  177. (princ)
  178. )
  179. (defun c:bom_splines ()
  180. (bom-code '((0 . "SPLINE")))
  181. (princ)
  182. )
  183. (vl-load-com)

有趣的代码,我可能会重写它进行练习。
回复

使用道具 举报

40

主题

102

帖子

62

银币

后起之秀

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

铜币
200
发表于 2022-7-5 17:30:38 | 显示全部楼层
谢谢Grrr,似乎发生了一些奇怪的事情。我不再收到错误消息,但也没有收到值。请参见图。
它再次给了我的同事们想要的结果,所以我的ACADM安装似乎有问题。
 
181302zdicg43k7ib4elcd.jpg
 
至少我知道代码是对的。我前一段时间从Cadtutor那里拿到的,它对我来说是无价的。
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-5 17:33:04 | 显示全部楼层
回避问题。。。你的系统发生了什么事,你是唯一一个无法运行到现在为止运行完美的脚本的人?最近发生了什么变化?
 
是否尝试关闭然后重新启动AutoCAD?
 
您最近下载并使用过任何自定义lisp例程吗?
 
你最近有没有什么原因不明的电脑问题?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:37:54 | 显示全部楼层
这可能很有趣
回复

使用道具 举报

40

主题

102

帖子

62

银币

后起之秀

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

铜币
200
发表于 2022-7-5 17:39:23 | 显示全部楼层
这就是我绞尽脑汁想弄明白的。
我关闭并重新启动了不止一次,我重置了ACAD设置,导入了同事设置(脚本在其PC上运行良好),但仍然没有任何乐趣。
绝对没有下载其他自定义lisp例程,也没有遇到任何其他PC问题。
 
我唯一能想到的是周五我们进行了一些Inventor培训,讲师坐在我的电脑前,插上鼠标,还有他的HD安装了一些额外的内容库,然后开始了Inventor的工作。我已经和他谈过了,他想不出是什么原因导致了我今天的问题,尽管这似乎太巧合了。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:42:39 | 显示全部楼层
Jingles先生,请尝试以下代码以确定是否是visual lisp扩展失败:
  1. (defun C:test ( / s o len )
  2. (alert "\nSelect a line to display its length. ")
  3. (if (setq s (ssget "_+.:E:S" (list (cons 0 "LINE"))))
  4.         (progn
  5.                 (setq o (vlax-ename->vla-object (ssname s 0)))
  6.                 (setq len (vlax-curve-getDistAtParam o (vlax-curve-getEndParam o)))
  7.                 (alert (strcat "\nLine length is: " (rtos len 2 2) " units."))
  8.         )
  9. )
  10. (princ)
  11. )
  12. (vl-load-com)(princ)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-23 10:06 , Processed in 1.877242 second(s), 74 queries .

© 2020-2025 乐筑天下

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