形和字體的格式及編碼
1、形的基本概念
形(SHAPES)是一種特殊實(shí)體,可使用線、弧及圓來定義它們。對(duì)CAD來說,Shapes在存儲(chǔ)和繪圖方面比另一種實(shí)體塊更有效。在必須頻繁的插入一個(gè)簡(jiǎn)單的零件和速度很重要的情況下,用戶定義的形很有用。它的一個(gè)變種是用于確定文本字體。
在上面已提到形都是由簡(jiǎn)單的對(duì)象組成。這些對(duì)象是單一的直線、圓弧和圓。簡(jiǎn)化使用這些對(duì)象的原因是在指定方向和距離值時(shí),不能使用小數(shù)和建筑單位,而只能使用整數(shù)和整型的分?jǐn)?shù)。例如,一條線的距離等于1除以2的平方根(值為.7071068),而分?jǐn)?shù)70/99 (等于.7070707),近似于線的距離值,因此可用此分?jǐn)?shù)值代替。
形和字體都以同一種方式編寫,并都保存在擴(kuò)展名為. SHP文件中。SHP文件必須編譯為SHX文件才能被調(diào)用。也就是說,SHX是通過CAD將文本格式的SHP文件編譯成二進(jìn)制的SHX文件。其目的是將SHP內(nèi)的形(包括字形)定義予以適當(dāng)?shù)呐帕屑敖M織為二進(jìn)制文件格式,以方便及加速CAD的存取。
實(shí)際上,形文件分為三種:形、ASCII字型及大字型文件。三者在設(shè)計(jì)時(shí)唯一的差別是文件頭的聲明行(下節(jié)解釋),而在使用時(shí)的主要區(qū)別在于調(diào)用它們的命令不同。形使用SHAPE命令通過字形名稱調(diào)用,而字體在插入文本時(shí)才被調(diào)用,如執(zhí)行TEXT和DIM命令。ASCII字型文件以1Byte的字形碼調(diào)用,也就是常說的英文字型文件,大字型文件以2Byte的字形碼調(diào)用,也就是常說的中文字型文件。不管是用SHAPE命令調(diào)用的形,還是作為一個(gè)字符插入時(shí),輸入的形名既可以大寫也可以是小寫。
2、SHP文件的格式
對(duì)SHP文件而言,形、ASCII字型及大字型文件三者在文件格式上是相近的,主要區(qū)別在于文件頭的聲明行不同。三種SHP形文件的格式如下:
2.1、形文件的形定義格式
單個(gè)的字符以ASCII碼的形式編寫并保存。.SHP文件或.SHX文件可以包含255個(gè)字符,每個(gè)字符定義有一個(gè)標(biāo)題行,如下所示:
*形編號(hào),字節(jié)數(shù),形名稱
標(biāo)題行的下一行將用一行或多行代碼定義字符。簡(jiǎn)單的形只用一行或兩行就可表達(dá)清楚。
標(biāo)題行中每一項(xiàng)的含義為:
形編號(hào)可從1到255,但不能重復(fù)。形編碼的數(shù)值不可為0,此為特殊碼。
字節(jié)數(shù)定義一形符號(hào)使用的字節(jié)數(shù),包括末尾的0表示形定義結(jié)束。在定義形字符時(shí)使用的字節(jié)數(shù)最多不能超過2000。字節(jié)之間以逗號(hào)分隔。還可將一對(duì)數(shù)值用括號(hào)括起來,增強(qiáng)可讀性,但括號(hào)無其他含義,也不占用一個(gè)字節(jié)。
形狀文件是以名稱調(diào)用,即用SHAPE命令調(diào)用形,形名必須大寫。在使用SHAPE命令時(shí)要輸入形名,正如在BLOCK命令中使用塊名一樣。
2.2、ASCII字形文件的形定義格式
ASCII字型在上述基礎(chǔ)上增加了文件頭聲明,增加的聲明為:
*0,4,字符集名稱
上高,下高,種類,0
含義為:
0:特殊的字型碼,聲明此為字型文件的文件頭
4:長度值,其值固定,Bytes
字符集名稱:任意的字符串,不要太長。
上高:文字基準(zhǔn)線上方可允許的高度。
下高:文字基準(zhǔn)線下方可允許的高度。
種類: 0—僅供橫向方向書寫的文字集
1--僅供豎向方向書寫的文字集
2—同時(shí)可供橫向和豎向兩個(gè)方向書寫的文字集
對(duì)于ASCII字型文件,形名稱可以使用小寫字母,這樣在編譯并保存到內(nèi)存中時(shí),CAD將忽略這些名稱,可節(jié)約SHX文件的空間。在字形文件中,形名稱只用于便利SHP文件的閱讀。
ASCII形文件與上述的形文件一樣,一個(gè)文件中只能包含255個(gè)字符,每個(gè)字符定義有一個(gè)標(biāo)題行,同2.1。
2.3、大字型文件的形定義格式
有些語言如日語、朝鮮語,具有數(shù)千個(gè)非ASCII碼文字。為了寫這種文字,CAD提供了一個(gè)形定義的專用格式文件,即大字型文件(big-font)。大字型文件除了與ASCII字型文件一樣擁有特殊碼0,在文件的第一行還一定要有如下的聲明:
*BIGFONT字?jǐn)?shù),字碼區(qū)間數(shù),區(qū)間一,區(qū)間二,。。。
其余同ASCII字型文件。
其中:字?jǐn)?shù):字型文件內(nèi)的大約字?jǐn)?shù),與實(shí)際數(shù)誤差〈10%.
字符區(qū)間數(shù):以字符的High Byte為主,內(nèi)分為幾個(gè)區(qū)間。
區(qū)間一、區(qū)間二:High Byte的上下范圍。
本文主要討論ASCII碼的擴(kuò)充,對(duì)大字型文件在此不多加討論。
3、形文件的編碼
SHP文件是采用一系列的形狀描述字和專用碼來編碼的,程序員使用正文編輯程序或字處理程序來輸入。
3.1、形狀描述字
形狀描述字包括一個(gè)字節(jié)的筆運(yùn)動(dòng)矢量長度和方向代碼。用二進(jìn)制代碼指定筆運(yùn)動(dòng)的矢量長度和方向代碼可以組成一個(gè)形-字符。每一個(gè)二進(jìn)制代碼是一個(gè)字節(jié)。代碼0到16不是矢量-方向代碼,而是專用的編寫形定義的代碼。
每個(gè)矢量的長度和方向代碼是一個(gè)三字符的字符串。在代碼字符串中,第一個(gè)字符必須為0,第二個(gè)字符指定矢量的長度,它相對(duì)于形狀的”高度”而言。矢量長度受到比例因子的影響,矢量長度和比例因子的積是實(shí)際的距離值。第三個(gè)字符指定矢量的方向。在使用時(shí),有16個(gè)可用的標(biāo)準(zhǔn)方向。圖2-1所示為16個(gè)標(biāo)準(zhǔn)方向。
圖中所有矢量都是以同一長度規(guī)格來繪制的。對(duì)角線矢量被“延長”來匹配最接近正交矢量X或Y的位移量。例如;讓我們建立一個(gè)命名為DBOX形狀號(hào)為230的形狀。見圖2-2
*230,6,DBOX
014,010,01C,018,012,0
注意除了可以使用矢量-方向代碼外,還可使用特殊代碼8和9定義一對(duì)由X和Y增量組成的位移值。
3.2、專用代碼
專用代碼可以是十進(jìn)制也可以是十六進(jìn)制,指定的代碼可以從0到16或從000到00E。以0打頭的三位二進(jìn)制數(shù)是十六進(jìn)制的特殊代碼。代碼10是十進(jìn)制的特殊代碼,而010等于十進(jìn)制數(shù)的16,但最重要的是010被CAD解釋為矢量-方向代碼,表示矢量的長度為1,方向?yàn)?度。等于10的十六進(jìn)制數(shù)是00A。各專用代碼的含義如下。
代碼0:形定義的結(jié)束,形定義的結(jié)束標(biāo)記是0。
代碼1和2:抬筆和落筆落筆(即繪圖)模式在繪制每個(gè)形的開始時(shí)激活。當(dāng)繪圖模式打開時(shí),一個(gè)矢量說明將繪制一條直線;當(dāng)繪圖模式關(guān)閉時(shí),矢量說明只移到新位置,而不繪制直線。
代碼3和4:比例因子按照下面指定的整數(shù)因子放大或縮小形中的一個(gè)(或一組)矢量的尺寸。代碼3告訴CAD用下一矢量除以緊隨代碼3后的比例因子,代碼4告訴CAD用下一矢量乘以緊隨代碼4后的比例因子。比例因子在同一形中是累計(jì)的。
代碼5和6:保存和恢復(fù)位置形定義中的每一位置都與上一個(gè)位置關(guān)聯(lián)。一旦筆被移到了一個(gè)特殊的位置上,在移動(dòng)前可在形定義中記錄當(dāng)前的位置供以后使用。這用于當(dāng)一個(gè)對(duì)象在同一個(gè)位置上開始或結(jié)束多次的情況。例如,組合使用代碼5和6將非常方便地繪制一個(gè)帶有輻條的車輪,用代碼5定義車輪的中心,繪制輻條,然后用代碼6返回車輪的中心繼續(xù)繪制。
保存和恢復(fù)位置也就是將當(dāng)前位置壓入堆?;驈亩褩V袕棾龅倪^程。堆棧中一次最多可保存四個(gè)位置。從堆棧中彈出的順序與壓入堆棧的順序相反,且每個(gè)壓入堆棧的位置必須彈出。
如果由于過多的壓入操作、彈出而造成堆棧溢出,則在繪制形時(shí)將顯示錯(cuò)誤信息
代碼7:子形 在SHP/SHX文件中定義的一個(gè)形,該形可包含在同一個(gè)形文件中的另一個(gè)形定義中,代碼7后面緊跟插入的形的編號(hào)。
代碼8和9:X - Y位移普通矢量只能繪制在16個(gè)預(yù)定義的方向上,并且最大長度為15。通過代碼8和9可用X - Y位移繪制非標(biāo)準(zhǔn)矢量。代碼8后必須跟兩個(gè)定義字節(jié),分別為X位移與Y位移。倒如,8,(7,-8)表示將筆沿X軸正向移動(dòng)7個(gè)單位,沿Y軸負(fù)向移動(dòng)8個(gè)單位。這里的括號(hào)是可選的,只是為了增強(qiáng)可讀性。用代碼9可繪制一系列非標(biāo)準(zhǔn)矢量。此代碼后面可跟任意數(shù)量的X-Y位移對(duì),由(0,0)對(duì)終止。例如,9, (7,-8), (14,9), (-17,3), (0,0)表示按當(dāng)前的模式使用三對(duì)位移值,用(0,0)對(duì)返回普通矢量模式。
代碼00A:八分圓弧代碼00A(或10)告訴CAD用下兩個(gè)字節(jié)定義一個(gè)圓弧,此圓弧稱為八分圓弧,因?yàn)樗缭揭粋€(gè)或多個(gè)45°的八分圓。八分圓弧的起點(diǎn)和端點(diǎn)都在八分圓邊界上。圖2-3所示為各八分圓的代碼編號(hào)。繪制八分圓弧的格式如下所示:
10,半徑,(-)0SC
半徑可以是1到255之間的任意值。第3個(gè)字節(jié)以0打頭,指定圓弧的方向(順時(shí)針方向?yàn)樨?fù),逆時(shí)針方向?yàn)檎?、起始八分圓( S )和跨越的八分圓數(shù)( C )的值為0到7。其中,0等于八個(gè)八分圓或整個(gè)圓。圖18-48所示的弧用以下代碼繪制:
10,(2,-043)
繪制的圓弧半徑為2,從八分圓4處開始,順時(shí)針旋轉(zhuǎn)135°(跨越了三個(gè)八分圓)。
代碼00B:不規(guī)則圓弧 代碼00B(11)繪制不規(guī)則的圓弧,其起點(diǎn)和端點(diǎn)不一定在八分圓邊界上。其定義格式為:
11,start_offset,end_offset,high_radius,low_radius,(-)0SC
start_offset和end_offset表示從圓弧起點(diǎn)和端點(diǎn)到所在的八分圓邊界的距離。high_radius如果為非0值,表示半徑大于255。low_radius和最后定義的字節(jié)與八分圓弧的定義(代碼00A,如前所述)一樣,負(fù)數(shù)依然表示順時(shí)針方向。
代碼00C和00D:指定凸度的圓弧 代碼00C和00D(12和13 )提供了另一種不同于八分圓的繪制圓弧的方式。在代碼00C和00D中通過將凸度因子應(yīng)用到位移矢量來繪制圓弧。代碼00C和00D是由X位移和Y位移確定圓弧的端點(diǎn),由凸度確定圓弧的曲率。凸度由連接圓弧兩個(gè)端點(diǎn)的直線確定。凸度的取值范圍為-127到+127。最大和最小值(127或-127)定義了180°的圓弧(半個(gè)圓)。小值對(duì)應(yīng)小度數(shù)的圓弧。意思是,假設(shè)指定的凸度值為x,用x乘以180再除以127,即得到對(duì)應(yīng)的角度值。凸度值為0表示定義一條直線。
代碼00C繪制一段圓弧,而代碼00D繪制多段圓弧(polyarcs)。它們與代碼8和9相似。代碼00D與009一樣,必須用(0,0)對(duì)終止。代碼00D后面可跟0或多個(gè)圓弧段定義,其中0凸度值用于繪制直線。
代碼00E正文垂直標(biāo)記命令。專用碼00E(14)僅用于雙向文字字體描述中,即文字可以在水平和垂直兩個(gè)方向上表示。當(dāng)該碼用到字符定義中,如果文字垂直寫,則對(duì)下一個(gè)碼進(jìn)行處理。如果文字是水平寫的,則下一個(gè)碼就跳過不予處理。
在水平文字中,每個(gè)字符的起始點(diǎn)在其基線左端,而在垂直文字中,起始點(diǎn)在字符頂部中心。在每個(gè)字符結(jié)束時(shí),“抬筆”段一般要回到下一個(gè)字符的起始點(diǎn)。對(duì)于水平文字要向右,對(duì)垂直文字要向下。專用碼00E主要用來調(diào)整起點(diǎn)和終點(diǎn)的差別,使同一字形可用在水平和垂直兩個(gè)方向上。
3、SHX文件的存儲(chǔ)格式
了解SHX文件的格式,有助于事半功倍地解決實(shí)際問題。
ASCII字體文件和大字體文件的SHX格式分別見表2-1和表2-2
表2-1 ASCII字體文件存儲(chǔ)格式
序號(hào)起始及終止字節(jié)數(shù)據(jù)內(nèi)容
11∽20Shape文件版本標(biāo)識(shí)字符串,“CAD-86 shapes 1.0”
221∽23CR+LF+EOF (16進(jìn)制的0D 0A 1A)
324∽25最小的字型碼(0)
426∽27最大的字型碼
528∽29字型碼總數(shù)N,包括字符集的聲明(Code 0)
630∽(33+4m)M為0到(N-1),每四個(gè)Bytes一字,前2Butes為字型碼,后2Bytes為字型定義的長度,均為整數(shù)。
7(33+4n-1)∽依長度擺放各字型定義
表2-2大字體文件存儲(chǔ)格式
序號(hào)起始及終止字節(jié)數(shù)據(jù)內(nèi)容
10∽21Shape文件版本標(biāo)識(shí)字符串,“CAD-86 bigfont 1.0”
222∽24CR+LF+EOF (16進(jìn)制的0D 0A 1A)
325∽26(08 00)
427∽28字型碼總數(shù)N,包括字符集的聲明(Code 0)
52∽30字型碼區(qū)間數(shù)K
631∽(31+4m)M為0到(k-1),每四個(gè)Bytes一組存放區(qū)間的起始與結(jié)尾字碼,各2Bytes。
731+4k∽(31+4k+8L-1)L為0到(N-1),每8位一筆存放字型的字碼2Bytes、長度2Bytes與字型定義的地址(4Bytes)等數(shù)據(jù)。
8最后依長度擺放各字型定義
推薦閱讀:CAD機(jī)械制圖應(yīng)用基礎(chǔ)之平面圖形繪圖基礎(chǔ)(一)
推薦閱讀:CAD培訓(xùn)
·中望CAx一體化技術(shù)研討會(huì):助力四川工業(yè),加速數(shù)字化轉(zhuǎn)型2024-09-20
·中望與江蘇省院達(dá)成戰(zhàn)略合作:以國產(chǎn)化方案助力建筑設(shè)計(jì)行業(yè)數(shù)字化升級(jí)2024-09-20
·中望在寧波舉辦CAx一體化技術(shù)研討會(huì),助推浙江工業(yè)可持續(xù)創(chuàng)新2024-08-23
·聚焦區(qū)域發(fā)展獨(dú)特性,中望CAx一體化技術(shù)為貴州智能制造提供新動(dòng)力2024-08-23
·ZWorld2024中望全球生態(tài)大會(huì)即將啟幕,誠邀您共襄盛舉2024-08-21
·定檔6.27!中望2024年度產(chǎn)品發(fā)布會(huì)將在廣州舉行,誠邀預(yù)約觀看直播2024-06-17
·中望軟件“出海”20年:代表中國工軟征戰(zhàn)世界2024-04-30
·玩趣3D:如何應(yīng)用中望3D,快速設(shè)計(jì)基站天線傳動(dòng)螺桿?2022-02-10
·趣玩3D:使用中望3D設(shè)計(jì)車頂帳篷,為戶外休閑增添新裝備2021-11-25
·現(xiàn)代與歷史的碰撞:阿根廷學(xué)生應(yīng)用中望3D,技術(shù)重現(xiàn)達(dá)·芬奇“飛碟”坦克原型2021-09-26
·我的珠寶人生:西班牙設(shè)計(jì)師用中望3D設(shè)計(jì)華美珠寶2021-09-26
·9個(gè)小妙招,切換至中望CAD竟可以如此順暢快速 2021-09-06
·原來插頭是這樣設(shè)計(jì)的,看完你學(xué)會(huì)了嗎?2021-09-06
·玩趣3D:如何巧用中望3D 2022新功能,設(shè)計(jì)專屬相機(jī)?2021-08-10
·如何使用中望3D 2022的CAM方案加工塑膠模具2021-06-24
·CAD并集操作沒有反應(yīng)如何解決2022-12-12
·CAD添加填充區(qū)域的技巧2024-02-02
·在CAD中如何把圖形繪制的更立體2020-05-18
·字體無法正確顯示2017-02-07
·CAD中查找命令的使用2020-08-13
·CAD圖紙中的尺寸和比例因子相關(guān)概念2017-08-29
·CAD修訂云線如何繪制以及控制弧長?2021-05-31
·CAD怎么調(diào)整繪圖區(qū)左下方顯示坐標(biāo)的框2019-07-09