AutoLISP脚本开发求助:实现选中TEXT/MText数字自动+1
AutoLISP批量递增选中文本(TEXT/MTEXT)中的数字
原代码存在的问题
- 选择范围仅限制为红色(颜色码1)的TEXT对象,未包含MTEXT,不符合需求
- 遍历选择集的逻辑错误,无法正确获取下一个对象
- 数字判断不够严谨,可能误处理非数字文本
- 使用
command命令修改文本,易受CAD环境影响,可靠性不足
修正后的代码
(defun c:IncrementTextNumbers (/ ss i ent ent-data txt num new-txt) ;; 选择TEXT或MTEXT对象,无颜色限制 (setq ss (ssget '((0 . "TEXT,MTEXT")))) (if ss (progn (setq i 0) ;; 遍历所有选中对象 (while (< i (sslength ss)) (setq ent (ssname ss i) ent-data (entget ent)) ;; 获取文本内容(TEXT和MTEXT的主内容都存在于(1 . "")字段) (setq txt (cdr (assoc 1 ent-data))) ;; 判断内容是否为纯整数(支持正负、带千分位格式) (if (and (wcmatch txt "#,##0;-#,##0") (numberp (setq num (atoi txt)))) (progn (setq new-txt (itoa (+ num 1))) ;; 直接修改实体数据并刷新显示 (entmod (subst (cons 1 new-txt) (assoc 1 ent-data) ent-data)) (entupd ent) ) ;; 打印跳过提示,方便排查 (princ (strcat "\n跳过非纯数字对象: " (vlax-ename->vla-object ent))) ) (setq i (1+ i)) ) (princ "\n批量递增完成!") ) (princ "\n未选中任何TEXT/MTEXT对象。") ) (princ) ; 静默退出,避免多余输出 )
关键改进说明
- 适配多类型文本:选择集过滤器同时支持TEXT和MTEXT,满足批量处理需求
- 稳定遍历逻辑:用索引变量逐个获取选择集中的对象,避免原代码的循环错误
- 严谨数字校验:通过
wcmatch匹配整数格式,再验证转换结果,确保只处理纯数字文本 - 可靠修改方式:采用
entmod直接修改实体数据,配合entupd刷新显示,比command命令更稳定 - 直观提示信息:对非数字对象给出明确提示,便于用户确认处理情况
内容的提问来源于stack exchange,提问作者kingnull
相关产品推荐
相关产品推荐

