leaning 发表于 2013-6-27 21:13:55

cad图块无法炸开求解

本帖最后由 leaning 于 2013-6-27 21:15 编辑

用了很多方法都炸不开,用delock程序,炸完就没有东西了。求各位大侠给小弟一个解决的方法,在此小弟先谢谢了!!

Gu_xl 发表于 2013-6-28 10:24:44

;炸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)
)

叮咚 发表于 2013-6-27 22:30:45

http://www.mfcad.com/cad/874/14265.html
看看这个,,
你可以双击那个块,进入编辑,就能复制出来了。

ll_j 发表于 2013-6-28 09:24:23

叮咚 发表于 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:42:24

本帖最后由 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)
)

lz123456 发表于 2013-6-28 18:04:16

怎样改为批量执行,个个的点太慢了

hehoubin 发表于 2013-6-28 18:11:15

(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)
)
;;;;;

lz123456 发表于 2013-6-28 19:04:32

不是要炸开,只是要批量修改那分解属性

水如天 发表于 2014-5-13 16:50:50

3楼的方法试过可行,其他高手都是写程序解决的我不会

nore 发表于 2015-4-27 11:53:41

重新定义块,需要有原来一模一样的图元吧,否则重新定义了,图块不都变了?
页: [1] 2
查看完整版本: cad图块无法炸开求解