乐筑天下

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

[编程交流] 分解所有块

[复制链接]

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 06:53:07 | 显示全部楼层 |阅读模式
大家好,
 
代码运行得很好,但我只是想知道如何使用“while”函数实现这一点。我需要分解图形中的所有块,包括嵌套块。
声明将是。。只要图形中有块,就继续分解它们。我用重复10次来确保所有东西都爆炸了。谢谢
 
  1. (vl-load-com)
  2. (defun C:test (/ AB)
  3. (setvar 'qaflags 1)
  4. (repeat 10
  5. (setq AB (ssget "_X" '((0 . "INSERT"))))
  6. (vl-cmdf "_.explode" AB ""))
  7. (setvar 'qaflags 0))
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 06:59:43 | 显示全部楼层
只要SSGET的选择返回以下内容,您就应该循环:
  1. (while (setq AB (ssget "_X" '((0 . "INSERT"))))
  2. (vl-cmdf "_.explode" AB "")
  3. )
回复

使用道具 举报

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 07:05:01 | 显示全部楼层
MSasu,
 
尝试了你的代码,我的autocad挂断了。
 
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:12:56 | 显示全部楼层
我无法在AutoCAD 2009中测试它,但在2010年和2013年对我来说效果很好。也许试着一次炸一块:
  1. (while (setq AB (ssget "_X" '((0 . "INSERT"))))
  2. (repeat (setq index (sslength AB))
  3. (command "_EXPLODE" (ssname AB (setq index (1- index))))
  4. )
  5. )

很抱歉延迟,有一段时间,在尝试访问CADTutor时出现持续错误。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:15:11 | 显示全部楼层
这并不太好,但应按要求执行:
  1. (defun c:explodeall ( / explode layouts )
  2.    (setq layouts (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
  3.          explode t
  4.    )
  5.    (while explode
  6.        (setq explode nil)
  7.        (vlax-for layout layouts
  8.            (vlax-for obj (vla-get-block layout)
  9.                (and
  10.                    (= "AcDbBlockReference" (vla-get-objectname obj))
  11.                    (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-explode (list obj))))
  12.                    (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete  (list obj))))
  13.                    (setq explode t)
  14.                )
  15.            )
  16.        )
  17.    )
  18.    (princ)
  19. )
  20. (vl-load-com) (princ)
回复

使用道具 举报

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 07:21:22 | 显示全部楼层
我本该道歉的,却在你身上睡着了。很抱歉
 
回复

使用道具 举报

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 07:30:04 | 显示全部楼层
再次感谢李。效果很好。你重写了一切,现在我又迷路了。另一个要解剖的Lisp程序。
 
还有一件事。如何将其与您的代码结合。还不熟悉visual lisp。我想删除某些层上的某些块,并省略具有某些名称的块。
 
这是我的选择集。
  1. (ssget "_X" '((0 . "INSERT")
  2. (8 . "0,A-WALL,A-WINDOWS,A-DOOR")
  3.   (-4 . "<NOT")
  4.     (2 . "A-MILLWORK,A-DESK,A-CHAIR,A-TABLE,F-*")
  5.   (-4 . "NOT>")))

 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:33:52 | 显示全部楼层
 
不客气,如果您对代码有任何问题,请随时提问。
 
 
以下修改应足够:
未经测试的代码,但应按要求执行。
回复

使用道具 举报

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 07:37:01 | 显示全部楼层
谢谢李。完美的
现在,了解它的每一点。除了一件事。
 
  1. 6

 
为什么在while函数之前指定变量“explode”?试图删除它,但代码不起作用。背后的原因?
 
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:44:49 | 显示全部楼层
 
杰出的
 
 
提示:explode变量的值是while循环的测试表达式。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 11:10 , Processed in 0.396575 second(s), 72 queries .

© 2020-2025 乐筑天下

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