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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章