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

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

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

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