乐筑天下

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

[编程交流] 无法运行命令

[复制链接]

16

主题

70

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 09:25:01 | 显示全部楼层 |阅读模式
如果在循环中运行AutoCAD命令,是否可以计算在此循环中失败的次数并将其存储到变量中?
 
非常感谢。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 09:33:10 | 显示全部楼层
嗯,这个想法似乎是可能的。在循环开始之前,您需要将一个变量初始化为0,然后在if语句中简单地递增它。
 
尽管“问题”可能是:“如何测试不成功?”一种可能的方法是启动命令反应器:vlr命令失败。然后,不用循环中的if和增量,而是在循环之前启动反应器。然后,反应堆回调将检查计数变量是否分配了某个值(即非零),如果是,则增加该值。当然,在循环之后,你需要移除反应堆。
回复

使用道具 举报

16

主题

70

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 09:35:36 | 显示全部楼层
 
谢谢你的建议。
回复

使用道具 举报

16

主题

70

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 09:38:19 | 显示全部楼层
 
正如你所说,我可以这样写代码吗?
 
  1. (defun c:tmp (/ ctr tte sset item r )
  2.   (setq sset (ssget "_a" (LIST '(0 . "*polyline") (cons 410 (getvar "CTAB")))))
  3.   (setq ctr 0 tte 0 r 0)
  4.   (repeat (sslength sset )
  5.     (setq item (ssname sset ctr))
  6. (if (/= sset 0)
  7.    (porgn
  8.    (vl-cmdf "explode" item "")
  9.    (princ "All objects exploded")
  10.    )
  11.    (progn
  12.    (setq r (1+ r))
  13. );end if
  14. (if (/= r 0)
  15.       (alert (strcat "total"(itoa r) "nos of polyline can't explode"))
  16.        (princ "All polyline exploded")
  17.     );end if
  18. );end if
  19. );end defun
回复

使用道具 举报

4

主题

57

帖子

53

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 09:42:22 | 显示全部楼层
一个快速通知:
 
  1. ...
  2. (if (/= sset 0)
  3.    (progn
  4.    (vl-cmdf "explode" item "")
  5.    (princ "All objects exploded")
  6.    )
  7. ...
回复

使用道具 举报

4

主题

57

帖子

53

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 09:46:37 | 显示全部楼层
另一个快速调整。。。
 
这分解了我在屏幕上放置的所有多段线:
 
  1. (defun c:tmp (/ ctr sset item r) [color=red]; tte
  2. [/color]  (setq
  3.    sset (ssget "_a"
  4. (LIST '(0 . "*polyline") (cons 410 (getvar "CTAB")))
  5. )
  6. )
  7. (setq ctr 0 r 0)    [color=red] ; tte 0)[/color]
  8. (repeat (sslength sset)
  9.    (setq item (ssname sset ctr))
  10.    (if (/= sset 0)
  11.      ([color=red]progn
  12. [/color]        (vl-cmdf "[color=red]_.[/color]explode" item "")
  13.        (princ "[color=red]\nThis[/color] object exploded")
  14.      )     ;end progn
  15. [color=red]  ;;   (progn
  16. [/color]        (setq r (1+ r))
  17. [color=red]  ;;   )     ;end progn
  18. [/color]    )     ;end if
  19.   [color=red] (setq ctr (1+ ctr))
  20. [/color]  )     ;end repeat
  21. (if (/= r 0)
  22.    (alert
  23.      (strcat "[color=red]\n[/color][color=black]T[/color][color=black]otal[/color]" (itoa r) "nos of polyline can't explode")
  24.    )
  25.    (princ "[color=red]\n[/color][color=black]All[/color] polyline exploded")
  26. )     ;end if
  27. [color=red]  (princ) ; exit quietly
  28. [/color])     ;end defun

 
开始一行,使代码更易于阅读,结束(princ)使代码不会两次返回最终消息。
回复

使用道具 举报

16

主题

70

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 09:54:14 | 显示全部楼层
 
谢谢你的帮助,但是当我尝试绘制没有多段线的图形时。它无法运行。它无法返回不能分解的多段线数。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 09:55:06 | 显示全部楼层
不幸的是,您想要做的事情不会产生任何错误,因为Explode命令在尝试爆炸之前会进行检查。
 
只是一个小的替代方案:与其将每个都发送到explode命令,不如检查它是否可以通过其ActiveX对象进行分解:
然而,该代码甚至会在锁定层上分解多段线。如果需要坚持使用锁定层上的代码,则需要更复杂的代码:
  1. (vl-load-com)
  2. (defun c:ExpPolys (/ ss eo err lck res LckLay)
  3. ;; Firsth get all the locked layer names
  4. (vlax-for eo (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object)))
  5.    (if (= (vla-get-Lock eo) :vlax-true)
  6.      (setq LckLay (cons (vla-get-Name eo) LckLay))
  7.    )
  8. )
  9. ;; Next select and initialize variables
  10. (if (ssget "_a" (LIST '(0 . "*polyline") (cons 410 (getvar "CTAB"))))
  11.    (progn
  12.      (setq err 0
  13.            lck 0
  14.            ss  (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
  15.      )
  16.      ;; Step through all items in the selection set
  17.      (vlax-for eo ss
  18.        ;; Check if on locked layer
  19.        (if (vl-position (vla-get-Layer eo) LckLay)
  20.          (setq lck (1+ lck)) ;If locked increment lck
  21.          ;; Else attempt to explode
  22.          (if (vl-catch-all-error-p (setq res (vl-catch-all-apply 'vla-Explode (list eo))))
  23.            (setq err (1+ err)) ;If failed increment err
  24.          )
  25.        )
  26.      )
  27.      (princ (strcat "\nOff "
  28.                     (itoa (vla-get-Count ss))
  29.                     " polylines, "
  30.                     (itoa lck)
  31.                     " were on locked layers and "
  32.                     (itoa err)
  33.                     " couldn't be exploded."
  34.             )
  35.      )
  36.      ;; Ensure selection set is cleared from RAM
  37.      (vla-Delete ss)
  38.      (vlax-release-object ss)
  39.      (setq ss nil)
  40.      (gc)
  41.    )
  42.    (princ "\nNo polylines to explode.")
  43. )
  44. (princ)
  45. )
回复

使用道具 举报

4

主题

57

帖子

53

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:00:02 | 显示全部楼层
干得好irneb。
回复

使用道具 举报

16

主题

70

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 10:05:22 | 显示全部楼层
 
非常感谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 03:13 , Processed in 0.400958 second(s), 72 queries .

© 2020-2025 乐筑天下

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