LISP2LEARN 发表于 2022-7-6 06:53:07

分解所有块

大家好,
 
代码运行得很好,但我只是想知道如何使用“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))

MSasu 发表于 2022-7-6 06:59:43

只要SSGET的选择返回以下内容,您就应该循环:
(while (setq AB (ssget "_X" '((0 . "INSERT"))))
(vl-cmdf "_.explode" AB "")
)

LISP2LEARN 发表于 2022-7-6 07:05:01

MSasu,
 
尝试了你的代码,我的autocad挂断了。
 

MSasu 发表于 2022-7-6 07:12:56

我无法在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时出现持续错误。。。

Lee Mac 发表于 2022-7-6 07:15:11

这并不太好,但应按要求执行:
(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)

LISP2LEARN 发表于 2022-7-6 07:21:22

我本该道歉的,却在你身上睡着了。很抱歉
 

LISP2LEARN 发表于 2022-7-6 07:30:04

再次感谢李。效果很好。你重写了一切,现在我又迷路了。另一个要解剖的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>")))
 

Lee Mac 发表于 2022-7-6 07:33:52

 
不客气,如果您对代码有任何问题,请随时提问。
 
 
以下修改应足够:
未经测试的代码,但应按要求执行。

LISP2LEARN 发表于 2022-7-6 07:37:01

谢谢李。完美的
现在,了解它的每一点。除了一件事。
 
6
 
为什么在while函数之前指定变量“explode”?试图删除它,但代码不起作用。背后的原因?
 
 

Lee Mac 发表于 2022-7-6 07:44:49

 
杰出的
 
 
提示:explode变量的值是while循环的测试表达式。
页: [1] 2
查看完整版本: 分解所有块