马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
关于字体修改的问题
以下的程序目的是把图形中所有的字体都修改成名字不同的同一种字体样式
使用(tblobjname "style" stylename) 获取字体表 然后entmod
对于使用WINDOWS系统字体的字体样式就出问题了:
修改后
使用
(tblobjname "style" stylename)
(tblnext "style" t)
查看都改过了
但是图形中的字体没有变化
我保存后重新打开
用ST命令发现字体还是没有改过来
具体测试如下
修改前:
Command:(tblnext "style" ) =>
((0 . "STYLE") (2 . "SSSS") (70 . 0) (40 . 0.0) (41 . 0.5) (50 . 0.0) (71 . 0)
(42 . 2.29114) (3 . "simhei.ttf") (4 . ""))
;;;;;;;;;;;;;;;;;;;;;
Command:(entget(tblobjname "style" "ssss"))=>
((-1 . <Entity name: 3370588>) (0 . "STYLE") (5 . "A9") (100 .
"AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "SSSS") (70 .
0) (40 . 0.0) (41 . 0.5) (50 . 0.0) (71 . 0) (42 . 2.29114) (3 . "simhei.ttf")
(4 . ""))
修改后:
Command: (tblnext "style" )
((0 . "STYLE") (2 . "SSSS") (70 . 0) (40 . 0.0) (41 . 0.5) (50 . 0.0) (71 . 0)
(42 . 2.29114) (3 . "romans.shx") (4 . "HZDX.shx"))
Command: (entget(tblobjname "style" "ssss"))
((-1 . <Entity name: 3370588>) (0 . "STYLE") (5 . "A9") (100 .
"AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "SSSS") (70 .
0) (40 . 0.0) (41 . 0.5) (50 . 0.0) (71 . 0) (42 . 2.29114) (3 . "romans.shx")
(4 . "HZDX.shx"))
保存后重新打开:
Command:(tblnext "style" ) =>
((0 . "STYLE") (2 . "SSSS") (70 . 0) (40 . 0.0) (41 . 0.5) (50 . 0.0) (71 . 0)
(42 . 2.29114) (3 . "simhei.ttf") (4 . "HZDX.shx"))
;;;;;;;;;;;;;;;;;;;;;
Command:(entget(tblobjname "style" "ssss"))=>
((-1 . <Entity name: 3370588>) (0 . "STYLE") (5 . "A9") (100 .
"AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "SSSS") (70 .
0) (40 . 0.0) (41 . 0.5) (50 . 0.0) (71 . 0) (42 . 2.29114) (3 . "simhei.ttf")
(4 . "HZDX.shx"))
显然是有些东西好像被保护了?
为什么会这样呢?
ACAD的帮助里有如下说明:(但是好像没说明什么问题)
///////////////////////////////
entmod 函数对它所能完成的修改作了某些限制。首先,它不能改变一个图元的类型和句柄。如果一定要这样做,只能先调用 entdel 函数删除它,然后调用 command 或 entmake函数创建一个新图元。在执行 entmod 函数之前,图元数据表引用的所有对象对 AutoCAD 来说都必须是已知的。因此,字体、线型、形和块名必须先在图形中定义才能在 entmod 函数中的图元数据表中使用。但图层名例外:如果在图元数据表中用了未定义的新图层名,entmod
函数将用 LAYER 命令的 New 选项采用标准的缺省值来创建该图层。
/////////////////////////////////

- (defun c:dd_fontsame ( / tbs substyle STYELST substlst)
- (setq substyle (getstring "要统一为何种字体样式<hzdx>?:"))
- (IF (= substyle "") (setq substyle "hzdx"))
- (setq tbs (tblnext "style" t))
- ;;;(PRINC (tblobjname "style" "HZDX"))
- (if (setq substyle (tblobjname "style" substyle))
- (setq substlst (entget substyle))
- (alert "你选择的字体样式不存在!")
- )
- ;; (princ substyle)
- (while tbs
- (progn
- ;;;;
- (setq styelst (entget (tblobjname "style" (cdr (assoc 2 tbs)) )))
- ;;(print "-----------------------")
- ;;(print substyle)
- ;; (print styelst)
-
- (setq substlst (subst (assoc -1 styelst) (assoc -1 substlst) substlst))
- (setq substlst (subst (assoc 5 styelst) (assoc 5 substlst) substlst))
- (setq substlst (subst (assoc 41 styelst) (assoc 41 substlst) substlst))
- (setq substlst (subst (assoc 2 styelst) (assoc 2 substlst) substlst))
- ;;;;;;
- ;;(print "-----------------------")
- ;;(print substLST)
- (entmod substlst)
- )
- (setq tbs (tblnext "style" ))
- )
- (princ)
- )
|