中冶華天南京工程技術有限公司 許 友
?
AutoCAD制圖字體標準化研究
中冶華天南京工程技術有限公司許友
本文綜合多種軟件編程方法,研究了AutoCAD制圖字體標準化,有效的解決了因SHX字體文件選用不當而引起的字體顯示不當與顯示錯誤等問題,提高了用戶的制圖工作效率。
OjectARX;AutoLISP;制圖;字體;標準化
在AutoCAD系列軟件中,字體顯示支持文件分為SHX常規(guī)字體與大字體兩類。字體定義了構成每個字符集的文字字符的形狀。亞洲字母表包含數(shù)千個非 ASCII 字符,為支持這種文字,AutoCAD系列軟件提供了一種稱作大字體文件的特殊類型的形定義。用戶可以將字體樣式設置為同時使用常規(guī)文件和大字體文件。
在工程制圖中,字體是一項不可或缺的重要元素,如何正確有效的顯示字體是一個值得研究的問題。AutoCAD支持的SHX格式字體文件多達上千種,在方便了用戶選用的同時也給字體顯示帶來不少的問題,經(jīng)常因缺少相應字體文件導致字體顯示不正常甚至顯示錯誤,給制圖工作帶來了極大的麻煩,嚴重情況下可能會造成工程質(zhì)量問題,給企業(yè)帶來財產(chǎn)損失。
下面以我司的工程實踐為例來介紹實現(xiàn)字體標準化的方法與流程。
字體標準化首先根據(jù)企業(yè)的工程需要來選擇必要的字體庫文件。
AutoCAD軟件在安裝后會默認在Fonts文件夾內(nèi)提供了一些SHX格式的字體文件,滿足基本的制圖需要。根據(jù)企業(yè)的行業(yè)特點與特殊要求,企業(yè)往往會自定義一些更符合工程實際的標準化字體庫,供企業(yè)內(nèi)部統(tǒng)一使用。比如,我司選擇了complex.shx、gas.shx、gbcbig.shx、syfs. shx、sysz.shx、tssddeng.shx、tssdchn.shx等幾種字體,來滿足工程制圖的中英文及標高、鋼筋符號等特殊符號顯示需要。
為防止自定義字體庫受到其他軟件或人為的影響,將自定義字體庫單獨作為一個Fonts文件夾,通過程序安裝到指定的目錄下。同時,將此目錄列為AutoCAD的支持文件搜索路徑,并刪除AutoCAD原有Fonts搜索路徑,保證字體庫唯一。
在每次打 開新的圖形文件時,首先檢測Fonts文件夾下的文件名稱與數(shù)量,在檢測無誤的情況下再按字節(jié)讀取每個文件的長度,如果每個文件字節(jié)數(shù)都與預定相符,則可以判定字體庫文件夾未遭到病毒或人為破壞,是經(jīng)過標準化的。如果檢測中發(fā)現(xiàn)了異常,則通過對話框給出警告信息,同時也可以限制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;
}
}
通過程序自動進行字體替換,則只要圖形文件進行了保存工作,則下一次打開后所使用字體必然是標準化字體。
綜上所述,將上述步驟生成程序文件并進行軟件打包發(fā)布,在企業(yè)內(nèi)進行安裝,即可實現(xiàn)在企業(yè)內(nèi)部所有使用圖形文件的字體均為企業(yè)選擇的標準化字體。字體標準化軟件在我司運行多年,效果良好,有效的解決了因字體不統(tǒng)一引起的各種問題,提高了公司制圖效率。
[1]侯俊杰.深入淺出MFC(第2版)[M].武漢:華中科技大學出版社,2005.
[2]趙占強.AutoCAD2000 ARX二次開發(fā)實例精粹[M].國防工業(yè)出版社.
許友(1982—),男, 安徽樅陽人,碩士,工程師,研究方向:電氣工程。