中冶華天南京工程技術有限公司 許 友
?
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—),男, 安徽樅陽人,碩士,工程師,研究方向:電氣工程。