设为首页收藏本站积分充值论坛守则开通VIP升级攻略

阿斯米网

简单一步 , 微信登陆

手机短信,快捷登录

只需一步,快速开始

搜索
总共49217条微博

论坛承接ASME相关业务 2023年最新国外标准中译本价格目录 关于ASME BPVC 2023版预定优惠折扣的通知
ASME 2023版中文翻译众筹中 广告位招租[50米粒/天] [ASME BPVC 2023版征订单下载]
2995查看 | 13回复

[原创] 自动替换字体形文件名

[复制链接]

TA在排名榜Top100

积分:NO. 8 名

发帖:NO. 28 名

在线:NO. 33 名

累计签到:3466 天
连续签到:4 天
发表于 2015-1-18 14:29:19 | 显示全部楼层 |阅读模式
经常会遇到外来的图纸在打开时,缺少形文件和显示不全或显示问号等的情形,很是恼火。而且本人有一个癖好,就是喜欢用自己的形文件。所以在看图之前一定要将字体的形文件改为自己的形文件,不然就闹心、不舒服,无法进入状态。但改起来也是比较繁琐,网上找来找去也没找到一个能用的,不是加密就是有时间限制。一狠心,自己搞一个。经过四天的折磨,终于搞出来一个可用的程序。虽然不是特别完善,但自己就这水平了,诸君莫笑。当然,哪位大神能够抽出宝贵时间修改使之完善,本人将不胜感激。好了,闲言少叙,下面就程序逐条解释说明一下,以便理解本人的意图。
(defun c:chst();定义函数change style各取前两个字母
  (setvar "CMDECHO" 0);使程序在执行过程中不在屏幕上显示步骤,取消的话,可用于调试程序
;到底在哪一步出问题的。
  (prompt " 注意:无论选择哪种字体,都必须保证该字体在系统中存在(AutoCAD或者Windows)!\n")
  (initget "0 1");设定关键字,下面紧跟的一句只能输入引号内的关键字0和1,当然可以设置多个。
;但需要注意的是只能是单个的字符(数字或字母)。
  (setq c10 (getkword "   使用TrueType字体的样式是否替换? (0:否 1:是) <0>: "));取关键字
  (if (null c10) (setq c1 0) (setq c1 (atoi c10)));如果关键字为空(默认值),设c1=0,否则将关键字
;转换为整数并赋值给c1
  (initget "0 1")
  (setq c0 (getkword " 未使用大字体的样式是否使用大字体? (0:否 1:是) <0>: "))
  (if (null c20) (setq c2 0) (setq c2 (atoi c20)));同上,c2赋值
  (setq sa1 (getstring "                        形字体文件名 <simplex1>: "));取shx形字体名。
  (if (= sa1 "") (setq sa "simplex1.shx") (setq sa (strcat sa1 "." "shx")));如果为空,则为默认值,否则赋值并加上后缀。
  (setq sb1 (getstring "                        大字体文件名  <sedin>  : "))
  (if (= sb1 "") (setq sb "sedin.shx") (setq sb (strcat sb1 "." "shx")));同上,赋值。
  (setq sb (strcase (strcat sa "," sb) T));将sa和sb合并,并全部改为小写字符。
  (setq i 1  j 1  n 1);设置循环计数变量和起初始值
  (while (<= i 1000);总的循环计数,言外之意就是枚举字体样式名,但我没找更简捷的办法只好
;设一较大的范围,以囊括可能的数量,也许设为256更合适,但没关系,只要下一句返回值
;等于NIL,就退出了。希望大神能指点这里。
    (setq tba (tblnext "style"));枚举字体样式名,得到该字体样式名的数据表,指针返回下一个样式名。
;表是CAD数据保存的基本形式,字体样式名数据表,一共十项,具体如下,每对括号内为一组,
;从0开始计数。
;命令: (tblnext "style")
;((0 . "STYLE") (2 . "gpshz") (70 . 0) (40 . 0.0) (41 . 0.8) (50 . 0.0) (71 . 0) (42 . 5.0) (3 . "romans.shx") (4 . "hztxt.shx"))
;即0组(0 . "STYLE"),1组(2 . "gpshz"),2组(70 . 0),3组(40 . 0.0),4组(41 . 0.8),5组(50 . 0.0),6组(71 . 0),
;7组(42 . 5.0),8组(3 . "romans.shx"),9组(4 . "hztxt.shx")
    (if (/= tba NIL);返回值不为NIL,进入判断体执行语句,否则设i=1001退出循环
      (progn;多语句执行符号
        (setq tb1 (nth 1 tba)  st1 (cdr tb1);取表的第1项,这也是一个两项的表,将表的第2项
;(字体样式名)赋值给st1
              tb8 (nth 8 tba)  st8 (cdr tb8);取表的第8项得到表,并将表的第2项赋值给st8
              tb9 (nth 9 tba)  st9 (cdr tb9);同st8
        )
        (if (and (/= st8 "sedin1.shx") (/= st9 "sedin.shx"));如果st8和st9都不等于这两种字体,
;进入判断体执行下一步。之所以设置这多余的一步,是因为公司的图签中文字采用这两种字体,
;不想因为替换导致图签变化,如果贵公司采用其他字体可以修改赋值,或者干脆取消该语句删除
;图签,图形整理完成后再插入图签
          (progn
            (if (/= st8 "") (setq sc (strcase (substr st8 (- (strlen st8) 2) 3)));如果st8不为空,则
;取字形文件的扩展名,并赋值给sc
              (progn (command "-style" st1 sb "" "" "" "" "" "" \r) (setq n (+ n 1)));否则执行style命令,
;修改字体形文件名(改为sb),并记录修改个数。
            )
            (cond;进入条件判断,罗列sc的各种情况,执行相应的改写和替换。并记录个数。这是
;所附图中出现的各种情形,当然可以追加。
              ((= sc "SHX")
                 (if (/= st9 "") (progn (command "-style" st1 sb "" "" "" "" "" "" \r) (setq n (+ n 1))))
                 (if (= st9 "")
                    (if (= c2 0) (progn (command "-style" st1 sa "" "" "" "" "" "" \r) (setq n (+ n 1))))
                    (if (= c2 1) (progn (command "-style" st1 sb "" "" "" "" "" "" \r) (setq n (+ n 1))))
                 )
              )
              ((= sc "TTF")
                 (if (= c1 1) (progn (command "-style" st1 sb "" "" "" "" "" "" \r) (setq n (+ n 1))))
              )
              ((and (/= sc "SHX") (/= sc "TTF"))
                 (if (/= st9 "") (progn (command "-style" st1 sb "" "" "" "" "" "" \r) (setq n (+ n 1))))
                 (if (= st9 "")  (progn (command "-style" st1 sa "" "" "" "" "" "" \r) (setq n (+ n 1))))
              )
            )
          )
        )
        (setq i (+ i 1)  j (+ j 1));设置执行次数
      )
      (setq i 1001);当tba=NIL时,设置跳转出循环
    )
  )
  (prompt (strcat " 共计 " (itoa j) " 种字体样式,改变了其中的 " (itoa n) " 种。\n"))
  (command "-purge" "a" "*" "n" \r);清理无用的东西,块、字体;层、线型等
  (command "zoom" "e");图形最大化
  (tblnext "style" T);回调指针到起始位置。
  (princ)
)
各位大神给看看,不吝赐教。

自动替换字体形文件名.rar

94.85 KB, 下载次数: 18, 下载积分: 米粒 -1

不设米粒,靠赏

评分1

查看全部评分1

米粒+20 理由

收起
dives4shen + 20 这是真正的专家了!

查看全部评分

"小礼物走一走,来ASME论坛支持我"
还没有人打赏,支持一下

TA在排名榜Top100

积分:NO. 8 名

发帖:NO. 28 名

在线:NO. 33 名

累计签到:3466 天
连续签到:4 天
 楼主| 发表于 2015-1-18 14:30:30 | 显示全部楼层
本帖最后由 gbt8163 于 2015-1-19 08:44 编辑

占据二楼,等待回复。

下载后解压文件包,比如放在F:\temp目录下。

双击打开chst测试图.dwg;
CAD启动,弹出图1,(形文件查不到,要求选择);

1.bmp

直接无视,点取消(程序会处理);弹出图2;

2.bmp

指定字体(不用管它,按回车确定OK);
图形打开。
命令后面键入:(load"f:\\temp\\chst")
出现“C:CHST”,说明程序载入成功。
命令后面键入:chst,回车,选择后,回车执行。OK。如图3。
3.bmp



"小礼物走一走,来ASME论坛支持我"
还没有人打赏,支持一下
累计签到:78 天
连续签到:1 天
发表于 2015-1-18 17:31:33 | 显示全部楼层

很好的资料值得收藏
"小礼物走一走,来ASME论坛支持我"
还没有人打赏,支持一下
累计签到:944 天
连续签到:1 天
发表于 2015-1-19 03:13:48 | 显示全部楼层
很好的资料值得收藏
"小礼物走一走,来ASME论坛支持我"
还没有人打赏,支持一下

TA在排名榜Top100

积分:NO. 14 名

发帖:NO. 3 名

在线:NO. 13 名

累计签到:3514 天
连续签到:3 天
发表于 2015-1-19 07:45:31 | 显示全部楼层
autolisp 语言,会的人不多啊。
"小礼物走一走,来ASME论坛支持我"
还没有人打赏,支持一下

TA在排名榜Top100

积分:暂未上榜

发帖:NO. 88 名

在线:NO. 131 名

累计签到:2818 天
连续签到:15 天
发表于 2015-1-19 08:25:44 | 显示全部楼层
估计是没人和你探讨了。

点评

有人用,能解决问题就好  发表于 2015-1-19 08:46
"小礼物走一走,来ASME论坛支持我"
还没有人打赏,支持一下

TA在排名榜Top100

积分:NO. 152 名

发帖:NO. 154 名

在线:NO. 131 名

累计签到:3340 天
连续签到:106 天
发表于 2015-1-19 08:41:38 | 显示全部楼层
不错,谢谢楼主分享
"小礼物走一走,来ASME论坛支持我"
还没有人打赏,支持一下
累计签到:1380 天
连续签到:9 天
发表于 2015-10-14 12:20:59 | 显示全部楼层
楼主太牛了         
"小礼物走一走,来ASME论坛支持我"
还没有人打赏,支持一下
累计签到:57 天
连续签到:1 天
发表于 2015-11-18 13:25:07 | 显示全部楼层
我去,不明觉厉啊
"小礼物走一走,来ASME论坛支持我"
还没有人打赏,支持一下
累计签到:2 天
连续签到:1 天
发表于 2015-11-18 19:36:52 | 显示全部楼层
沙发,感谢楼主分享好资料。
请登陆网站
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

服务热线

400-8888888

周一至周日:9:00-21:00

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