明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2364|回复: 12

[提问] 自定义字体更换函数

[复制链接]
发表于 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

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 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")       
       
)
发表于 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
       替换字体代码)
)
发表于 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没意义,可以取消
 楼主| 发表于 2019-11-16 19:59:44 | 显示全部楼层
start4444 发表于 2019-11-16 14:27
(defun hzt (zt1 zt2 / a1 a2 a3)
       ;(graphscr);关闭文本窗口
       ;(initget 7)

万分感谢!
发表于 2019-11-17 19:55:21 | 显示全部楼层
要是能指定仅更换某些字体就更好了
 楼主| 发表于 2019-11-21 22:32:32 | 显示全部楼层
wyl219 发表于 2019-11-18 18:39
(entmod a3);更新字体
              (setq a3 (subst (cons 4 zt2 ) (assoc 4 a3) a3)); ...

发表于 2020-12-19 22:16:45 | 显示全部楼层
怎么改才能不更新图框(图块)中的字体呢?
发表于 2020-12-19 22:52:29 | 显示全部楼层
bai2000 发表于 2020-12-19 22:16
怎么改才能不更新图框(图块)中的字体呢?

图框的字体单独指定为某个样式,替换字体时候忽略掉这个字体样式即可
发表于 2020-12-20 09:50:33 | 显示全部楼层
muwind 发表于 2020-12-19 22:52
图框的字体单独指定为某个样式,替换字体时候忽略掉这个字体样式即可

图框的字体是黑体字,怎么改?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 11:45 , Processed in 0.158213 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表