You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:32:25