當前位置:縱橫輸入法首頁>>教學經驗交流>>第一屆縱橫碼教學經驗交流會論文集

開發AUTOCAD的縱橫漢字環境
常州技術師範學院計算機科學系
鄭成增 陳志鋒 尹長青

  【摘要】本文討論了在AUTOCAD環境下開發漢字系統,將縱橫輸入法應用於CAD工程,並能適用任何中西方版本的AUTOCAD。採用ADS(即AUTOCAD的系統開發接口規範),使用WATCOM C語言32編程技術來實現與AUTOCAD的接口。通過鍵盤,採用縱橫輸入法在AUTOCAD中進行漢字的輸入,漢字的顯示,以及實現漢字在AUTOCAD中的標注。

  【關鍵詞】縱橫漢字 CAD 接口技術 文本字體

一、前言

  目前,市場上流行茼U種各樣的CAD系統,但是在眾多的產品中,AUTOCAD使用最為普遍。為了促進縱橫漢字在CAD領域中的應用,同時也滿足CAD用戶希望有一種能適用於任何AUTOCAD環境的漢字系統,筆者進行了AUTOCAD的縱橫漢字環境(以下簡稱縱橫環境)的開發。

二、開發縱橫環境的基本構思

  開發縱橫環境,實現漢化AUTOCAD,從而用戶可以輕鬆地在AUTOCAD下應用縱橫漢字輸入法進行漢字的標注、說明(在機械製圖時,對標注、說明,大都要求實用仿宋字體),即實現了AUTOCAD應用的本地化。

1. 本環境主要完成下述基本功能:

(1)在AUTOCAD圖形屏幕某個區域(即漢字輸入提示區)用中文提示供用戶進行漢字輸入的選擇;
(2)截獲鍵盤輸入,採用縱橫碼、區位、西文等輸入法實現漢字的輸入;
(3)調用矢量漢字庫(HZTXT.SHX)中的漢字標注到AUTOCAD圖形中;

2. 開發縱橫環境的程序模塊:

(1)矢量漢字庫(HZTXT.SHX)的製作;
(2)漢字在AUTOCAD中的顯示;
(3)縱橫漢字輸入法模塊;
(4)區位漢字輸入法模塊;
(5)漢字在AUTOCAD中的標注模塊;
(6)其它輔助功能模塊

  如圖1所示即為本系統功能模塊。

(圖1)

三、各功能模塊的實現

1、矢量漢字庫(HZTXT.SHX)的製作

  在AUTOCAD中,形(SHAPE)是特殊的實體,可以用線、弧、圓來定義。形狀常見的是用於定義文本字體。形狀是用專用格式文本存貯在磁盤中的文件(擴展名為.SHP),將其編譯後即可被AUTOCAD所使用。

  在AUTOCAD中,每個形狀必須具有1到255之間的唯一的號碼。文本字體(如字母、數字等ASCII字符)要求與ASCII碼中的每個字符的值都對應;其它形狀可以分配給任意的號碼。

  每個形狀定義具有以下格式的標題行:

shapenumber, defbytes, shapename

  後面跟有用逗號分隔和以0(零)表示該形態技術的一行或多行形狀說明字節。在形狀文件中的所有數碼,帶有前導0意味著是十六進制數,否則為十進制數。

  shapenumber 為形狀代碼,一般為1到255之間的唯一號碼;

  difbytes 用於說明所需數據字節的數量,包括結束碼0。每個形狀不超過10,000個字節。

  shapename 用於定義形狀名,如果形狀名中含有小寫字母,則形狀名字將不存貯。

  形狀說明字節包括兩部分:矢量長量,方向代碼。高4位是矢量長度,低四位是方向代碼。方向與方向代碼如圖2所示:

(圖2)

  除上述基本的形狀說明字節外,還定義幾個專用碼(十進制)。

0 形狀定義結束
1 進入繪圖方式
2 退出繪圖方式
3 用下一個字節除矢量長度
4 用下一個字節乘矢量長度
5 將當前位置壓入堆棧
6 從堆棧中彈出當前位置
7 繪製由下一個字節給出的子形狀號
8 由下兩個字節給出的X-Y相對偏移量
9 由(0,0)結束多個X-Y相對偏移量
10 由下兩個字節定義的八分圓弧
11 由下五個字節定義的小段
12 根據X-Y位移量和凸度定義的弧
13 多個指定凸度的弧
14 只明是垂直文本字體時才處理下一條命令

  文本字體是在上述形狀文件的基礎上,採用形狀來定義的,形狀編號對應於每個字符的ASCII。

  文本字體文件必須包含一個特殊的形狀編號,存貯有關字體自身的信息。格式如下:

*0,4,字體名
Above, below, modes, 0

  above規定大寫字母超過基線向量長度的大小,below規定小寫字母在基線下向量的大小,定義了基本字符尺寸和高度的比例因子。

  modes通常為0;當為雙向(水平或垂直)字體,modes為2。只有modes為2時,專用碼14才起作用。

  為了使AUTOCAD的通用性更好,AUTOCAD提供了一種稱為大字體文體文件的形狀定義文件來滿足漢字等多種文字的使用。

  一個大字體形狀的第一行必須為:

  *BIGFONT nchars, nranges, b1, e1, b2, e2 ...

  nchars 是在這個集合中所定義的字符數的近似值,如果實際值超過其10%則出錯。

  nranges 表示需要使用連續的幾個數碼用作特殊字符(如漢字需用兩個字節表示,則nranges為2)。

  (b1,e1),(b2,e2),……, 等定義這樣範圍的起始碼和中止碼。

  常見矢量漢字庫文件是一個二進制文件,UCDOS 3.1的矢量漢字庫由索引表頭和字形數據兩部分組成,字形數據部分的基本單元有4個字節,頭兩個字節為某一線段的起始偏移位置,後兩個字節為該線段的終止偏移位置。根據UCDOS的矢量字庫生成形狀文件,將該形狀文件編譯即可得到所需的矢量字庫hztxt.shx。

2. 漢字直接寫屏技術在AUTOCAD中的實現

  漢字顯示的基本方法是將要顯示的漢字的字模數據從漢字庫中讀出,然後把整個漢字一個點一個點地畫出來。

  為了提高漢字顯示的速度,可以採用直接寫VRAM的方法。VGA卡在640X480的16色顯示模式下,VRAM被分成4個獨立的位平面,各位平面有相同的地址空間,其首地址為A000:0000H,可通過圖形控制器等特殊硬件來實現對每個位平面的獨立擔保。其步驟為:

(1) 設制好VRAM的首地址為001C:0000保護模式;
(2) 根據點的坐標計算該點的VRAM中的偏移地址,為簡單化,該點的橫坐標為8倍數,計算公式為:
Y*80+X/8
(3) 通過圖形控制器索引0號功能,設置顏色;
(4) 通過圖形控制器索引1號功能,設置屏蔽寫允許;
(5) 通過圖形控制器索引3號功能,設置畫點方式(重寫、與、或、異或);一般為異或方式(XOR);
(6) 通過圖形控制器索引8號功能,設置位屏蔽寄存器為一次畫八個點;
輸出數據,實現顯示;
(7) 顯示完成後,將上述圖形控制器寄存器恢復到初值。

3. 漢字輸入模塊的設計

  漢字輸入模塊用於將用戶從鍵盤上輸入的信息轉化成漢字內碼。它由兩部分組成:編碼方案(即漢字輸入法)和主控程序。

  主控程序主要完成以下幾個功能:

(1) 接管鍵盤,根據用戶輸入的不同進行相應的處理;
(2) 在輸入過程中,允許進行輸入法的轉換;
(3) 輸入過程中若有錯誤,則可進行修改;
(4) 當輸入無效時,應鳴叫示意。

  (1) 縱橫輸入法的實現

  本模塊的功能將鍵盤的數字轉換成相應的漢字內碼,為簡單起見,將給縱橫碼表按數字大小排序。具體過程如下:

1. 首先建立一個縱橫碼索引表,該表包含了每一組縱橫碼所對應的所有漢字;
2. 根據用戶輸入的數字在提示行中顯示出來;
3. 將所有符合條件的漢字在提示行中顯示出來;
4. 讓用戶從重碼字選擇所需的字;
5. 取得該字的內碼。

  (2) 區位輸入法程序

  本模塊的功能是把用戶輸入的區位碼轉換成對應的漢字內碼。漢字的內碼一般有兩個字節組成,每個字節的最高位為1,由區位碼到漢字內碼的轉換比較簡單,公式如下:

漢字內碼高字節=區碼+160
漢字內碼低字節=區碼+160

  假設區碼用變量QU,位碼用變量WEI表示,字符串變量HZNM存貯轉換後的漢字內碼,則可以採用下述語句實現:

sprintf(HZNM,"%c%c",Q+160,WEI+160);

4. 漢字標注模塊的設計

  漢字標注是漢化AUTOCAD的目的所在,本模塊只需設置好漢字字形,然後調用AUTOCAD的標準TEXT命令將用戶從鍵盤輸入的漢字字符串在圖形中標注出來。

  在標注漢字之前,首先要讓AUTOCAD準備好漢字的形狀文件(HZTXT.SHX)和西文的形狀文件(TXT.SHX),即定義字符STYLE。若字型名為HZCAD,則定義過程如下:

Command: STYLE
Style name <STANDARD>: HZCAD
Text file <TXT>: TXT, HZTXT
... ... (以下各項採用缺省值即可)

  在定義好字型後,即可調用TEXT命令來實現漢字在圖形中的標注。首先要求用戶輸入標注方式等內容,然後將這些參數和從鍵盤上輸入的漢字串一起傳送到TEXT命令,TEXT命令會自動處理漢字及西文,從相應的SHX文件中取出對應的字形數據,並標注圖形中。

5. 輔助模塊的設計

  (1)實時幫助系統  

  當用戶鍵入F1,即調用漢字顯示模塊顯示幫助信息,使用戶能正確使用本軟件,退出時採用AUTOCAD的READRAW命令即可恢復原圖。  

  (2)命令行的漢字提示

  採用漢字顯示模塊,設計一個ADS專用函數HZ_PRO( ),在提示行顯示出漢字字符串,提示用戶的輸入。

四、結束語

  本縱橫環境實現了在586/122微機上,配合AUTOCAD 12.0英文版,採用縱橫輸入法進行漢字的輸入、標注,效果很好。

 

【主要參考文獻】

  〔1〕錢培德等,微機漢字操作系統實用開發技術,北京師範大學出版社,1992

  〔2〕縱橫漢字信息技術研究所,縱橫漢字系統,清華大學出版社,1994

  〔3〕鄭成增等,金工實習技能操作培訓計算機CAI-CAD系統,計算機科學技術應用, 1995.6

  〔4〕王福軍,AutoCAD R12/R13應用C程序設計,電子工業出版社,1995