亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        DWG文檔格式化存儲(chǔ)方法研究

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


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

        开心五月激情综合婷婷| 人妻av午夜综合福利视频| 亚洲www视频| 91色婷婷成人精品亚洲| 99久久婷婷国产精品综合| 人妻少妇69久久中文字幕| 国产在线一区二区三区四区| 亚洲av综合永久无码精品天堂| 欧美做受视频播放| 国产精品国产三级国产三不| 97精品熟女少妇一区二区三区| 亚洲国产精品无码久久久| 亚洲熟妇av日韩熟妇在线| 中出内射颜射骚妇| 亚洲av高清在线观看三区| 蜜桃av夺取一区二区三区| 中文字幕精品亚洲字幕| 香港台湾经典三级a视频| 中文人妻av久久人妻18| 国产99r视频精品免费观看| 久久亚洲AV成人一二三区| 91热视频在线观看| 日本加勒比一区二区在线观看| 日韩极品在线观看视频| 日本一区二区三区高清在线视频 | 精品九九人人做人人爱| 一本一道av中文字幕无码| 久久97精品久久久久久久不卡| 久久AV中文综合一区二区| 一区二区三区黄色一级片| 国产自国产自愉自愉免费24区 | 国产97色在线 | 国产| 免费久久人人爽人人爽av| 最新国产拍偷乱偷精品| 黄 色 成 年 人 网 站免费| 人妻少妇被粗大爽视频| 麻豆tv入口在线看| 老熟妻内射精品一区| 国产精品久久久久亚洲| 日韩精品一区二区在线视 | 欧美综合自拍亚洲综合图片区 |