明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 11979|回复: 11

[已解答] cad图块无法炸开求解

[复制链接]
发表于 2013-6-27 21:13:55 | 显示全部楼层 |阅读模式
本帖最后由 leaning 于 2013-6-27 21:15 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

本帖被以下淘专辑推荐:

  • · 学习|主题: 95, 订阅: 8
发表于 2013-6-28 10:24:44 | 显示全部楼层
  1. ;炸f不可分解的块 By Gu_xl
  2. (defun c:tt (/ e el blkdef Expable)
  3.   (if (and
  4.         (setq e (car (entsel "\n选择图块块:")))
  5.         (= "INSERT" (cdr (assoc 0 (setq el (entget e)))))
  6.         (vlax-property-available-p
  7.           (setq
  8.             blkdef (vla-item
  9.                      (vla-get-blocks
  10.                        (vla-get-ActiveDocument (vlax-get-acad-object))
  11.                      )
  12.                      (cdr (assoc 2 el))
  13.                    )
  14.           )
  15.           'Explodable
  16.         )
  17.       )
  18.     (progn
  19.       (if (eq :vlax-false
  20.               (setq Expable (vla-get-Explodable blkdef))
  21.           )
  22.         (vla-put-Explodable blkdef :vlax-true)
  23.       ) ;_ 修改为可分解属性
  24.       (VL-CATCH-ALL-APPLY
  25.         'vla-explode
  26.         (list (vlax-ename->vla-object e))
  27.       ) ;_ 炸块
  28.       (if Expable
  29.         (vla-put-Explodable blkdef Expable)
  30.       ) ;_ 恢复不可分解属性
  31.     )
  32.   )
  33.   (princ)
  34. )
回复 支持 1 反对 0

使用道具 举报

发表于 2013-6-27 22:30:45 | 显示全部楼层
http://www.mfcad.com/cad/874/14265.html
看看这个,,
你可以双击那个块,进入编辑,就能复制出来了。
发表于 2013-6-28 09:24:23 | 显示全部楼层
叮咚 发表于 2013-6-27 22:30
http://www.mfcad.com/cad/874/14265.html
看看这个,,
你可以双击那个块,进入编辑,就能复制出来了。
...

不需要那么复杂,只需使用定义块命令Block,选中不能分解的块名,然后勾上“允许分解”,再OK重定义一下就行。
发表于 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)
)

点评

不错,自己琢磨很久没搞出来,谢了  发表于 2015-5-13 21:16
发表于 2013-6-28 18:04:16 | 显示全部楼层
怎样改为批量执行,个个的点太慢了
发表于 2013-6-28 18:11:15 | 显示全部楼层
  1. (defun c:xe();;炸多重块+块中块
  2.   (setq
  3.     osmode (getvar "osmode")
  4.     cmdecho (getvar "cmdecho")
  5.   )
  6.   (setvar "cmdecho" 0)
  7.   (setvar "osmode" 0)
  8.   (command "undo" "g")
  9.   (setq ss(ssget '((0 . "insert"))) lenss(sslength ss) i 0 j 0 bss(ssadd))
  10.   (repeat lenss
  11.     (setq bi(ssname ss i))
  12.     (mapcar '(lambda(x)(if (member '(100 . "AcDbMInsertBlock")  x)
  13.                          (ssadd bi bss))
  14.                )
  15.                (list (entget bi))
  16.     )
  17.     (setq i(1+ i))
  18.   )
  19.   (setq lenbss(sslength bss))
  20.   (repeat lenbss
  21.     (setq mi(ssname bss j) midxf(entget mi))
  22.     (setq dx70(dxf 70 mi)
  23.           dx71(dxf 71 mi)
  24.           dx44(dxf 44 mi)
  25.           dx45(dxf 45 mi)
  26.           dx50(dxf 50 mi)
  27.           )
  28.    (entmake (vl-remove-if '(lambda (x) (member (car x) '(100 70 71 44 45)))midxf))
  29.     (setvar "QAFLAGS" 1)
  30.     (command ".select" (entlast) "" "explode" "p" "")
  31.     (setq x1 (ssget "p"))
  32.     (while (setq xi(ssget "p" '((0 . "INSERT"))))
  33.                (vl-cmdf "explode" xi ""))
  34.     (setq x2 (ssget "p"))
  35.     (command ".select" x1 "r" x2 "")
  36.     (command "select" "p" x2 "")
  37.     (setvar "QAFLAGS" 0)
  38.     (if (/= dx50 0)
  39.       (progn
  40.         (command "ucs" "n" "3"  "0,0" (polar '(0 0) dx50 1)  (polar '(0 0) (+ dx50 (/ pi 2)) 1) "")
  41.         (command "array" "p" "" "r" dx71 dx70 dx45 dx44 "")
  42.         (command "ucs" "p" "")
  43.         )
  44.      (command "array" "p" "" "r" dx71 dx70 dx45 dx44 "")
  45.       )
  46.     (entdel mi)
  47.     (setq j(1+ j))
  48.     )
  49.   (princ)
  50.   (command "undo" "e")
  51.   (setvar "osmode" osmode)
  52.   (setvar "cmdecho" cmdecho)
  53.   (princ)
  54.   )
  55. ;;;;;
发表于 2013-6-28 19:04:32 | 显示全部楼层
不是要炸开,只是要批量修改那分解属性
发表于 2014-5-13 16:50:50 | 显示全部楼层
3楼的方法试过可行,其他高手都是写程序解决的我不会
发表于 2015-4-27 11:53:41 | 显示全部楼层
重新定义块,需要有原来一模一样的图元吧,否则重新定义了,图块不都变了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 01:41 , Processed in 0.225929 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表