明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1946|回复: 8

[源码] 批量修改块名

[复制链接]
发表于 2021-11-25 17:51:47 | 显示全部楼层 |阅读模式
本帖最后由 林霄云 于 2021-11-25 17:56 编辑

行情下行,修改增加,批量修改块名,避免块重名出错。
  1. (defun c:brns( / bnlist bn  t1 t2 x i)
  2. ;desiged by 林霄云 2021年11月23日
  3. ;批量改块名
  4. (setq bnlist '()) ;待修改块名列表
  5. (setq bn (tblnext "block" T)) ;If this argument is present and is not nil, the symbol table is rewound and the first entry in it is retrieved.

  6. (while   (setq bn (tblnext "block"))
  7.   (if (and (wcmatch (cdr (assoc 2 bn)) "[~*$_]*") (< (cdr (assoc 70 bn)) 4)) ;70组码,确定内部块还是外部参照
  8.    ;取首字母不等于*$_,调整出特殊字符如[*$_]
  9.    (setq bnlist (cons (cdr (assoc 2 bn)) bnlist));列表肯定是不重名的
  10.   );if
  11. );while
  12. ;(setq bnlist (reverse bnlist)) ;确保内部块在前面,当排除外部参照时,次序不需要
  13. (setq t1 (rtos (getvar "cdate") 2 6) i 0)  ;"20211123.114254"
  14. (foreach x bnlist
  15.   (setq t2 (strcat x "_" t1))

  16.   (command "rename" "b" x t2)
  17.   (setq i (1+ i))
  18.   (princ (strcat  (itoa i) " :" x "\n"))
  19.   ;(if (= 0 (rem i 5)) (princ "\n"))
  20. );foreach
  21. (princ (strcat "总共重命名" (itoa i) "个块!" "\n"))
  22. (princ)
  23. )

代码中,在批量修改中,排除了首字母为*$_的块 (wcmatch (cdr (assoc 2 bn)) "[~*$_]*")以及外部参照(< (cdr (assoc 70 bn)) 4)) ,批量修改块名为附加一个时间后缀(setq t1 (rtos (getvar "cdate") 2 6) i 0),不提供交互。批量修改时,交互的意义不大。


本帖子中包含更多资源

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

x

评分

参与人数 5明经币 +5 收起 理由
qq2431056687 + 1
likongshun + 1 很给力!
yanchao316 + 1 很给力!
USER2128 + 1 赞一个!
bssurvey + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-11-26 10:46:28 | 显示全部楼层
很高效的批改块名
发表于 2021-11-26 14:06:13 | 显示全部楼层
挺好的,下载试试
发表于 2021-11-26 18:45:52 | 显示全部楼层
大神终于又出现了  有没有框选多个物体 每个物体各自成块的插件  
发表于 2021-11-30 11:32:31 | 显示全部楼层
大神可否写一个浩辰的版本
发表于 2021-11-30 21:55:27 | 显示全部楼层
很高效的批改块名
 楼主| 发表于 2021-12-3 17:55:51 | 显示全部楼层
依然小小鸟 发表于 2021-11-26 18:45
大神终于又出现了  有没有框选多个物体 每个物体各自成块的插件

多个物体的判断规则不明确。可以框选成块。
 楼主| 发表于 2021-12-3 17:57:21 | 显示全部楼层
林霄云 发表于 2021-12-3 17:55
多个物体的判断规则不明确。可以框选成块。
  1. (defun c:ssb( / ptu tempname ss )
  2. ;选择集成块
  3. ;Designed by 林霄云; 2020年4月20日
  4. (princ "\n选择要成块的对象: ")
  5. (setq ss (ssget))
  6. (if (null (setq ptu (getpoint "\n输入基点")))
  7. (setq ptu '(0 0))
  8. )
  9. (if ss
  10. (progn
  11. (setq tempname (strcat  "hnutempblock_" (rtos (getvar 'cdate) 2 6))) ;块名加时间
  12. (command "block" tempname ptu ss "" );生成块
  13. (command "insert" tempname ptu 1 1 0);插入块
  14. )
  15. );if
  16. (princ)
  17. )
发表于 2023-2-7 18:53:55 | 显示全部楼层
感谢大佬分享,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 08:45 , Processed in 0.185818 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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