□豆喜朋 □王志軍(河南省水利勘測有限公司)
?
基于Teigha的復雜水利AutoCAD數(shù)據(jù)的讀取
□豆喜朋□王志軍(河南省水利勘測有限公司)
摘要:Aut oCAD具有價格高、專業(yè)針對性不強、操作相對復雜等缺點,然而,DWG數(shù)據(jù)庫是水利工程最常用的文件格式之一,水利DWG數(shù)據(jù)是水利信息的重要載體,是實現(xiàn)水利信息化管理的必要條件,所以水利軟件研發(fā)過程中必須兼容DWG文件格式。DWG文件以塊形式進行組織管理,圖塊是DWG數(shù)據(jù)重要的組成部分,通過表唯一索引其包含的對象實體。Tei ghafor. dwg是面向?qū)ο蟮拈_源類庫,文章在Net框架下實現(xiàn)了復雜水利DWG數(shù)據(jù)的快速讀取,并在開源GIS平臺Worl dWi nd三維空間上的精確顯示。
關(guān)鍵詞:Tei ghafor. dwg;CAD;數(shù)據(jù)庫;水利
AutoCAD是一款強大的二維繪圖軟件,多年來在多個領(lǐng)域得到廣泛應(yīng)用。作者以為還有以下幾點不足:第一,AutoCAD可廣泛應(yīng)用于諸多領(lǐng)域,其為用戶提供了基本的作圖工具,但在具體行業(yè)業(yè)務(wù)流程中缺乏專業(yè)性;第二,AutoCAD功能較多,對某一類用戶往往只用其中幾個功能,軟件采購時往往存在較大浪費;第三,AutoCAD源自美國Autodesk公司,其操作習慣與國人存在較大差別??梢娢覀冡槍I(yè)應(yīng)用領(lǐng)域,研發(fā)定制性強、有自主版權(quán)的CAD軟件是很有必要的。
但是Autodesk針對DWG數(shù)據(jù)格式迄今并未公開其數(shù)據(jù)結(jié)構(gòu),其高效的數(shù)據(jù)組織、快速的數(shù)據(jù)索引機制、高壓縮的數(shù)據(jù)存儲一直是眾多國內(nèi)類似軟件無法達到的。AutoCAD的數(shù)據(jù)交換通過DXF格式實現(xiàn),但是DXF文件格式不僅占用磁盤空間較大,而且其圖塊讀取速度也大大降低,少量DXF數(shù)據(jù)讀取速度尚可接收,但對于復雜的數(shù)據(jù)其讀取速度將會成為軟件的瓶頸。因此文章針對復雜的水利DWG數(shù)據(jù)庫,基于Teighafordwg開放組件,實現(xiàn)直接、快速、準確的讀取DWG文件,并對水利典型DWG數(shù)據(jù)進行了交換實現(xiàn)。
開放設(shè)計協(xié)會(Open Design Allianee)是一個致力于設(shè)計開發(fā)專門用于讀取AutoCAD數(shù)據(jù)的非盈利組織,其核心技術(shù)組件是Teigha,Teigha是一套全新的面向?qū)ο蟮念悗?,支持Dgn、Dwg、Pdf等多種格式之間的轉(zhuǎn)換,同時支持多個操作平臺。Teighafor.dwg是Teigha的一個子集,前身叫OpenDWG、DWGdirect??梢宰x取各版本AutoCAD數(shù)據(jù),圖形顯示上支持GDI、 OpenGL、DirectX,對DWG文件的讀、寫具有高效性和高安全性。
Teighafor.dwg對內(nèi)提供DWG各個版本文件格式近乎完美兼容性接口。向下屏蔽DWG內(nèi)部數(shù)據(jù)結(jié)構(gòu)和版本差異,向上提供統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)表達信息模型。Teighafor.dwg在OpenDWG基礎(chǔ)上極大的提升了讀取CAD信息的速度。類庫從功能上劃分為以下幾個重要模塊:一是在類庫初始運行時,類的入口識別以及注冊信息。二是標示DWG中實體數(shù)據(jù)。三是數(shù)據(jù)對象的渲染表達。四是點、線、面等幾何通用類。五是標示邊界表示法的類。六是圖形類。同時以矢量化界面顯示。
Teighafor.dwg類庫把DWG文件所包含的各類信息以一系列對象的形式保存到內(nèi)存中。這些對象具有各自的類型并能實現(xiàn)不同的功能,所以我們就能易于理解和操作這些信息。Teighafor.dwg類庫把每個DWG文件抽象為一個OdDbDatabase類,每個OdDbDatabase類有九個數(shù)據(jù)表類型,并為這些表類型建立了一個索引類,索引類中通過字典保存類的結(jié)構(gòu)信息。
字典類型是個索引類,存儲了每個表類的位置索引,可以快速定位到所指向的表。每個表對象都包含多條相應(yīng)的記錄項,如TableText、TableVIew、TableLayer等包含多條相應(yīng)記錄TextRecord、ViewRecord、LayerRecord,分別存儲了標注、視圖和圖層相關(guān)信息。
DWG是一種保密格式,通過二進制流保存文件,由于對DWG文件結(jié)構(gòu)不了解,普通用戶無法直接讀取,只能通過AutoCAD軟件解析二進制流文件,以可編輯的圖形文件可視化展示。
每個DWG文件將整個數(shù)據(jù)庫文件分解為幾種標準數(shù)據(jù)類型,如單字節(jié)整型、字符型、雙精度浮點型等。因此很方便的用高級程序設(shè)計語言(如C++、java、C_Sharp)進行直接存取和處理。每個DWG數(shù)據(jù)庫文件有文件頭、實體、表、塊體和應(yīng)急頭部五部分組成。
DWG文件頭存放著DWG文件標志、各種索引、版本信息及AutoCAD軟件中的一部分系統(tǒng)變量,是讀取DWG文件的入口,DWG文件的所有尋址操作的地址均從頭部的有關(guān)參數(shù)計算而來。應(yīng)急頭是在DWG文件尾部保存的一些重要索引文件,這些索引同樣可以快速定位到相關(guān)位置,是文件頭的備份。表可以提高定位速度。記錄了每類對象的屬性描述。塊實體是一組圖形實體的集合,每個塊實體都和一個塊表唯一對應(yīng),方便快速索引到每個實體對象。圖形中所有幾何對象按照一定順序統(tǒng)一存放在實體部,DWG圖形實體包含幾種基本圖元素,如:點(Point)、線(Line、Ray、Mline、Pline、Spline等)、圓(Circle)、圓弧(Are)、塊(Block)、尺寸標注(Dimension)等。每個實體用唯一編碼標識,分為實體頭和實體尾。實體頭描述了實體的基本屬性信息,各個實體頭基本一致。
圖塊的讀取是基于Teighafor.dwg服務(wù)類的,所以首先要開啟Services服務(wù)類,之后為DWG文件創(chuàng)建相應(yīng)的Database,通過調(diào)用ReadDwgFile(FilePath)方法加載指定的DWG文件,具體流程如下圖所示:
圖1 DWG圖塊讀取流程圖
首先根據(jù)DWG數(shù)據(jù)庫獲得塊表指針BlockTable,通過GetObject方法截取模型空間的塊表記錄,遍歷每個模型空間的塊表記錄實例分別讀取。Entity.GetRXClass()方法獲得實體的不同類型,如RXClass為AcDbLine表示直線,RXClass為AcDbPolyline表示多線,為多線段時可以通過Get Segment Type()得到多線段不同的段類型(Segment Type)分別讀取,保存多線段節(jié)點在Point2dCollection集合中。
水利工程數(shù)據(jù)以測量數(shù)據(jù)和地質(zhì)數(shù)據(jù)為主,為使數(shù)據(jù)最大限度的重用,必須精確提取DWG數(shù)據(jù)文件,基于Teighafor.dwg技術(shù)的DWG文件圖塊提取高效精確的解決了這一問題。針對河南省二級河流DWG數(shù)據(jù)進行讀取,利用TEIGHAFOR.DWG技術(shù)讀取DWG文件塊,讀取的數(shù)據(jù)可以無損的保存為自定義格式和其他通用格式。不僅方便外業(yè)作業(yè),減少內(nèi)業(yè)數(shù)據(jù)轉(zhuǎn)換工作量,而且可以利用自主研發(fā)軟件實現(xiàn)專業(yè)性強、定制性高的快速、高效的完成工作任務(wù)。讀取DWG文件圖塊效果如下,圖2為CAD原始數(shù)據(jù)和讀取到系統(tǒng)中的DWG數(shù)據(jù):
圖2 Aut oCAD原始數(shù)據(jù)和讀取數(shù)據(jù)對比圖
采用Teighafor.dwg直接讀取DWG文件和用二進制方式讀取通用DXF格式對比如下所示:由于Teighafor.dwg直接讀取DWG文件,而DWG文件采用塊索引壓縮存儲方式,所以對記錄條數(shù)相同的同一數(shù)據(jù)DXF數(shù)據(jù)占用的存儲空間是DWG文件的三倍多,讀取速度上DXF采用二進制流方式讀取,而Teighafor.dwg用塊為索引,采用優(yōu)化算法讀取速度快,效率對比如表1:
表1 讀取效果對比表
可見利用TEIGHAFOR.DWG強大的讀寫DWG格式數(shù)據(jù)的功能,可以直接的、快速的讀取DWG文件,極大提高了數(shù)據(jù)讀取的準確度和效率。在實際工作中對DWG數(shù)據(jù)重用和信息一體化管理有極高的使用價值。
參考文獻
[1]于文潔,王鈕. Aut oCAD標注屬性信息提取的研究.青島:青島大學學報(自然科學版), 2007, 2: 55-61.
[2]晏韻,許超.基于DWGDi rect訪問Aut oCADDWG圖形文件[J].工程圖學學報. 2010(06).
[3]孫炎,羅曉沛.基于DWGDi rect實現(xiàn)Aut oCAD與ArcGIS的數(shù)據(jù)交換[J].計算機工程與設(shè)計. 2009(07).
[4]陸振朋. Aut oCAD二次開發(fā)及在工程設(shè)計中的應(yīng)用[J].鐵路通信信號工程技術(shù). 2011(06).
(責任編輯:韋詩佳)
收稿日期:2015-10-23
中圖分類號:TP391. 72
文獻標識碼:A
文章編號:1673-8853(2016)02-0053-02