明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3093|回复: 14

[源码] 匿名块更改为普通块

[复制链接]
发表于 2020-8-2 23:28:39 | 显示全部楼层 |阅读模式
本帖最后由 muwind 于 2020-8-6 22:41 编辑
  1. ;最近开始用三维建模,导出的dwg图纸全是匿名块
复制代码
;发现点问题,当有多个同名的匿名块(普通块转为匿名块后经常遇到)的时候,会改名出错, 重新修改了下,详见附件

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


论坛现有的不太适合自己,所以根据论坛的改了一个适合自己的
(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
                                         (setq  nam (vla-get-name (vlax-ename->vla-object e)));获取匿名块名字
                                         (setq  bnnew(substr  nam 2));获取匿名块星号后面的字符串
                                         (setq  m 0)
                                         (while (/= (tblsearch  "BLOCK" bnnew) nil)
                                                         (setq  m (1- m))
                                                        (setq  bnnew(strcat  bnnew  (rtos  m 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)
)




本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +2 金钱 +5 收起 理由
you_boss + 1 + 5
USER2128 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

 楼主| 发表于 2020-8-3 23:43:28 | 显示全部楼层
匿名块我感觉是星号+一个字母开头的都应该是了,从我的三维软件转出来的是 *A开头的,
我也根据自家情况写两个 普通块转为匿名块的(排除部分块更名,如果很多块排除估计用表方便点)
(defun c:b2ab(/ blks ss  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
            (setq  nam (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)
)


回复 支持 0 反对 1

使用道具 举报

发表于 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)
    )
  )
)

发表于 2020-8-4 16:21:08 | 显示全部楼层
楼主感谢分享啊
发表于 2020-8-4 23:04:57 | 显示全部楼层

楼主感谢分享啊
发表于 2020-11-17 15:44:57 | 显示全部楼层
多谢楼主分享
发表于 2021-1-5 11:37:51 | 显示全部楼层
感谢分享,这个太实用了
发表于 2022-3-31 02:54:31 | 显示全部楼层
好用学习了~~~~
发表于 2022-4-18 15:09:43 | 显示全部楼层
不知道为什么其他工具箱集成的这个功能好像没反应。。
发表于 2022-7-9 20:48:48 | 显示全部楼层
这个可以,方便
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 19:54 , Processed in 0.190324 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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