炸开嵌套块保留最外图块加入选择的块炸开
用AI写了一个炸开嵌套保留最外的图块,但是是全局的,我想要一个能局部选择块的,麻烦大佬解决下,AI不行啊怎么都解决不了各种报错,附件和CAD图块一块上传先让他全部炸开,然后再生成块,是不是就可以了? (defun c:xx (/ s i res)
(setq s (ssget "_+.:E:S" '((0 . "INSERT"))))
(undobe)
(setq res (xpinside s))
(if (= (member "on" res) nil)
(princ "\n对象内不含嵌套块")
(PROGN
(while
(member "on" res)
(setq res (xpinside s))
)
(princ "\n已分解嵌套块")
)
)
(setq i nil)
(undoe)
(prin1)
)
(defun xpinside (s / lock)
(setq lock "off")
(LM:ApplytoBlockObjects
(vla-get-blocks
(vla-get-activedocument (vlax-get-acad-object))
)
(vla-get-effectivename
(vlax-ename->vla-object (ssname s 0))
)
'(lambda (obj)
(if
(= (vla-get-ObjectName obj) "AcDbBlockReference")
(PROGN (vla-explode obj) (vla-delete obj) (setq lock "on"))
)
)
)
)
(defun LM:ApplytoBlockObjects (blks name func / result)
(setq func (eval func))
(if
(not
(vl-catch-all-error-p
(setq def (vl-catch-all-apply 'vla-item (list blks name)))
)
)
(vlax-for obj def (setq result (cons (func obj) result)))
)
(reverse result)
)
(prin1) 菜卷鱼 发表于 2025-5-12 08:51
no function definition: UNDOBE大神这个报错哦 jh1215218 发表于 2025-5-11 07:24
先让他全部炸开,然后再生成块,是不是就可以了?
就是需要选取范围内的块进行炸开,要求就是炸开块内所有的其他块,然后就可以了 AI搞不出来 a2022002 发表于 2025-5-12 09:23
就是需要选取范围内的块进行炸开,要求就是炸开块内所有的其他块,然后就可以了 AI搞不出来
(command "_.undo" "be")
.............
(command "_.undo" "e") 菜卷鱼 发表于 2025-5-12 08:51
带属性的图块不应该炸开,比如轴号和门窗,这些在建筑图里都是带属性的图块。我修改了一下这个函数(defun xpinside (s / lock)
(setq lock "off")
(lm:applytoblockobjects (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-effectivename
(vlax-ename->vla-object
(ssname s 0)
)
) '(lambda (obj)
(if (and
(=
(vla-get-objectname obj)
"AcDbBlockReference"
)
(=
(vla-get-hasattributes obj)
:vlax-false
)
)
(progn
(vla-explode obj)
(vla-delete obj)
(setq lock "on")
)
)
)
)
) wudechao 发表于 2025-5-14 00:37
带属性的图块不应该炸开,比如轴号和门窗,这些在建筑图里都是带属性的图块。我修改了一下这个函数(defun ...
也可以炸,要保留属性值,可以炸之前先burst,炸后删除属性定义
页:
[1]