□豆喜朋 □王志軍(河南省水利勘測有限公司)
?
基于Teigha的復雜水利AutoCAD數據的讀取
□豆喜朋□王志軍(河南省水利勘測有限公司)
摘要:Aut oCAD具有價格高、專業針對性不強、操作相對復雜等缺點,然而,DWG數據庫是水利工程最常用的文件格式之一,水利DWG數據是水利信息的重要載體,是實現水利信息化管理的必要條件,所以水利軟件研發過程中必須兼容DWG文件格式。DWG文件以塊形式進行組織管理,圖塊是DWG數據重要的組成部分,通過表唯一索引其包含的對象實體。Tei ghafor. dwg是面向對象的開源類庫,文章在Net框架下實現了復雜水利DWG數據的快速讀取,并在開源GIS平臺Worl dWi nd三維空間上的精確顯示。
關鍵詞:Tei ghafor. dwg;CAD;數據庫;水利
AutoCAD是一款強大的二維繪圖軟件,多年來在多個領域得到廣泛應用。作者以為還有以下幾點不足:第一,AutoCAD可廣泛應用于諸多領域,其為用戶提供了基本的作圖工具,但在具體行業業務流程中缺乏專業性;第二,AutoCAD功能較多,對某一類用戶往往只用其中幾個功能,軟件采購時往往存在較大浪費;第三,AutoCAD源自美國Autodesk公司,其操作習慣與國人存在較大差別。可見我們針對專業應用領域,研發定制性強、有自主版權的CAD軟件是很有必要的。
但是Autodesk針對DWG數據格式迄今并未公開其數據結構,其高效的數據組織、快速的數據索引機制、高壓縮的數據存儲一直是眾多國內類似軟件無法達到的。AutoCAD的數據交換通過DXF格式實現,但是DXF文件格式不僅占用磁盤空間較大,而且其圖塊讀取速度也大大降低,少量DXF數據讀取速度尚可接收,但對于復雜的數據其讀取速度將會成為軟件的瓶頸。因此文章針對復雜的水利DWG數據庫,基于Teighafordwg開放組件,實現直接、快速、準確的讀取DWG文件,并對水利典型DWG數據進行了交換實現。
開放設計協會(Open Design Allianee)是一個致力于設計開發專門用于讀取AutoCAD數據的非盈利組織,其核心技術組件是Teigha,Teigha是一套全新的面向對象的類庫,支持Dgn、Dwg、Pdf等多種格式之間的轉換,同時支持多個操作平臺。Teighafor.dwg是Teigha的一個子集,前身叫OpenDWG、DWGdirect。可以讀取各版本AutoCAD數據,圖形顯示上支持GDI、 OpenGL、DirectX,對DWG文件的讀、寫具有高效性和高安全性。
Teighafor.dwg對內提供DWG各個版本文件格式近乎完美兼容性接口。向下屏蔽DWG內部數據結構和版本差異,向上提供統一的數據結構表達信息模型。Teighafor.dwg在OpenDWG基礎上極大的提升了讀取CAD信息的速度。類庫從功能上劃分為以下幾個重要模塊:一是在類庫初始運行時,類的入口識別以及注冊信息。二是標示DWG中實體數據。三是數據對象的渲染表達。四是點、線、面等幾何通用類。五是標示邊界表示法的類。六是圖形類。同時以矢量化界面顯示。
Teighafor.dwg類庫把DWG文件所包含的各類信息以一系列對象的形式保存到內存中。這些對象具有各自的類型并能實現不同的功能,所以我們就能易于理解和操作這些信息。Teighafor.dwg類庫把每個DWG文件抽象為一個OdDbDatabase類,每個OdDbDatabase類有九個數據表類型,并為這些表類型建立了一個索引類,索引類中通過字典保存類的結構信息。
字典類型是個索引類,存儲了每個表類的位置索引,可以快速定位到所指向的表。每個表對象都包含多條相應的記錄項,如TableText、TableVIew、TableLayer等包含多條相應記錄TextRecord、ViewRecord、LayerRecord,分別存儲了標注、視圖和圖層相關信息。
DWG是一種保密格式,通過二進制流保存文件,由于對DWG文件結構不了解,普通用戶無法直接讀取,只能通過AutoCAD軟件解析二進制流文件,以可編輯的圖形文件可視化展示。
每個DWG文件將整個數據庫文件分解為幾種標準數據類型,如單字節整型、字符型、雙精度浮點型等。因此很方便的用高級程序設計語言(如C++、java、C_Sharp)進行直接存取和處理。每個DWG數據庫文件有文件頭、實體、表、塊體和應急頭部五部分組成。
DWG文件頭存放著DWG文件標志、各種索引、版本信息及AutoCAD軟件中的一部分系統變量,是讀取DWG文件的入口,DWG文件的所有尋址操作的地址均從頭部的有關參數計算而來。應急頭是在DWG文件尾部保存的一些重要索引文件,這些索引同樣可以快速定位到相關位置,是文件頭的備份。表可以提高定位速度。記錄了每類對象的屬性描述。塊實體是一組圖形實體的集合,每個塊實體都和一個塊表唯一對應,方便快速索引到每個實體對象。圖形中所有幾何對象按照一定順序統一存放在實體部,DWG圖形實體包含幾種基本圖元素,如:點(Point)、線(Line、Ray、Mline、Pline、Spline等)、圓(Circle)、圓弧(Are)、塊(Block)、尺寸標注(Dimension)等。每個實體用唯一編碼標識,分為實體頭和實體尾。實體頭描述了實體的基本屬性信息,各個實體頭基本一致。
圖塊的讀取是基于Teighafor.dwg服務類的,所以首先要開啟Services服務類,之后為DWG文件創建相應的Database,通過調用ReadDwgFile(FilePath)方法加載指定的DWG文件,具體流程如下圖所示:

圖1 DWG圖塊讀取流程圖
首先根據DWG數據庫獲得塊表指針BlockTable,通過GetObject方法截取模型空間的塊表記錄,遍歷每個模型空間的塊表記錄實例分別讀取。Entity.GetRXClass()方法獲得實體的不同類型,如RXClass為AcDbLine表示直線,RXClass為AcDbPolyline表示多線,為多線段時可以通過Get Segment Type()得到多線段不同的段類型(Segment Type)分別讀取,保存多線段節點在Point2dCollection集合中。
水利工程數據以測量數據和地質數據為主,為使數據最大限度的重用,必須精確提取DWG數據文件,基于Teighafor.dwg技術的DWG文件圖塊提取高效精確的解決了這一問題。針對河南省二級河流DWG數據進行讀取,利用TEIGHAFOR.DWG技術讀取DWG文件塊,讀取的數據可以無損的保存為自定義格式和其他通用格式。不僅方便外業作業,減少內業數據轉換工作量,而且可以利用自主研發軟件實現專業性強、定制性高的快速、高效的完成工作任務。讀取DWG文件圖塊效果如下,圖2為CAD原始數據和讀取到系統中的DWG數據:

圖2 Aut oCAD原始數據和讀取數據對比圖
采用Teighafor.dwg直接讀取DWG文件和用二進制方式讀取通用DXF格式對比如下所示:由于Teighafor.dwg直接讀取DWG文件,而DWG文件采用塊索引壓縮存儲方式,所以對記錄條數相同的同一數據DXF數據占用的存儲空間是DWG文件的三倍多,讀取速度上DXF采用二進制流方式讀取,而Teighafor.dwg用塊為索引,采用優化算法讀取速度快,效率對比如表1:

表1 讀取效果對比表
可見利用TEIGHAFOR.DWG強大的讀寫DWG格式數據的功能,可以直接的、快速的讀取DWG文件,極大提高了數據讀取的準確度和效率。在實際工作中對DWG數據重用和信息一體化管理有極高的使用價值。
參考文獻
[1]于文潔,王鈕. Aut oCAD標注屬性信息提取的研究.青島:青島大學學報(自然科學版), 2007, 2: 55-61.
[2]晏韻,許超.基于DWGDi rect訪問Aut oCADDWG圖形文件[J].工程圖學學報. 2010(06).
[3]孫炎,羅曉沛.基于DWGDi rect實現Aut oCAD與ArcGIS的數據交換[J].計算機工程與設計. 2009(07).
[4]陸振朋. Aut oCAD二次開發及在工程設計中的應用[J].鐵路通信信號工程技術. 2011(06).
(責任編輯:韋詩佳)
收稿日期:2015-10-23
中圖分類號:TP391. 72
文獻標識碼:A
文章編號:1673-8853(2016)02-0053-02