nyistjz 发表于 2019-11-16 11:56:05

自定义字体更换函数


如下,是我从网上找来的字体更换程序,完全复制了两份,用来替换不同的字体样式。
有没有可能,把这个程序定义成一个"函数",再用这个函数来更换不同的样式。
例如:(函数 tssdeng.shx hztxt.shx),(函数 gbenor.shx gbcbig.shx)
还请高手帮忙修改,谢谢!

;;更换字体样式
(defun c:Standard_tssdeng ()
       (graphscr);关闭文本窗口
       (initget 7)
       (setq a1 (tblnext "style" t));将指针移到第一个字体
       (while a1
            (setq a2 (cdr (assoc 2 a1)));取出字体名称
            (setq a3 (entget (tblobjname "style" a2)));取出字体的数据串行
            (setq a3 (subst (cons 3 "tssdeng.shx" ) (assoc 3 a3) a3));将字体字型改成新字型
            (entmod a3);更新字体
            (setq a3 (subst (cons 4 "hztxt.shx" ) (assoc 4 a3) a3));将字体字型改成新字型
            (entmod a3)
            (setq a1 (tblnext "style" ));找出下一个字体
       );end while
       (command "REGEN" )
       (princ "\n-->所有字型变更为方正中文,消除乱码成功!" )
);end defun
(defun c:Standard_gbcbig ()
       (graphscr)
       (initget 7)
       (setq a1 (tblnext "style" t));将指针移到第一个字体
       (while a1
            (setq a2 (cdr (assoc 2 a1)));取出字体名称
            (setq a3 (entget (tblobjname "style" a2)));取出字体的数据串行
            (setq a3 (subst (cons 3 "gbenor.shx" ) (assoc 3 a3) a3));将字体字型改成新字型
            (entmod a3);更新字体
            (setq a3 (subst (cons 4 "gbcbig.shx" ) (assoc 4 a3) a3));将字体字型改成新字型
            (entmod a3)
            (setq a1 (tblnext "style" ));找出下一个字体
       );end while
       (command "REGEN" )
       (princ "\n-->所有字型变更为标准中文,消除乱码成功!" )
);end defun

start4444 发表于 2019-11-16 14:27:21

(defun hzt (zt1 zt2 / a1 a2 a3)
       ;(graphscr);关闭文本窗口
       ;(initget 7)
       (setq a1 (tblnext "style" t));将指针移到第一个字体
       (while a1
            (setq a2 (cdr (assoc 2 a1)));取出字体名称
            (setq a3 (entget (tblobjname "style" a2)));取出字体的数据串行
            (setq a3 (subst (cons 3 zt1 ) (assoc 3 a3) a3));将字体字型改成新字型
            (entmod a3);更新字体
            (setq a3 (subst (cons 4 zt2 ) (assoc 4 a3) a3));将字体字型改成新字型
            (entmod a3)
            (setq a1 (tblnext "style" ));找出下一个字体
       );end while
       (command "REGEN" )
       (princ "\n-->所有字型变更为方正中文,消除乱码成功!"))

;测试
(defun c:tt5 ()
(hzt "txt.shx" "hztxt.shx")       
       
)

muwind 发表于 2020-12-20 11:02:05

本帖最后由 muwind 于 2020-12-20 11:18 编辑

bai2000 发表于 2020-12-20 09:50
图框的字体是黑体字,怎么改?
首先要区分CAD字体和字体样式,cad中字显示形式是以字体样式体现,同样的一个字体可以在不同的字体样式中,同一个字体样式也可以随意指定任何字体。修改cad里面的字体,实际上应该是修改字体样式里面对应的字体。
如果你图框里面的字采用的 “黑体”,并且对应一个叫“黑体样式”的样式。你用程序修改字体样式的时候可以给定一个判断:
如果 字体样式名 = 黑体样式
   什么也不做
否则
修改 字体样式下面对应的字体
反之亦然
比如 上面那些代码中
(setq a2 (cdr (assoc 2 a1)))获取的就是字体样式名
(if (/= a2 “黑体样式”)
   (progn
       替换字体代码)
)

wyl219 发表于 2019-11-18 18:39:43

start4444 发表于 2019-11-16 14:27
(defun hzt (zt1 zt2 / a1 a2 a3)
       ;(graphscr);关闭文本窗口
       ;(initget 7)


             (entmod a3);更新字体
            (setq a3 (subst (cons 4 zt2 ) (assoc 4 a3) a3));将字体字型改成新字型
            (entmod a3)
第一个entmod没意义,可以取消

nyistjz 发表于 2019-11-16 19:59:44

start4444 发表于 2019-11-16 14:27
(defun hzt (zt1 zt2 / a1 a2 a3)
       ;(graphscr);关闭文本窗口
       ;(initget 7)


万分感谢!

sunny_8848 发表于 2019-11-17 19:55:21

要是能指定仅更换某些字体就更好了

nyistjz 发表于 2019-11-21 22:32:32

wyl219 发表于 2019-11-18 18:39
(entmod a3);更新字体
            (setq a3 (subst (cons 4 zt2 ) (assoc 4 a3) a3)); ...

bai2000 发表于 2020-12-19 22:16:45

怎么改才能不更新图框(图块)中的字体呢?

muwind 发表于 2020-12-19 22:52:29

bai2000 发表于 2020-12-19 22:16
怎么改才能不更新图框(图块)中的字体呢?

图框的字体单独指定为某个样式,替换字体时候忽略掉这个字体样式即可

bai2000 发表于 2020-12-20 09:50:33

muwind 发表于 2020-12-19 22:52
图框的字体单独指定为某个样式,替换字体时候忽略掉这个字体样式即可

图框的字体是黑体字,怎么改?
页: [1] 2
查看完整版本: 自定义字体更换函数