本帖最后由 林霄云 于 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),不提供交互。批量修改时,交互的意义不大。




网友答:
林霄云 发表于 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. )


网友答:
依然小小鸟 发表于 2021-11-26 18:45
大神终于又出现了  有没有框选多个物体 每个物体各自成块的插件

多个物体的判断规则不明确。可以框选成块。

网友答: 大神终于又出现了  有没有框选多个物体 每个物体各自成块的插件  

网友答: 很高效的批改块名

网友答: 挺好的,下载试试

网友答: 大神可否写一个浩辰的版本

网友答: 很高效的批改块名

网友答: 感谢大佬分享,谢谢

网友答: 要是能自己替换块名前后缀就好了
  • 上一篇:如何获取块内某点的全局坐标
  • 下一篇:没有了