形和字體的格式及編碼

1、形的基本概念

  形(SHAPES)是一種特殊實體,可使用線、弧及圓來定義它們。對CAD來說,Shapes在存儲和繪圖方面比另一種實體塊更有效。在必須頻繁的插入一個簡單的零件和速度很重要的情況下,用戶定義的形很有用。它的一個變種是用于確定文本字體。

  在上面已提到形都是由簡單的對象組成。這些對象是單一的直線、圓弧和圓。簡化使用這些對象的原因是在指定方向和距離值時,不能使用小數和建筑單位,而只能使用整數和整型的分數。例如,一條線的距離等于1除以2的平方根(值為.7071068),而分數70/99 (等于.7070707),近似于線的距離值,因此可用此分數值代替。

  形和字體都以同一種方式編寫,并都保存在擴展名為. SHP文件中。SHP文件必須編譯為SHX文件才能被調用。也就是說,SHX是通過CAD將文本格式的SHP文件編譯成二進制的SHX文件。其目的是將SHP內的形(包括字形)定義予以適當的排列及組織為二進制文件格式,以方便及加速CAD的存取。

實際上,形文件分為三種:形、ASCII字型及大字型文件。三者在設計時唯一的差別是文件頭的聲明行(下節解釋),而在使用時的主要區別在于調用它們的命令不同。形使用SHAPE命令通過字形名稱調用,而字體在插入文本時才被調用,如執行TEXT和DIM命令。ASCII字型文件以1Byte的字形碼調用,也就是常說的英文字型文件,大字型文件以2Byte的字形碼調用,也就是常說的中文字型文件。不管是用SHAPE命令調用的形,還是作為一個字符插入時,輸入的形名既可以大寫也可以是小寫。


2、SHP文件的格式

對SHP文件而言,形、ASCII字型及大字型文件三者在文件格式上是相近的,主要區別在于文件頭的聲明行不同。三種SHP形文件的格式如下:


2.1、形文件的形定義格式

  單個的字符以ASCII碼的形式編寫并保存。.SHP文件或.SHX文件可以包含255個字符,每個字符定義有一個標題行,如下所示:

*形編號,字節數,形名稱

  標題行的下一行將用一行或多行代碼定義字符。簡單的形只用一行或兩行就可表達清楚。

  標題行中每一項的含義為:

  形編號可從1到255,但不能重復。形編碼的數值不可為0,此為特殊碼。

  字節數定義一形符號使用的字節數,包括末尾的0表示形定義結束。在定義形字符時使用的字節數最多不能超過2000。字節之間以逗號分隔。還可將一對數值用括號括起來,增強可讀性,但括號無其他含義,也不占用一個字節。

形狀文件是以名稱調用,即用SHAPE命令調用形,形名必須大寫。在使用SHAPE命令時要輸入形名,正如在BLOCK命令中使用塊名一樣。


2.2、ASCII字形文件的形定義格式

  ASCII字型在上述基礎上增加了文件頭聲明,增加的聲明為:

*0,4,字符集名稱

上高,下高,種類,0

  含義為:

0:特殊的字型碼,聲明此為字型文件的文件頭

4:長度值,其值固定,Bytes

字符集名稱:任意的字符串,不要太長。

上高:文字基準線上方可允許的高度。

下高:文字基準線下方可允許的高度。

種類: 0—僅供橫向方向書寫的文字集

1--僅供豎向方向書寫的文字集

2—同時可供橫向和豎向兩個方向書寫的文字集

  對于ASCII字型文件,形名稱可以使用小寫字母,這樣在編譯并保存到內存中時,CAD將忽略這些名稱,可節約SHX文件的空間。在字形文件中,形名稱只用于便利SHP文件的閱讀。

ASCII形文件與上述的形文件一樣,一個文件中只能包含255個字符,每個字符定義有一個標題行,同2.1。


2.3、大字型文件的形定義格式

  有些語言如日語、朝鮮語,具有數千個非ASCII碼文字。為了寫這種文字,CAD提供了一個形定義的專用格式文件,即大字型文件(big-font)。大字型文件除了與ASCII字型文件一樣擁有特殊碼0,在文件的第一行還一定要有如下的聲明:

  *BIGFONT字數,字碼區間數,區間一,區間二,。。。

  其余同ASCII字型文件。

  其中:字數:字型文件內的大約字數,與實際數誤差〈10%.

字符區間數:以字符的High Byte為主,內分為幾個區間。

區間一、區間二:High Byte的上下范圍。

本文主要討論ASCII碼的擴充,對大字型文件在此不多加討論。


3、形文件的編碼

SHP文件是采用一系列的形狀描述字和專用碼來編碼的,程序員使用正文編輯程序或字處理程序來輸入。


3.1、形狀描述字

  形狀描述字包括一個字節的筆運動矢量長度和方向代碼。用二進制代碼指定筆運動的矢量長度和方向代碼可以組成一個形-字符。每一個二進制代碼是一個字節。代碼0到16不是矢量-方向代碼,而是專用的編寫形定義的代碼。



CAD的字體與字庫的介紹與設置(二)


  每個矢量的長度和方向代碼是一個三字符的字符串。在代碼字符串中,第一個字符必須為0,第二個字符指定矢量的長度,它相對于形狀的”高度”而言。矢量長度受到比例因子的影響,矢量長度和比例因子的積是實際的距離值。第三個字符指定矢量的方向。在使用時,有16個可用的標準方向。圖2-1所示為16個標準方向。

  圖中所有矢量都是以同一長度規格來繪制的。對角線矢量被“延長”來匹配最接近正交矢量X或Y的位移量。例如;讓我們建立一個命名為DBOX形狀號為230的形狀。見圖2-2

*230,6,DBOX

014,010,01C,018,012,0

  注意除了可以使用矢量-方向代碼外,還可使用特殊代碼8和9定義一對由X和Y增量組成的位移值。

3.2、專用代碼

  專用代碼可以是十進制也可以是十六進制,指定的代碼可以從0到16或從000到00E。以0打頭的三位二進制數是十六進制的特殊代碼。代碼10是十進制的特殊代碼,而010等于十進制數的16,但最重要的是010被CAD解釋為矢量-方向代碼,表示矢量的長度為1,方向為0度。等于10的十六進制數是00A。各專用代碼的含義如下。

  代碼0:形定義的結束,形定義的結束標記是0。

  代碼1和2:抬筆和落筆落筆(即繪圖)模式在繪制每個形的開始時激活。當繪圖模式打開時,一個矢量說明將繪制一條直線;當繪圖模式關閉時,矢量說明只移到新位置,而不繪制直線。

  代碼3和4:比例因子按照下面指定的整數因子放大或縮小形中的一個(或一組)矢量的尺寸。代碼3告訴CAD用下一矢量除以緊隨代碼3后的比例因子,代碼4告訴CAD用下一矢量乘以緊隨代碼4后的比例因子。比例因子在同一形中是累計的。

  代碼5和6:保存和恢復位置形定義中的每一位置都與上一個位置關聯。一旦筆被移到了一個特殊的位置上,在移動前可在形定義中記錄當前的位置供以后使用。這用于當一個對象在同一個位置上開始或結束多次的情況。例如,組合使用代碼5和6將非常方便地繪制一個帶有輻條的車輪,用代碼5定義車輪的中心,繪制輻條,然后用代碼6返回車輪的中心繼續繪制。

  保存和恢復位置也就是將當前位置壓入堆棧或從堆棧中彈出的過程。堆棧中一次最多可保存四個位置。從堆棧中彈出的順序與壓入堆棧的順序相反,且每個壓入堆棧的位置必須彈出。

  如果由于過多的壓入操作、彈出而造成堆棧溢出,則在繪制形時將顯示錯誤信息

  代碼7:子形 在SHP/SHX文件中定義的一個形,該形可包含在同一個形文件中的另一個形定義中,代碼7后面緊跟插入的形的編號。

  代碼8和9:X - Y位移普通矢量只能繪制在16個預定義的方向上,并且最大長度為15。通過代碼8和9可用X - Y位移繪制非標準矢量。代碼8后必須跟兩個定義字節,分別為X位移與Y位移。倒如,8,(7,-8)表示將筆沿X軸正向移動7個單位,沿Y軸負向移動8個單位。這里的括號是可選的,只是為了增強可讀性。用代碼9可繪制一系列非標準矢量。此代碼后面可跟任意數量的X-Y位移對,由(0,0)對終止。例如,9, (7,-8), (14,9), (-17,3), (0,0)表示按當前的模式使用三對位移值,用(0,0)對返回普通矢量模式。

  代碼00A:八分圓弧代碼00A(或10)告訴CAD用下兩個字節定義一個圓弧,此圓弧稱為八分圓弧,因為它跨越一個或多個45°的八分圓。八分圓弧的起點和端點都在八分圓邊界上。圖2-3所示為各八分圓的代碼編號。繪制八分圓弧的格式如下所示:


CAD的字體與字庫的介紹與設置(二)3533.png


10,半徑,(-)0SC

  半徑可以是1到255之間的任意值。第3個字節以0打頭,指定圓弧的方向(順時針方向為負,逆時針方向為正)、起始八分圓( S )和跨越的八分圓數( C )的值為0到7。其中,0等于八個八分圓或整個圓。圖18-48所示的弧用以下代碼繪制:

10,(2,-043)

  繪制的圓弧半徑為2,從八分圓4處開始,順時針旋轉135°(跨越了三個八分圓)。

代碼00B:不規則圓弧 代碼00B(11)繪制不規則的圓弧,其起點和端點不一定在八分圓邊界上。其定義格式為:

11,start_offset,end_offset,high_radius,low_radius,(-)0SC

start_offset和end_offset表示從圓弧起點和端點到所在的八分圓邊界的距離。high_radius如果為非0值,表示半徑大于255。low_radius和最后定義的字節與八分圓弧的定義(代碼00A,如前所述)一樣,負數依然表示順時針方向。

  代碼00C和00D:指定凸度的圓弧 代碼00C和00D(12和13 )提供了另一種不同于八分圓的繪制圓弧的方式。在代碼00C和00D中通過將凸度因子應用到位移矢量來繪制圓弧。代碼00C和00D是由X位移和Y位移確定圓弧的端點,由凸度確定圓弧的曲率。凸度由連接圓弧兩個端點的直線確定。凸度的取值范圍為-127到+127。最大和最小值(127或-127)定義了180°的圓弧(半個圓)。小值對應小度數的圓弧。意思是,假設指定的凸度值為x,用x乘以180再除以127,即得到對應的角度值。凸度值為0表示定義一條直線。

  代碼00C繪制一段圓弧,而代碼00D繪制多段圓弧(polyarcs)。它們與代碼8和9相似。代碼00D與009一樣,必須用(0,0)對終止。代碼00D后面可跟0或多個圓弧段定義,其中0凸度值用于繪制直線。

代碼00E正文垂直標記命令。專用碼00E(14)僅用于雙向文字字體描述中,即文字可以在水平和垂直兩個方向上表示。當該碼用到字符定義中,如果文字垂直寫,則對下一個碼進行處理。如果文字是水平寫的,則下一個碼就跳過不予處理。

  在水平文字中,每個字符的起始點在其基線左端,而在垂直文字中,起始點在字符頂部中心。在每個字符結束時,“抬筆”段一般要回到下一個字符的起始點。對于水平文字要向右,對垂直文字要向下。專用碼00E主要用來調整起點和終點的差別,使同一字形可用在水平和垂直兩個方向上。

3、SHX文件的存儲格式

  了解SHX文件的格式,有助于事半功倍地解決實際問題。

  ASCII字體文件和大字體文件的SHX格式分別見表2-1和表2-2

表2-1 ASCII字體文件存儲格式

序號起始及終止字節數據內容

11∽20Shape文件版本標識字符串,“CAD-86 shapes 1.0”

221∽23CR+LF+EOF (16進制的0D 0A 1A)

324∽25最小的字型碼(0)

426∽27最大的字型碼

528∽29字型碼總數N,包括字符集的聲明(Code 0)

630∽(33+4m)M為0到(N-1),每四個Bytes一字,前2Butes為字型碼,后2Bytes為字型定義的長度,均為整數。

7(33+4n-1)∽依長度擺放各字型定義

表2-2大字體文件存儲格式

序號起始及終止字節數據內容

10∽21Shape文件版本標識字符串,“CAD-86 bigfont 1.0”

222∽24CR+LF+EOF (16進制的0D 0A 1A)

325∽26(08 00)

427∽28字型碼總數N,包括字符集的聲明(Code 0)

52∽30字型碼區間數K

631∽(31+4m)M為0到(k-1),每四個Bytes一組存放區間的起始與結尾字碼,各2Bytes。

731+4k∽(31+4k+8L-1)L為0到(N-1),每8位一筆存放字型的字碼2Bytes、長度2Bytes與字型定義的地址(4Bytes)等數據。

8最后依長度擺放各字型定義









推薦閱讀:CAD機械制圖應用基礎之平面圖形繪圖基礎(一)

推薦閱讀:CAD培訓


最新資訊 經驗技巧 CAD常見問題
立即獲取報價
請填寫姓名
姓名至少輸入2個字符
姓名僅支持漢字、字母
驗證
獲取驗證碼
請填寫手機號
請填寫正確的手機號
驗證碼
驗證碼應為6位數字
驗證碼錯誤
請填寫公司名稱
公司名稱僅支持漢字、字母
請先閱讀并同意《隱私政策》
關注公眾號
免費領取30天激活碼
聯系客服