明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: masterlong

[源码] 嵌套块内部分解

[复制链接]
发表于 2020-6-10 23:11 | 显示全部楼层
defun c:exnest ( / doc ent )
   (while
       (progn (setvar 'errno 0) (setq ent (car (entsel "\nSelect block: ")))
           (cond
               (   (= 7 (getvar 'errno))
                   (princ "\nMissed, try again.")
               )
               (   (null ent) nil)
               (   (/= "INSERT" (cdr (assoc 0 (entget ent))))
                   (princ "\nSelected object is not a block.")
               )
           )
       )
   )
   (if ent
       (progn
           (vlax-for obj
               (vla-item
                   (vla-get-blocks (setq doc (vla-get-activedocument (vlax-get-acad-object))))
                   (LM:name->effectivename (cdr (assoc 2 (entget ent))))
               )
               (exnest:explode obj)
           )
           (vla-regen doc acallviewports)
       )
   )
   (princ)
)
(defun exnest:explode ( obj / lst )
   (if
       (and
           (= "AcDbBlockReference" (vla-get-objectname obj))
           (vlax-write-enabled-p obj)
           (not (vl-catch-all-error-p (setq lst (vl-catch-all-apply 'vlax-invoke (list obj 'explode)))))
       )
       (progn
           (foreach obj lst (exnest:explode obj))
           (vla-delete  obj)
       )
   )
)
;; Block Name -> Effective Block Name  -  Lee Mac
;; blk - [str] Block name

(defun LM:name->effectivename ( blk / rep )
   (if
       (and (wcmatch blk "`**")
           (setq rep
               (cdadr
                   (assoc -3
                       (entget
                           (cdr (assoc 330 (entget (tblobjname "block" blk))))
                          '("AcDbBlockRepBTag")
                       )
                   )
               )
           )
           (setq rep (handent (cdr (assoc 1005 rep))))
       )
       (cdr (assoc 2 (entget rep)))
       blk
   )
)
(vl-load-com) (princ)

这个是晓东Lisphk的,可以实现框选嵌套块内部全部炸开的,不过也不支持保留底层块的
 楼主| 发表于 2020-6-11 01:26 来自手机 | 显示全部楼层
出错以后按F2   把出错提示截个图   光这么说谁知道啥情况   我肯定是自己能运行才上传的   速度就不追求了   优化需要时间    最近太忙    框选不是问题    问题也是没时间
发表于 2020-6-11 11:58 | 显示全部楼层
masterlong 发表于 2020-6-11 01:26
**** 作者被禁止或删除 内容自动屏蔽 ****

大侠怎么被屏蔽了
 楼主| 发表于 2020-6-11 16:02 | 显示全部楼层
貌似论坛误判我重复发帖  
发表于 2020-6-12 13:30 | 显示全部楼层
用06的话XXN可以用,XXM如下图的GIF的样子的,然后高版本的话是半个小时都一直卡在那里不动了,想按F2也按不出来的,不知道是不是嵌套块太多了缘故

本帖子中包含更多资源

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

x
 楼主| 发表于 2020-6-12 19:41 | 显示全部楼层
把你的dwg发上来
我有空看看
另外
你的CAD低版本是啥高版本是啥
也一并说说
发表于 2020-6-13 01:03 | 显示全部楼层
低版本用的06的,高版本用的18的,后来都试了下都是直接一闪就没反应了

本帖子中包含更多资源

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

x
 楼主| 发表于 2020-6-13 10:15 | 显示全部楼层
第197行里有个调试时用的语句忘记删了
(~~ (strcase (cdr (assoc 2 (entget y)))))
在这一句之前加1个";"屏蔽掉
再试试



本帖子中包含更多资源

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

x
 楼主| 发表于 2020-6-13 10:22 | 显示全部楼层
另外为啥不采用框选
源码里其实有交代原因
不是做不到
而是可能引起错误
发表于 2020-6-13 11:54 | 显示全部楼层
加上;号只要用是可以用了的,不过试了下,有几级块是炸掉了,但是我发上来的图片那种台盆这些卫生洁具也是一个块,包含这些卫生洁具的那个嵌套块没有炸开来的

本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 14:20 , Processed in 0.846894 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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