masterlong 发表于 2016-7-23 12:24:10

嵌套块清理(odcl)

本帖最后由 masterlong 于 2016-7-28 22:01 编辑

本来应该发在odcl板块的
但那里人比较少
还是发这里吧

命令:B0
程序功能:嵌套块清理
函数支持:opendcl

程序思路简要说明
将嵌套图块分为两类:顶层和非顶层
分两个列表显示
顶层类是可以直接删、炸开并清理的
非顶层不能直接删、炸、清理
对不需要清理的嵌套块加入忽略块名列表
顶层列表清空后自动刷新重置两列表
直到嵌套块全部清理完成


因为是从我的一个主程序中剥离出来的
程序中部分次要功能屏蔽
帮助界面的文字没改









opendcl运行支持库下载
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=173225&pid=778131&page=1&extra=#pid778131

10楼补了一个漏掉的函数

masterlong 发表于 2023-8-23 19:19:48

这个程序后来做了些改进
加了【内部炸开】和【转换图层】两个功能
有空时整理下发上来

KEwb 发表于 2023-9-2 21:01:06

可以发个支持CAD2020版本的么,感觉这个挺好用的

bing00 发表于 2023-8-23 17:36:21

漏掉的函数加在哪里没有说明清楚

yanchao316 发表于 2016-7-23 16:37:32

感谢分享。。。。。。。

白色微風1991 发表于 2016-7-26 07:23:26

感谢分享。。。。。。。masterlong你好為什麼不能用

masterlong 发表于 2016-7-26 13:07:39

出错提示是啥?

fl202 发表于 2016-7-26 15:29:09

遇到嵌套块是很烦的。好多人定义块时,对象没有在0层(习惯非常不好)。这样最后出图图纸上图层特别多,清理不掉。下面的程序:;---------- 将块内所有对象更改到0图层,颜色随层。
但遗憾的是不能处理嵌套块。
(defun c:0t1 ( / e i l n ss x )
;---------- 将块内所有对象更改到0图层,颜色随层。
   (setvar "clayer" "0")
    (if (setq ss (ssget "X" '((0 . "INSERT"))))
      (repeat (setq i (sslength ss))
            (if (not (member (setq n (cdr (assoc 2 (entget (ssname ss (setq i (1- i))))))) l))
                (progn
                  (setq e (tblobjname "block" n)
                        l (cons n l)
                  )
                  (while (setq e (entnext e))
                        (setq x (entget e))
                        (entmod (subst '(8 . "0") (assoc 8 x) x))
                  )
                )
            )
      )
    )
    (command "_.regen")
    (princ)
)

hooboxu 发表于 2016-7-26 19:19:37

fl202 发表于 2016-7-26 15:29 static/image/common/back.gif
遇到嵌套块是很烦的。好多人定义块时,对象没有在0层(习惯非常不好)。这样最后出图图纸上图层特别多,清理 ...

挺好用.收藏.11

masterlong 发表于 2016-7-26 20:20:36

嵌套块很多是ctrl+shift+v产生的
层层嵌套非常讨厌

白色微風1991 发表于 2016-7-27 07:27:24

感谢分享。。。。。。。masterlong你好為什麼不能用
error: no function definition: DCL-FORM-SHOW

masterlong 发表于 2016-7-27 08:38:23

标题和程序简介都说了
这是基于opendcl开发的
下个运行支持函数库

masterlong 发表于 2016-7-28 21:37:34

貌似掉了个函数

;;检查块名,含wcmatch函数约定的特殊字符,在前加“`”以跳过特殊字符,保证块名过滤选择时图块能被选中
(defun checkblknm( nm / nmlist newlist )
        (if (wcmatch nm "*[`@`#`.`~]*,*`[*,*`]*")
                (progn
                        (setq nmlist (vl-string->list nm))
                        (setq newlist '())
                        (foreach x nmlist
                                (if (member x '(35 64 46 126 91 93))
                                        (setq newlist (cons x (cons 96 newlist)))
                                        (setq newlist (cons x newlist))
                                )
                        )
                        (vl-list->string (reverse newlist))
                )
                nm
        )
)
页: [1] 2 3
查看完整版本: 嵌套块清理(odcl)