muwind 发表于 2020-8-2 23:28:39

匿名块更改为普通块

本帖最后由 muwind 于 2020-8-6 22:41 编辑

;最近开始用三维建模,导出的dwg图纸全是匿名块;发现点问题,当有多个同名的匿名块(普通块转为匿名块后经常遇到)的时候,会改名出错, 重新修改了下,详见附件

附件有个5个函数
ab2b全部匿名块更改为普通块
ab2bs 选择的匿名块更改为普通块
ab2b2 全部匿名块更改为普通块的另一个算法
b2ab   选择的普通块更改为匿名块
b2b   选择的任意块更改为输入的文件名
static/image/hrline/2.gif

论坛现有的不太适合自己,所以根据论坛的改了一个适合自己的
(defun c:brab(/ blks ss m n e nam bnnew)
(setq BLKs (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))));取得图形的Blocks集合
(if (setq ss (ssget "_X" '((0 . "INSERT")(2 . "`**"))))
      (progn
       (repeat (setq n (sslength ss))
         (if (setq e (ssname ss (setq n (1- n))))
          (progn
                                       (setqnam (vla-get-name (vlax-ename->vla-object e)));获取匿名块名字
                                       (setqbnnew(substrnam 2));获取匿名块星号后面的字符串
                                       (setqm 0)
                                       (while (/= (tblsearch"BLOCK" bnnew) nil)
                                                         (setqm (1- m))
                                                      (setqbnnew(strcatbnnew(rtosm 2 2)))
                                       )
            (vla-put-name (vla-item blks nam) bnnew);Blocks中名为nam的Block重命名为bnnew
          )
         )
      )
         (vla-auditinfo (vla-get-activedocument (vlax-get-acad-object)) :vlax-true)
                         )
)
      (princ)
)




muwind 发表于 2020-8-3 23:43:28

匿名块我感觉是星号+一个字母开头的都应该是了,从我的三维软件转出来的是 *A开头的,
我也根据自家情况写两个 普通块转为匿名块的(排除部分块更名,如果很多块排除估计用表方便点)
(defun c:b2ab(/ blks ssn e nam bnnew)
(setq BLKs (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))));取得图形的Blocks集合
(if (setq ss (ssget "_X"'((0 . "INSERT")(2 . "~`**"))))
      (progn
       (repeat (setq n (sslength ss))
         (if (setq e (ssname ss (setq n (1- n))))
          (progn
          (setqnam (vla-get-name (vlax-ename->vla-object e)));获取普通块名字
            (if (and (/= nam "BTL") (/= nam "mxl") )
                (vla-put-name (vla-item blks nam) "*A");Blocks中名为nam的Block重命名为匿名
          )
            )
          )
        )
   )
)
        (princ)
)


maiko 发表于 2020-8-3 22:29:28

本帖最后由 maiko 于 2020-8-3 22:45 编辑

给楼主顶个赞,感谢楼主分享@~~~
(defun c:bnm ( / blks a blk i obj ss doc )
(setq blks (vla-get-blocks (setq doc (vla-get-activedocument (vlax-get-acad-object)))))
(if (setq i -1 ss (ssget "_X" '((0 . "INSERT")(2 . "`*U*"))))
    (while (setq obj (vlax-ename->vla-object(ssname ss (setq i (1+ i)))))
      (setq blk (vla-item blks (vla-get-name obj)))
      (vla-put-name blk (setq a (strcat "BNM-" (rtos (* (getvar "cdate") 1e8)))))
      (vla-auditinfo doc :vlax-true)
      (vla-put-name blk a)
    )
)
)

czb203 发表于 2020-8-4 16:21:08

楼主感谢分享啊

paulpipi 发表于 2020-8-4 23:04:57


楼主感谢分享啊

yubfang 发表于 2020-11-17 15:44:57

多谢楼主分享

lxl217114 发表于 2021-1-5 11:37:51

感谢分享,这个太实用了

magicheno 发表于 2022-3-31 02:54:31

好用学习了~~~~

ZJKUSO 发表于 2022-4-18 15:09:43

不知道为什么其他工具箱集成的这个功能好像没反应。。

sowin 发表于 2022-7-9 20:48:48

这个可以,方便
页: [1] 2
查看完整版本: 匿名块更改为普通块