分解所有块
大家好,代码运行得很好,但我只是想知道如何使用“while”函数实现这一点。我需要分解图形中的所有块,包括嵌套块。
声明将是。。只要图形中有块,就继续分解它们。我用重复10次来确保所有东西都爆炸了。谢谢
(vl-load-com)
(defun C:test (/ AB)
(setvar 'qaflags 1)
(repeat 10
(setq AB (ssget "_X" '((0 . "INSERT"))))
(vl-cmdf "_.explode" AB ""))
(setvar 'qaflags 0)) 只要SSGET的选择返回以下内容,您就应该循环:
(while (setq AB (ssget "_X" '((0 . "INSERT"))))
(vl-cmdf "_.explode" AB "")
) MSasu,
尝试了你的代码,我的autocad挂断了。
我无法在AutoCAD 2009中测试它,但在2010年和2013年对我来说效果很好。也许试着一次炸一块:
(while (setq AB (ssget "_X" '((0 . "INSERT"))))
(repeat (setq index (sslength AB))
(command "_EXPLODE" (ssname AB (setq index (1- index))))
)
)
很抱歉延迟,有一段时间,在尝试访问CADTutor时出现持续错误。。。 这并不太好,但应按要求执行:
(defun c:explodeall ( / explode layouts )
(setq layouts (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
explode t
)
(while explode
(setq explode nil)
(vlax-for layout layouts
(vlax-for obj (vla-get-block layout)
(and
(= "AcDbBlockReference" (vla-get-objectname obj))
(not (vl-catch-all-error-p (vl-catch-all-apply 'vla-explode (list obj))))
(not (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete(list obj))))
(setq explode t)
)
)
)
)
(princ)
)
(vl-load-com) (princ) 我本该道歉的,却在你身上睡着了。很抱歉
再次感谢李。效果很好。你重写了一切,现在我又迷路了。另一个要解剖的Lisp程序。
还有一件事。如何将其与您的代码结合。还不熟悉visual lisp。我想删除某些层上的某些块,并省略具有某些名称的块。
这是我的选择集。
(ssget "_X" '((0 . "INSERT")
(8 . "0,A-WALL,A-WINDOWS,A-DOOR")
(-4 . "<NOT")
(2 . "A-MILLWORK,A-DESK,A-CHAIR,A-TABLE,F-*")
(-4 . "NOT>")))
不客气,如果您对代码有任何问题,请随时提问。
以下修改应足够:
未经测试的代码,但应按要求执行。 谢谢李。完美的
现在,了解它的每一点。除了一件事。
6
为什么在while函数之前指定变量“explode”?试图删除它,但代码不起作用。背后的原因?
杰出的
提示:explode变量的值是while循环的测试表达式。
页:
[1]
2