批量修改块名
本帖最后由 林霄云 于 2021-11-25 17:56 编辑行情下行,修改增加,批量修改块名,避免块重名出错。 (defun c:brns( / bnlist bnt1 t2 x i)
;desiged by 林霄云 2021年11月23日
;批量改块名
(setq bnlist '()) ;待修改块名列表
(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.
(while (setq bn (tblnext "block"))
(if (and (wcmatch (cdr (assoc 2 bn)) "[~*$_]*") (< (cdr (assoc 70 bn)) 4)) ;70组码,确定内部块还是外部参照
;取首字母不等于*$_,调整出特殊字符如[*$_]
(setq bnlist (cons (cdr (assoc 2 bn)) bnlist));列表肯定是不重名的
);if
);while
;(setq bnlist (reverse bnlist)) ;确保内部块在前面,当排除外部参照时,次序不需要
(setq t1 (rtos (getvar "cdate") 2 6) i 0);"20211123.114254"
(foreach x bnlist
(setq t2 (strcat x "_" t1))
(command "rename" "b" x t2)
(setq i (1+ i))
(princ (strcat(itoa i) " :" x "\n"))
;(if (= 0 (rem i 5)) (princ "\n"))
);foreach
(princ (strcat "总共重命名" (itoa i) "个块!" "\n"))
(princ)
)
代码中,在批量修改中,排除了首字母为*$_的块 (wcmatch (cdr (assoc 2 bn)) "[~*$_]*")以及外部参照(< (cdr (assoc 70 bn)) 4)) ,批量修改块名为附加一个时间后缀(setq t1 (rtos (getvar "cdate") 2 6) i 0),不提供交互。批量修改时,交互的意义不大。
很高效的批改块名 挺好的,下载试试 大神终于又出现了有没有框选多个物体 每个物体各自成块的插件 大神可否写一个浩辰的版本 很高效的批改块名 依然小小鸟 发表于 2021-11-26 18:45
大神终于又出现了有没有框选多个物体 每个物体各自成块的插件
多个物体的判断规则不明确。可以框选成块。 林霄云 发表于 2021-12-3 17:55
多个物体的判断规则不明确。可以框选成块。
(defun c:ssb( / ptu tempname ss )
;选择集成块
;Designed by 林霄云; 2020年4月20日
(princ "\n选择要成块的对象: ")
(setq ss (ssget))
(if (null (setq ptu (getpoint "\n输入基点")))
(setq ptu '(0 0))
)
(if ss
(progn
(setq tempname (strcat"hnutempblock_" (rtos (getvar 'cdate) 2 6))) ;块名加时间
(command "block" tempname ptu ss "" );生成块
(command "insert" tempname ptu 1 1 0);插入块
)
);if
(princ)
) 感谢大佬分享,谢谢
页:
[1]