AutoCAD制图字体标准化研究
2016-03-13中冶华天南京工程技术有限公司
中冶华天南京工程技术有限公司 许 友
AutoCAD制图字体标准化研究
中冶华天南京工程技术有限公司许友
本文综合多种软件编程方法,研究了AutoCAD制图字体标准化,有效的解决了因SHX字体文件选用不当而引起的字体显示不当与显示错误等问题,提高了用户的制图工作效率。
OjectARX;AutoLISP;制图;字体;标准化
在AutoCAD系列软件中,字体显示支持文件分为SHX常规字体与大字体两类。字体定义了构成每个字符集的文字字符的形状。亚洲字母表包含数千个非 ASCII 字符,为支持这种文字,AutoCAD系列软件提供了一种称作大字体文件的特殊类型的形定义。用户可以将字体样式设置为同时使用常规文件和大字体文件。
在工程制图中,字体是一项不可或缺的重要元素,如何正确有效的显示字体是一个值得研究的问题。AutoCAD支持的SHX格式字体文件多达上千种,在方便了用户选用的同时也给字体显示带来不少的问题,经常因缺少相应字体文件导致字体显示不正常甚至显示错误,给制图工作带来了极大的麻烦,严重情况下可能会造成工程质量问题,给企业带来财产损失。
下面以我司的工程实践为例来介绍实现字体标准化的方法与流程。
一、标准化字体库的设置
字体标准化首先根据企业的工程需要来选择必要的字体库文件。
AutoCAD软件在安装后会默认在Fonts文件夹内提供了一些SHX格式的字体文件,满足基本的制图需要。根据企业的行业特点与特殊要求,企业往往会自定义一些更符合工程实际的标准化字体库,供企业内部统一使用。比如,我司选择了complex.shx、gas.shx、gbcbig.shx、syfs. shx、sysz.shx、tssddeng.shx、tssdchn.shx等几种字体,来满足工程制图的中英文及标高、钢筋符号等特殊符号显示需要。
二、字体库的检测与维护
为防止自定义字体库受到其他软件或人为的影响,将自定义字体库单独作为一个Fonts文件夹,通过程序安装到指定的目录下。同时,将此目录列为AutoCAD的支持文件搜索路径,并删除AutoCAD原有Fonts搜索路径,保证字体库唯一。
在每次打 开新的图形文件时,首先检测Fonts文件夹下的文件名称与数量,在检测无误的情况下再按字节读取每个文件的长度,如果每个文件字节数都与预定相符,则可以判定字体库文件夹未遭到病毒或人为破坏,是经过标准化的。如果检测中发现了异常,则通过对话框给出警告信息,同时也可以限制AutoCAD的部分使用功能,提醒用户对字体库进行修复,维护字体库的正确性。部分AutoLISP代码如下:
(defun checkfont (dir)
(setq fonts (vl-directory-files (strcat dir “\fonts”) “*.shx”))
(if (> (vl-list-length fonts) 15)
(foreach n
(vl-remove“Tssdeng.shx”
(vl-remove“Tssdchn.shx”
(vl-remove“SYSZ.SHX”
(vl-remove“syfs.shx”
(vl-remove“Gbcbig.shx”
(vl-remove“GAS.SHX”
(vl-remove“complex.shx”fonts)
)
)
)
)
)
)
)
(vl-file-delete(strcatdir “\fonts\” n) )
)
)
(if (equal fonts‘(“complex.shx”“GAS.SHX” “Gbcbig.shx”“syfs.shx”“SYSZ.SHX”“Tssdchn.shx”“Tssdeng.shx” ) );名称对(progn
(if (/= (vl-file-size (strcat dir "\fonts\complex.shx"))30486)
(progn (warnning) ;输出警告信息,下同
)
)
(if (/= (vl-file-size (strcat dir "\fonts\Gbcbig.shx"))896095)
(progn (warnning)
)
)
(if (/= (vl-file-size (strcat dir "\fonts\syfs.shx")) 1216485)
(progn (warnning)
)
)
(if (/= (vl-file-size (strcat dir "\fonts\SYSZ.SHX")) 6978)
(progn (warnning)
)
)
(if (/= (vl-file-size (strcat dir "\fonts\Tssdchn.shx"))1200762)
(progn (warnning)
)
)
(if (/= (vl-file-size (strcat dir "\fonts\Tssdeng.shx"))20950)
(progn (warnning)
)
)
);名称不对
(progn (warnning)
)
)
三、字体自动替换
在新建图形文件进行制图时,可以通过上述设置保证字体的标准性,如果打开已存在的图形文件,则可能会在存在不属于标准化字体库的字体。这时我们采用了在响应AcRx::kLoadDwgMsg消息的initDwg()程序段和AcRx::kSaveMsg消息的saveDwg()程序段中进行默认替换。部分OjectARX代码如下:
AcRx::AppRetCodeArxDbgApp::entryPoint(AcRx::AppMsgCode msg, void* pkt){
if (msg == AcRx::kLoadDwgMsg) {
return initDwg();//进行字体的默认替换
}
else if (msg == AcRx::kSaveMsg) {
return saveDwg();//进行字体的默认替换
}
else {
return AcRx::kRetOK;
}
}
通过程序自动进行字体替换,则只要图形文件进行了保存工作,则下一次打开后所使用字体必然是标准化字体。
综上所述,将上述步骤生成程序文件并进行软件打包发布,在企业内进行安装,即可实现在企业内部所有使用图形文件的字体均为企业选择的标准化字体。字体标准化软件在我司运行多年,效果良好,有效的解决了因字体不统一引起的各种问题,提高了公司制图效率。
[1]侯俊杰.深入浅出MFC(第2版)[M].武汉:华中科技大学出版社,2005.
[2]赵占强.AutoCAD2000 ARX二次开发实例精粹[M].国防工业出版社.
许友(1982—),男, 安徽枞阳人,硕士,工程师,研究方向:电气工程。