天天看點

gbcbig.shx字型的BUG

在解析ACAD中的shx字型檔案時,遇到了一點問題,找遍網絡也沒找到答案,能找到一個文章也是提問的,如:http://www.cppblog.com/wrhwww/archive/2011/03/23/142544.html?opt=admin

我在autodesk論壇上發過一個求助帖,也是無人回答。

原文是這樣的:

------------------------------------------------------------

shx fonts 自定義

自定義shx字型時,對字型的規格說明中 above below兩個參數可以決定字型的整體高度,并用此高度确定生成實際文字時的縮放比例。ACAD提供的大部分字型,其above和below都是大于0的數字,這個很容易了解。但是,我發現有的字型(如gbcbig)其above=0,說明,該字型的基線以上部分的高度就是0,這似乎不合常理。我曾經做過測試,使用這種字型,分别改動其below為不同的值,在生成指定高度的文字時,都能生成一樣的文字,并不會跟随below的改變而改變,似乎是ACAD忽略了below的值,然而,above=0,那麼ACAD是根據什麼确定該字型的設計高度呢?也就是說,憑什麼來确定縮放比例呢?希望有人能夠幫到我解釋這個疑問。謝謝。

------------------------------------------------------------

我一度放棄了追索答案,采用一種妥協的辦法,對于above=0的字型,在根據設計字高生成字型時,固定了計算比例,顯然這是不對的,但是對于gbcbig這種沒有答案的字型,也隻能這樣了。

代碼裡的注釋:

           // gbdbig.shx中,字型的定義為above=0,below=64,與其他的bigfont字型着實不同

            // 經過研究發現:

            // 在AutoCAD中使用這個字型生成的文本,AutoCAD是不考慮below的具體數值是多少的。

            // gbcbig字形定義,開始的子形中,對比例做了調整動作,*9,/102

            // 假設字形的高度為100(一個很可能的數字),

            // 則9/102實際上是對100做了縮小的動作, 設計字高變成了100*9/102

            // 那麼生成指定高度為height的文本時,相對設計高度的縮放比例為heihgt/(100*9/102)

            // 即:height*0.1133

            // 此外,并沒有發現AutoCAD自帶的其他字型有這種設計(above=0)

今天,在網上閑逛,無意中搜到一篇類似的文章,頓時感覺心中暢快,竟然是gbcbig的bug。RI。呵呵

跨區請教陳老師一個CAD字型的問題

文章的内容是這樣的:

本人是一家工業爐公司的技術人員,從事工業爐的建造施工、工業爐設計制圖、房屋建築的建築和結構設計制圖、鋼構件加工詳圖制圖工作。

  一直有一個問題困擾着我,就是"gbcbig.shx”形字型在單行文字使用當中,其對齊方式不能使用“下對齊”,否則文字會跑到相對于基點(或者叫文字基線?插入點?)一個非常離譜的位置,大概是文字高度的十倍吧,然而我在制作某些動态圖塊時,某些屬性定義又需要下對齊。

  為了解決這個問題,本人在網上找了個叫shxviewer的程式,将gbcbig.shx 儲存為 shp 檔案,想從中找出原因。想到這麼做是因為以前為了解決cad字型中許多特殊字元無法輸入,用這個辦法自己在gbenor.shx中加入了很多自己需要的特殊字元,較好解決了問題,然而這次卻沒能解決問題。

  之是以跨區來問陳老師,是因為陳伯雄老師原來就是做CAD相關技術工作的,而且我還偶然在某個形字型中看到了一個“陳伯雄”的篆體印章特殊字元,當時我就想這個方面的工作肯定跟您有關,加之上次在一個曲線方程的文章中請教了陳老師關于3個筒相貫展開的問題,得到了陳老師的專業指點,是以再次懷着不恥“瞎”問的心情,想得到陳老師的解答。

Re: 跨區請教陳老師一個CAD字型的問題

樓主很厲害呀,竟然找到了我暗藏的印章“标記”...

事情是這樣的:

在1999年,按Autodesk的要求,我做完了GBxxx.SHX的一套矢量字庫,并被加入到發行的版本中。

在2000年,您說的Bug被技術部門發現,同年,産生了這個Bug的修正版。這就是說2000年之後的版本,已經沒有您說的錯誤了。

後來又有幾個小的Bug被發現(諸如個别字卻少筆畫),并産生了後來的幾個修訂版本,最終的版本是2001年12月,後來就沒有再修改。

不幸的是,在AutoCAD2002,卻有網友告訴我您送出的這個被修正的問題再次出現,我查了一下,原來在發行盤中加入的是1999年的有問題的版本。當即向有關部門報告此事。

因為工作關系,好多年沒有關注AutoCAD的事情了,沒想到在AutoCAD2011中仍卻仍然是有錯誤的版本(我已經驗證了)。

AutoCAD自帶的檔案是1999年1月生成,882K

正确的最終版本檔案是2001年12月生成,876K(因為做了資料優化,字元增加,檔案大小卻減少了)

請用2001年版本替換您的舊的SHX,應當就好了...

貼中還附上了正确的gbcbig.shx供下載下傳

本想把正确的字型添加過來,但找不到添加附件的地方啊。

這裡把兩個版本字型的0号字形做個對比,CBX 估計是陳伯雄的縮寫。

1999年版本:

*BIGFONT 7019,1,0A1,0FE

*0,4,工程漢字字元集 1998.1. FAW/Autodesk CTC CBX(0293)

0,64,2,0

2001年版本:

*BIGFONT 7023,1,0A1,0FE

*0,5,工程漢字字元集 2001.4.27 DHCAD CBX(0293)

48,0,2,48,0