999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

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


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

主站蜘蛛池模板: h网址在线观看| 手机在线国产精品| 国产拍揄自揄精品视频网站| 无码福利日韩神码福利片| 又粗又硬又大又爽免费视频播放| 欧美精品1区| 久久精品无码国产一区二区三区| 色爽网免费视频| 2020国产精品视频| WWW丫丫国产成人精品| 国产成人综合欧美精品久久| 国产一区二区免费播放| 精品亚洲麻豆1区2区3区| 国产精品亚欧美一区二区 | 欧美精品v日韩精品v国产精品| 欧美日韩国产高清一区二区三区| 国产一国产一有一级毛片视频| 中文字幕久久精品波多野结| 国国产a国产片免费麻豆| 国产主播福利在线观看| 成人伊人色一区二区三区| 毛片三级在线观看| 欧美黄网在线| 青青草原国产免费av观看| 久久人人妻人人爽人人卡片av| 中文字幕在线永久在线视频2020| 国产日韩欧美一区二区三区在线| 久久精品无码一区二区国产区| 72种姿势欧美久久久大黄蕉| 亚洲丝袜第一页| 亚洲无码免费黄色网址| 久久91精品牛牛| 日本五区在线不卡精品| 国产成人综合网在线观看| 超碰aⅴ人人做人人爽欧美| 国产小视频在线高清播放 | 国产成人91精品| 欧美在线综合视频| 久久特级毛片| 久久伊伊香蕉综合精品| 国产XXXX做受性欧美88| 国产午夜福利在线小视频| 国产伦片中文免费观看| 色婷婷成人网| 久久综合五月婷婷| 欧美中日韩在线| 亚洲娇小与黑人巨大交| 国产好痛疼轻点好爽的视频| 国产丝袜啪啪| 亚洲AV电影不卡在线观看| 亚欧乱色视频网站大全| 综合色区亚洲熟妇在线| 亚洲国产成人久久精品软件| 国产一区二区三区夜色| 国产91色在线| 国产一级在线播放| 1769国产精品视频免费观看| 国产精品久久久久鬼色| 日韩在线观看网站| 永久免费无码日韩视频| 国产视频 第一页| 久久大香伊蕉在人线观看热2| 第九色区aⅴ天堂久久香| 国产成人亚洲无吗淙合青草| 国产91特黄特色A级毛片| 国产久操视频| 久久综合伊人77777| 国产精品一区二区久久精品无码| 欧美成人亚洲综合精品欧美激情| 午夜天堂视频| 人妻丰满熟妇啪啪| 亚洲水蜜桃久久综合网站| 亚洲国产日韩视频观看| 天堂va亚洲va欧美va国产 | 国产精品片在线观看手机版 | 伊人福利视频| 免费A级毛片无码无遮挡| 国产精品九九视频| 在线免费亚洲无码视频| 亚洲一区二区三区国产精华液| 久久6免费视频| 亚洲伊人久久精品影院|