明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1376|回复: 4

[基础] {求助}求改变字体样式中的字体的思路。

[复制链接]
发表于 2010-12-2 11:01:29 | 显示全部楼层 |阅读模式
已知:一个文件中都含有多个不同的文字样式。

求:如何用LISP把所有文字样式中的字体,改为“黑体”。

不多耽误各位时间,只要指点下思路,剩下的我自己回去研究,多谢。
发表于 2010-12-2 18:50:48 | 显示全部楼层
本帖最后由 chg 于 2010-12-2 18:51 编辑

我的思路是这样的,首先用TBLNEXT函数把STYLE中的所有条目取得,然后再用TBLOBJNAME函数取得每一个条目的图元名,最后用ENTMOD函数修改其中对应的组码值,以达到你要求的效果,希望对你有帮助,不一定正确。
 楼主| 发表于 2010-12-3 11:28:12 | 显示全部楼层
非常感谢LS, 如你所说。我想先用TLNEXT 取出某个字体样式的表,然后用(3 . “simhei.ttf”)去替换这个字体样式表中的对应字体项,然后用ENTMOD更新这个表。
返回的表看样子是没问题,但是返回CAD查看字体样式中的字体,确没有变,请问这个是怎么回事呢?

因为文件中的所有文字对象都是字体样式控制的,所以我想如果修改样式要比修改对象快,但是不知道这个方法是不是可行,多谢各位前辈指导。


(setq        s1 (TBLNEXT "style")                ;取字体样式,返回表。
        d1 (assoc 3 s1)
        b1 (cons 3 "simhei.ttf")        ;创建字体=黑体。
  )
  (setq b2 (subst b1 d1 s1))                ;替换文字样式中的字体为黑体。
  (entmod b2)                                ;更新文字样式
发表于 2010-12-3 12:12:00 | 显示全部楼层
TBLNext 得出的 DXF组码是不完整的
(setq s1 (tblnext "style")
        s1name (cdr (assoc 2 s1))
        s1 (tblobjname "style" s1name)
        s1 (entget s1)
        )
这样才能得到完整的 样式组码
 楼主| 发表于 2010-12-3 14:45:48 | 显示全部楼层
多谢各位指点,逐个查了这函数怎么用的,又学会了不少。非常感谢。下面是完成的。

(defun c:pp ()
  (while (setq s1 (TBLNEXT "style"))       
    (setq s1name (cdr (assoc 2 s1))       
          s1         (tblobjname "style" s1name)
          s1         (entget s1)               
          d1         (assoc 3 s1)       
          b1         (cons 3 "simhei.ttf")
    )
    (setq b2 (subst b1 d1 s1))               
    (entmod b2)
  )                                       
  (command "regen")
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 16:15 , Processed in 0.173815 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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