批量修改文字比例因子
因自己需要,找到了可以修改各种文字的宽度因子,给需要的朋友!这种工具论坛不是很多吗还要收币啊。。:lol ;;; 批量修改CAD文字宽度因子 - 增强版
(defun C:qqv (/ *error* edata ei ent n newwid newwidstr si ss str tpy widstr success-count)
;; 错误处理函数
(defun *error* (msg)
(if (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,*EXIT*"))
(princ (strcat "\n错误: " msg))
)
(princ)
)
;; 初始化全局变量(如果不存在)
(if (not *qqv-width*)
(setq *qqv-width* 0.7) ; 默认宽度因子
)
;; 获取用户输入
(initget 6) ; 不允许负值
(setq newwid (getreal
(strcat "\n请输入新的文字宽度因子 <" (rtos *qqv-width* 2 2) ">: ")
))
(if (not newwid)
(setq newwid *qqv-width*)
(setq *qqv-width* newwid) ; 更新记忆值
)
;; 验证宽度因子范围
(cond
((> newwid 10)
(princ "\n警告: 宽度因子超过10,已自动限制为10.0")
(setq newwid 10.0)
)
((<= newwid 0)
(princ "\n错误: 宽度因子必须大于0")
(return)
)
)
(princ "\n选择要修改宽度因子的文字对象: ")
(if (setq ss (ssget '((0 . "*TEXT"))))
(progn
(setq n -1
success-count 0)
(while (setq ent (ssname ss (setq n (1+ n))))
(setq edata (entget ent)
tpy (cdr (assoc 0 edata)))
(if (equal tpy "TEXT")
;; 处理单行文字
(progn
(entmod (subst (cons 41 newwid) (assoc 41 edata) edata))
(setq success-count (1+ success-count))
)
;; 处理多行文字
(progn
(setq str (cdr (assoc 1 edata)))
(if (process-mtext-width str newwid)
(progn
(entmod (subst (cons 1 (process-mtext-width str newwid)) (assoc 1 edata) edata))
(setq success-count (1+ success-count))
)
)
)
)
)
(princ (strcat "\n操作完成! 已修改 " (itoa success-count) " 个文字对象的宽度因子为 " (rtos newwid 2 2)))
)
(princ "\n未选择文字对象")
)
(princ)
)
;;; 处理多行文字宽度因子
(defun process-mtext-width (str newwid / pos1 pos2 old-width-str new-width-str)
;; 查找现有的宽度控制符
(setq pos1 (vl-string-search "\\W" str))
(if pos1
;; 如果找到现有的宽度控制符,替换它
(progn
(setq pos2 (vl-string-search ";" str pos1))
(if pos2
(progn
(setq old-width-str (substr str (1+ pos1) (- pos2 pos1 -1)))
(setq new-width-str (strcat "\\W" (rtos newwid 2 4) ";"))
(vl-string-subst new-width-str old-width-str str)
)
str ; 如果没有找到分号,返回原字符串
)
)
;; 如果没有找到宽度控制符,添加它
(progn
;; 检查是否已有其他格式控制符
(if (or (wcmatch str "{\\*}")
(vl-string-search "\\" str))
;; 在现有格式控制符中添加宽度控制
(strcat "{\\W" (rtos newwid 2 4) ";" (vl-string-trim "{}" str) "}")
;; 添加完整的格式控制
(strcat "{\\W" (rtos newwid 2 4) ";" str "}")
)
)
)
) 感谢分享。 谢谢楼主热心分享,支持 小毛草 发表于 2025-11-9 16:34
谢谢分享
好象程序有问题,是不是少括号
加载就CAD卡死了 动态调整包含单行和多行文字
页:
[1]