cad图块无法炸开求解
本帖最后由 leaning 于 2013-6-27 21:15 编辑用了很多方法都炸不开,用delock程序,炸完就没有东西了。求各位大侠给小弟一个解决的方法,在此小弟先谢谢了!! ;炸f不可分解的块 By Gu_xl
(defun c:tt (/ e el blkdef Expable)
(if (and
(setq e (car (entsel "\n选择图块块:")))
(= "INSERT" (cdr (assoc 0 (setq el (entget e)))))
(vlax-property-available-p
(setq
blkdef (vla-item
(vla-get-blocks
(vla-get-ActiveDocument (vlax-get-acad-object))
)
(cdr (assoc 2 el))
)
)
'Explodable
)
)
(progn
(if (eq :vlax-false
(setq Expable (vla-get-Explodable blkdef))
)
(vla-put-Explodable blkdef :vlax-true)
) ;_ 修改为可分解属性
(VL-CATCH-ALL-APPLY
'vla-explode
(list (vlax-ename->vla-object e))
) ;_ 炸块
(if Expable
(vla-put-Explodable blkdef Expable)
) ;_ 恢复不可分解属性
)
)
(princ)
) http://www.mfcad.com/cad/874/14265.html
看看这个,,
你可以双击那个块,进入编辑,就能复制出来了。
叮咚 发表于 2013-6-27 22:30 static/image/common/back.gif
http://www.mfcad.com/cad/874/14265.html
看看这个,,
你可以双击那个块,进入编辑,就能复制出来了。
...
不需要那么复杂,只需使用定义块命令Block,选中不能分解的块名,然后勾上“允许分解”,再OK重定义一下就行。 本帖最后由 caoyin 于 2013-6-28 09:43 编辑
;;;将图块设为“可分解”
(defun C:TT (/ X)
(if (and (setq X (entsel "\n选择块: "))
(setq X (vlax-ename->vla-object (car X)))
)
(vl-catch-all-apply
'(lambda ()
(setq X (vla-item
(vla-get-blocks
(vla-get-ActiveDocument (vlax-get-acad-object))
)
(vla-get-name X)
)
)
(vla-put-Explodable X :VLAX-TRUE)
)
)
)
(princ)
) 怎样改为批量执行,个个的点太慢了 (defun c:xe();;炸多重块+块中块
(setq
osmode (getvar "osmode")
cmdecho (getvar "cmdecho")
)
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(command "undo" "g")
(setq ss(ssget '((0 . "insert"))) lenss(sslength ss) i 0 j 0 bss(ssadd))
(repeat lenss
(setq bi(ssname ss i))
(mapcar '(lambda(x)(if (member '(100 . "AcDbMInsertBlock")x)
(ssadd bi bss))
)
(list (entget bi))
)
(setq i(1+ i))
)
(setq lenbss(sslength bss))
(repeat lenbss
(setq mi(ssname bss j) midxf(entget mi))
(setq dx70(dxf 70 mi)
dx71(dxf 71 mi)
dx44(dxf 44 mi)
dx45(dxf 45 mi)
dx50(dxf 50 mi)
)
(entmake (vl-remove-if '(lambda (x) (member (car x) '(100 70 71 44 45)))midxf))
(setvar "QAFLAGS" 1)
(command ".select" (entlast) "" "explode" "p" "")
(setq x1 (ssget "p"))
(while (setq xi(ssget "p" '((0 . "INSERT"))))
(vl-cmdf "explode" xi ""))
(setq x2 (ssget "p"))
(command ".select" x1 "r" x2 "")
(command "select" "p" x2 "")
(setvar "QAFLAGS" 0)
(if (/= dx50 0)
(progn
(command "ucs" "n" "3""0,0" (polar '(0 0) dx50 1)(polar '(0 0) (+ dx50 (/ pi 2)) 1) "")
(command "array" "p" "" "r" dx71 dx70 dx45 dx44 "")
(command "ucs" "p" "")
)
(command "array" "p" "" "r" dx71 dx70 dx45 dx44 "")
)
(entdel mi)
(setq j(1+ j))
)
(princ)
(command "undo" "e")
(setvar "osmode" osmode)
(setvar "cmdecho" cmdecho)
(princ)
)
;;;;;
不是要炸开,只是要批量修改那分解属性 3楼的方法试过可行,其他高手都是写程序解决的我不会 重新定义块,需要有原来一模一样的图元吧,否则重新定义了,图块不都变了?
页:
[1]
2