• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      DWG文檔格式化存儲方法研究

      2011-01-01 00:00:00尹義方吳曉宇左曉彥董微張方舟
      科技資訊 2011年4期


        摘要:基于CAD的DWG文件解析是解決DWG文件不易讀取的唯一方法,也是CAD在實際操作中遇到的主要問題。本文闡述了如何解析DWG文件,分析DWG文件數(shù)據(jù)結構及數(shù)據(jù)類型,將DWG二進制格式文件分解成可以存儲的實體元素,并將得到的實體元素存入數(shù)據(jù)庫,可提取數(shù)據(jù)庫中DWG文件信息,為實現(xiàn)工程概算和模糊匹配提供方便,同時簡要介紹了DWG文件轉換成XML文件的方法。
        關鍵詞:DWG 文檔格式化 研究
        中圖分類號:TP393文獻標識碼:A文章編號:1672-3791(2011)02(a)-0000-00
        
        1前言
        CAD作為一種功能強大的計算機輔助設計軟件被廣泛使用,在建筑、規(guī)劃、測繪中用它來繪制圖形,例如建筑設計圖、城市規(guī)劃圖等,其繪制的結果被保存為以DWG為擴展名的矢量圖形文件中,這種矢量圖形在許多軟件中不能直接使用,必須經過各種方法的轉換后方能調用。因此傳統(tǒng)的DWG文件不易讀取,不易轉換的特性就成為實際操作應用的瓶頸,所以開發(fā)解析DWG文件,將DWG文件解析成可以讀取的,字符串形式的數(shù)據(jù)或方便轉換存儲形式的數(shù)據(jù),就成為十分必要的,也是現(xiàn)在軟件實際應用中主要面臨的問題。
        本文對CAD矢量圖形的轉換方法進行探究。通過對DWG實例文件的二進制剖析,重點研究了DWG文件的內部格式,包括其總體結構,以及各部分的組織方式。在具體數(shù)據(jù)類型方面包括基本數(shù)據(jù)類型,擴展數(shù)據(jù)類型和三維信息等的內部表示方法。分析了其數(shù)據(jù)表示的不對齊,不定長,表示域大等特點。
        
        2 DWG文件的組成與解析
        2.1 DWG 文件的結構
        如圖 1 所示,DWG文件按照地址偏移量依次分為定位器部分,圖像部分,環(huán)境變量部分,實體部分和對象映射表部分。各部分相互指向,共同表達了DWG 文件中實體的復雜邏輯關系。各個部分組成了一個有機整體,用戶可以訪問任何部分,在訪問具體對象前要通過對象映射表。定位器部分實質是整個DWG 文件的總起部分,它用相對于文件首部的偏移來記錄其他各部分的位置。其中定位器的編號與其內容是一一對應的,在所有DWG文件中保持不變。
        
        圖 1 DWG 文件的總體結構
        2.2 DWG二進制格式文件
        DWG采用二進制格式的文件形式,一方面可以節(jié)省文件占用的空間,另一方面提高讀寫文件的效率。為了防止用戶對DWG文件無意損壞而造成的AutoCAD 崩潰,AutoCAD 采用循環(huán)冗余校驗,對DWG文件的正確性進行檢查。
        DWG二進制格式文件,共有5 種數(shù)據(jù)形式:字符型、字節(jié)型、整型、長整型、IEEE標準的浮點數(shù),用戶可以直接對這些數(shù)據(jù)進行存取和處理。文件DWG 的數(shù)據(jù)結構由5 部分組成,分別是:頭部、實體部、表部、塊實體部和應急頭部。總體結構如圖2所示:
        
        圖2 DWG文件數(shù)據(jù)結構圖
        (1)頭部結構
        DWG文件的頭部存放著DWG 文件的一些重要信息,如DWG 文件標志、版本信息、各種索引用的地址以及Auto-CAD 軟件中的一部分系統(tǒng)變量。頭部的信息對于AutoCAD來講是至關重要的,因為AutoCAD 對DWG 文件的所有尋址操作的地址均從頭部的有關參數(shù)計算而來,而且頭部還保存著與該文件中所保存圖形密切相關的系統(tǒng)變量的值。
        (2)實體部
        實體部保存著該圖形中的全部實體。所謂實體是指AutoCAD 中的基本圖形單元。如:點,線、圓、弧、塊、尺寸標注等。為了識別實體,AutoCAD 將實體進行編碼,如點實體的編碼為02H,直線實體的編碼為01H。對于每一個實體,其數(shù)據(jù)結構都可以分成兩個部分:實體頭部和實體尾部。實體頭部的長度固定,包含有實體類型編碼、實體性質、實體長度。不同實體,其尾部數(shù)據(jù)結構不同。
        (3)表部
        表是AutoCAD 為方便索引而引入的數(shù)據(jù)結構。在DWG文件中所有的表均按一定順序集中存放在表部。這些表包括塊表、層表、字型表、線型表。每一種表的格式、長度均固定。例如層表,它包含了該層的全部信息:層名、該層實體的顏色、線型以及該層的狀態(tài),而每一種表的長度、個數(shù)和起始地址保存在頭部的索引信息段。
        (4)塊實體部
        塊是用AutoCAD 進行繪圖時經常遇到的一個概念。它是為了減少圖形文件的長度和方便操作而引入的。AutoCAD 將用戶所做的塊集中存在一起,這就是塊實體部。每生成一個塊時,AutoCAD 同時自動地生成一個相應的塊表以便檢索。對于每一個塊,其兩端均為塊起始實體和結束實體,中間為該塊所包含的各種實體元素。
        (5)應急頭部
        為了防止由于頭部的重要索引信息的損壞而使整個DWG文件中的信息丟失, AutoCAD 將一些重要索引信息的副本保存在DWG 文件的尾部,稱為應急頭部。它包含了恢復受損圖形文件的重要信息。
        
        3 DWG文件數(shù)據(jù)類型
        3.1 基本數(shù)據(jù)類型
        作為一個工程軟件,AutoCAD 必須有能力處理很大范圍的數(shù)據(jù),同時極大地節(jié)省空間,因此在DWG文件中廣泛存在著可變長度的數(shù)據(jù)類型,這是其數(shù)據(jù)類型的典型特征,并在大多數(shù)的數(shù)據(jù)類型中得到體現(xiàn)。根據(jù)具體處理數(shù)據(jù)的方式不同,可分為2種典型的表示方式。
        第1種典型表示方式主要用于表示浮點型及雙精度型。這種處理方式對一些特別而常用的數(shù)據(jù)如1.0,0.0 只采用兩位標識表示,與IEEE 雙精度浮點數(shù)占用8字節(jié)相比,節(jié)約了62 位。DWG文件中存儲的數(shù)據(jù)沒有按要求對齊字節(jié),這給讀取DWG 文件帶來了麻煩。由于數(shù)據(jù)不定長、不對齊,在實踐中采用以下編接的方法。
        Readdouble(data, ucin, dRes)
        {switch(flags)
        {case 00:
         Break;
        case 01: dRes=1.0; break;
        case 10: dRes=0.0; break;
        }}
        ReadMC(data, iRes)
        { uctemp1= 按無符號字符讀data 的第1 個字節(jié);
        while(uctemp>=128)
        {ires=uctemp1-128;
        untemp2=2th;
        if(64<=uctemp2<128) {ires+=uctemp2*128;ires=-ires;}
        elseif(uctemp2<64) {ires+=uvtemp2*128;}
        uctemp1=uctemp2;
        }}
        上面的基本數(shù)據(jù)類型主要用來表示幾何坐標。DWG文件中有大量的對象需要定位,模式字符常用來表示地址數(shù)據(jù)。模式字符也是一種變長類型,但都是對齊的。它可表示任意大小的整型數(shù),實際操作時可按32位整數(shù)處理。
        第2種典型表示方式,基本數(shù)據(jù)類型常用來記錄對象的句柄。在DWG文件中,每一個可繪制或不可繪制的對象都有一個句柄唯一的標識。句柄采用下面的數(shù)據(jù)結構:
        typedef struct tagHandle
        {uchar code;
        uchar* Hdata;
        }Handle;
        DWG文件最多可包含128個對象,DWG文件還有巨大的潛力有待挖掘。需要指出的是,DWG 文件中并不是所有的句柄都采用這種格式表示,有些句柄記錄在擴展數(shù)據(jù)類型中。
        3.2 擴展數(shù)據(jù)類型
        DWG文件中一般存儲有大量的附加屬性信息,這些信息可以是文本,整數(shù),浮點數(shù)或其他任何自定義數(shù)據(jù)。用戶常遇到的BLOB在DWG文件中就表現(xiàn)為這種類型,其類名XRecord。它們的具體存儲方式靈活多變,基本方式是用一個詞典對象與一個或多個XRecord對象共同表示一組擴展數(shù)據(jù)。
        
        3.3 三維信息
        AutoCAD 的造型能力來自ACIS,這是一個集成了目前最先進造型方法和技術的幾何造型平臺,采用文本方式記錄造型信息。從DWG 文件內部數(shù)據(jù)格式來講,AutoCAD 將其通過造型界面獲取的ACIS 文本造型信息通過簡單轉化后直接存儲,而當用戶用ACISOUT 命令輸出模型信息時,AutoCAD 將這部分文本信息輸出為單獨的SAT 文件。因此這類信息既不是基本數(shù)據(jù)類型,也不同于附加屬性信息。
        
        4讀取文件對象
        4.1讀取DWG文件
        用簡單的代碼就可以實現(xiàn)對DWG 文件的讀取。要讀取某個DWG 文件,需要將其所有對象或實體的句柄,絕對地址,組代碼一一讀取。
        BOOL ReadAllObjEnt()
        {
        從定位器部分讀取對象映射表的絕對地址;
        在對象映射表開始處讀取對象映射表的長度;
        Hndl=0; Adrss=0
        do
        {
        緊接著讀句柄的偏移量;
        讀取對象的地址偏移量;
        Hndl+=句柄偏移量;
        Adrss+=地址偏移量;
        按 Adrss 尋址;
        讀取對象的組代碼;
        輸出 Hndl, Adrss,組代碼;
        }
        while(對象映射表長度耗盡)
        }
        上述代碼可以生成一個XML文件。一幅AutoCAD 圖形中包含著多個對象,其數(shù)據(jù)庫結構如下:層表和層表記錄,塊表和塊表記錄,包括模型空間和圖紙空間。AutoCAD 中所有的實體可見對象均屬于塊表的這兩個記錄。
        在文件讀取的過程中,根據(jù)這些對象可以建立相應的對象集合。層表對象包含圖層的信息,可生成集合LAYER={L1 , L2 , L3, . . . , Ln};塊表中包含所有的實體和可見對象,可以生成集合:
        BLOCK= { POINT, LINE, CIRCLE,TEXT, . . . }
        POINT= { P1 , P2 , P3 , . . . , Pn}
        LINE= {Li1, Li2, Li3 , . . . , Lin}
        CIRCLE= {C1, C2, C3 , . . . , Cn}
        TEXT= {T1, T2, T3, . . . , Tn}
        這樣DWG文件在圖紙上就被表示成點、線或三角形,把復雜的的DWG文件轉換成可以存儲在數(shù)據(jù)庫中的實體對象。
        實體是一類特殊的數(shù)據(jù)庫對象,在AutoCAD圖形中表現(xiàn)為如下的基本實體組合:線、圓、弧、文本、區(qū)域、復合線和橢圓。用戶可以在AutoCAD 的圖形編輯器中使用命令來編輯這些實體,通過訪問實體數(shù)據(jù)庫來改變獲得這些實體的值。利用一些軟件來自動提取DWG 文件標題欄字符串信息的模塊,實現(xiàn)圖紙標題欄信息的自動提取并保存到數(shù)據(jù)庫。服務器端利用SQL Server 數(shù)據(jù)庫實現(xiàn)對設計圖紙的自動化管理。
        4.2 DWG文件入庫
        圖紙需入庫保存時,在AutoCAD 環(huán)境中加載該程序,執(zhí)行圖紙入庫命令,選擇所需入庫的圖紙文件。系統(tǒng)調用AutoCAD 內部函數(shù)limmax()獲得圖紙幅面大小,得到標題欄位置,再根據(jù)標題欄中各個字符串的相應位置,即可實現(xiàn)標題欄中圖名、圖號、比例、材料、設計者、審核者、批準者、日期等字符串信息在AutoCAD 后臺數(shù)據(jù)庫中的自動提取,最后將所提取的信息保存到服務器端SQL Server 數(shù)據(jù)庫中。附著的外部參照經過綁定和插入操作后即與圖塊相同,可按相同方式處理。定義好的外部圖塊和繪制好的圖紙都存成DWG 圖紙的形式。它們用兩種不同方法插入到當前圖紙中,即圖塊和外部參照,命令分別是INSERT 和XREF。關鍵問題是圖元在外部圖塊或被插入圖紙中的參照坐標系與當前圖紙坐標系不同,因此要進行坐標變換,具體可分為4 種情況。
        DWG 圖紙作為圖塊插入,則圖紙中圖元坐標不變,基點坐標為(0,0)。DWG 圖紙作為外部引用插入,則圖紙中圖元坐標不變,基點坐標為(0,0)。圖塊作為外部引用插入,則圖紙中圖元坐標不變,基點坐標變化。圖塊作為圖塊插入,則圖紙中圖元坐標變化,基點坐標為(0,0)。4種情況分別處理會很復雜,經分析歸納出統(tǒng)一的坐標轉換公式。設圖元在當前圖紙中的坐標點為( x c ,y c),圖元原始坐標點為( x 0,y 0),基點坐標為( x b,yb ),插入點坐標為( x i,yi ),其中( x 0,y 0),( x b,yb ),( x i,y i ) 可從DXF 文件中獲得,坐標轉換公式為( x c,y c ) = ( x 0,y 0) - ( x b,y b ) + ( x i,y i )這樣就把復雜的圖元轉換成可以存儲的實體元素,為入庫及文件的讀取提供方便。經過處理,復雜的DWG文件被解析成可以存儲、轉換、可供用戶調用的元素。
        
        5結語
        DWG文件是高度緊湊的數(shù)據(jù)與可表示數(shù)據(jù)域的完美結合。在DWG 圖紙中發(fā)現(xiàn)知識,其中用到的很多技術都是一些嶄新的技術。本文給出了一種從AutoCAD 的DWG 圖紙中提取數(shù)據(jù)信息解析DWG文件的方法。解析后的DWG文件將會給文件的入庫和數(shù)據(jù)提取帶來方便,減少文件不易轉換,文件過大等實際應用方面的缺陷。DWG文件數(shù)據(jù)信息入庫為工程概算提供條件,方便用戶進行模糊匹配,實現(xiàn)工程造價的預算。解析DWG文件將對研究CAD,實際操作應用等方面都能提供極大的幫助。將提高在海量的圖紙中發(fā)現(xiàn)知識的能力。這是一種嘗試,相信不懈的努力會有更大的成果。
        
        參考文獻
        [1]

      临潭县| 花莲市| 中西区| 翁源县| 项城市| 太原市| 增城市| 托克逊县| 和政县| 遂昌县| 射洪县| 汉阴县| 西盟| 临朐县| 瑞安市| 申扎县| 宝清县| 上犹县| 措美县| 商都县| 蕲春县| 永川市| 平果县| 瑞丽市| 保靖县| 清新县| 阜平县| 宝清县| 迁西县| 邯郸县| 白河县| 温泉县| 天峻县| 周口市| 沅江市| 喀喇沁旗| 吉水县| 巴塘县| 寻甸| 商水县| 阿勒泰市|