一个命令解决图纸文字乱飞的问题
lisp吧
全部回复
仅看楼主
level 3
max_wei_v 楼主
;;; 修复字体:将所有非标准字体替换为 txt.shx + hztxt.shx
;;; 命令:FF
(defun c:FF ( / styles styleName styleData fontFile bigFont)
(setq styles (tblnext "STYLE" t)) ; 开始遍历文字样式表
(while styles
(setq styleName (cdr (assoc 2 styles)) ; 样式名称
fontFile (cdr (assoc 3 styles)) ; 字体文件名
bigFont (cdr (assoc 4 styles)) ; 大字体文件名
)
;; 判断:如果当前字体不是 txt.shx 或者没有大字体(或大字体不是 hztxt.shx)
(if (or (not (wcmatch fontFile "txt.shx"))
(and (not bigFont) (wcmatch fontFile "*.shx")) ; 部分样式可能没有大字体,但我们需要统一设置
(and bigFont (not (wcmatch bigFont "hztxt.shx")))
)
(progn
(setq styleData (entget (tblobjname "STYLE" styleName)))
;; 修改字体文件和大字体
(setq styleData (subst (cons 3 "txt.shx") (assoc 3 styleData) styleData))
(if (assoc 4 styleData)
(setq styleData (subst (cons 4 "hztxt.shx") (assoc 4 styleData) styleData))
(setq styleData (append styleData (list (cons 4 "hztxt.shx"))))
)
(entmod styleData) ; 更新样式
(princ (strcat "\n已修复样式: " styleName))
)
)
(setq styles (tblnext "STYLE")) ; 下一个样式
)
(command "_.regen") ; 刷新图形
(princ "\n所有文字样式已检查,需要修复的已设置为 txt.shx + hztxt.shx。")
(princ)
)
2026年04月09日 02点04分 1
1