CGM格式解析
無意中從網上看到有人想解析CGM,就想起來把幾年前做的一個小項目簡單總結幾句。
石油行業常用CGM(Computer Graphics Metafile)計算機圖形元文件格式來保存一些圖件,從參加工作沒多久就遇到過許多的CGM讀取和輸出軟件或工具。像SDI公司的cgmoffice等都可以很好的編輯cgm文件。由于cgm格式設計得較早,雖然許多理念很不錯,設計的圖形元素復雜,但還是有一些先天不足,其中最大的問題是對中文的支持,再就是支持多種版本(V1到V4),并且還可以定制,稱為profile,而一些公司出于成本的考慮,通常只支持V1或V2,一些復雜的元素就不再考慮了。
這些CGM文件的版本低一些也是好事,至少我們做編程的可以少花些時間就可以讀取一些構造圖了。在石油行業應用中常用的CGM版本實際上還是V1,在構造圖里,用到的CGM命令并不多,統計后可以有一些驚異的發現。所以自己用C#編程來解析CGM也是一個可能的任務了。
看到許多剛剛參加工作的學生很快就會遇到此類問題,估計也要動手嘗試自己解析CGM格式,這里把一些主要思路介紹一下。
CGM的官方文檔實際上就是三個,
(1)ISO_IEC_8632-1_1999(E).pdf,CGM的ISO規范part1,總體介紹
(2)ISO_IEC_8632-3_1999(E).pdf,CGM的ISO規范part3(注意第2部分被ISO組織作廢了),二進制格式介紹
(3)ISO_IEC_8632-4_1999(E).pdf,CGM的ISO規范part4(文本格式介紹,實際應用中很少用,一般不用看)
另外軍方的有一個規范(MIL-STD-2301-1993-CGM.doc )寫得比較細,把二進制編碼的排列方式都寫出來了。
值得一提的是CGM PIP規范,如果要顯示帶地震剖面的圖形的這類CGM文件時,這個PIP也要能讀才行。
可以從網上借鑒的一些相關源代碼有:
(1)cgmviewer-1.00-java.rar,一個人用JAVA的Applet寫的瀏覽cgm的小程序,功能很弱
(2)ralcgm.rar 這個源代碼內容很多很全,但確實不容易看懂,也不容易移植
(3)勝利油田的一個朋友在工作站上用c語言寫的讀寫cgm的程序,代碼較亂,注釋也很少,可以輸出cgm
(4)Larson的CGMLibrary,1998 larson公司做的一個開放源碼的cgm library,從1998年后好像就不免費了,但源代碼還是可以參考的,還有一個cgmlib3.pdf的API手冊有200多頁。
另外還可以參考的就是發表在期刊雜志上的與CGM有關的幾篇論文,這些論文篇幅都不長,可以作為入門手冊來讀讀。
CGM的測試文件由NIST提供過2個版本,一個是2.0,一個是3.0,見這個網址http://www.itl.nist.gov/div897/ctg/cgm_form.htm,誰能把這些內容都正確顯示了,才能算是一個cgm的商業軟件。
自己解析CGM的過程還是相當曲折的,最后用INT公司的Carnac.NET來顯示所有解析出來的圖元(Carnac里面可以輸出CGM文件,但不能讀CGM),把以前的類圖生成了一張。
總結
- 上一篇: 一起谈.NET技术,Visual Stu
- 下一篇: 如何使用ping命令检查网络故障