閔 雅,盛步云,羅瑞平
(武漢理工大學 機電工程學院,湖北 武漢 430070)
在建筑行業(yè)中,建筑工程圖的三維重建相關(guān)理論研究和應(yīng)用系統(tǒng)開發(fā)一直是研究熱點[1-2]。
以建筑工程圖為研究對象,分析三維建模方式,工程圖稿的自動生成方法大多是針對DXF格式的建筑工程圖進行解析[3-5],這類方法側(cè)重局部細節(jié),未充分利用人工繪制時人為保留的區(qū)分特性,算法搜索空間過大。常見的工程圖多為DWG文件,為減少文件格式轉(zhuǎn)換的繁瑣操作,筆者選取DWG建筑工程圖進行數(shù)據(jù)提取。
國內(nèi)外學者在DWG文件信息提取方面進行了大量研究。文獻[6]介紹了AutoCAD層次對象結(jié)構(gòu);文獻[7-8]分析了DWG文件中各類常見實體對象和相關(guān)的點數(shù)據(jù)提取方式;文獻[9]應(yīng)用AutoCAD二次開發(fā)技術(shù)實現(xiàn)了工程圖標題欄信息的提取。對DWG文件的數(shù)據(jù)提取,相關(guān)AutoCAD的二次開發(fā)技術(shù)已經(jīng)非常成熟,在各種場景中均有大量應(yīng)用。但針對塊實體對象、分辨建筑工程圖有效實體對象,以及針對DWG文件的數(shù)據(jù)解析、過濾等相關(guān)研究相對要匱乏一點。筆者以DWG建筑工程圖作為研究對象,提出一種基于分塊思想的DWG建筑工程圖數(shù)據(jù)自動提取方法,旨在識別和提取DWG建筑工程圖的信息。首先,總結(jié)了AutoCAD層次對象結(jié)構(gòu),并將其與建筑工程圖實體對象之間進行了關(guān)聯(lián)。通過設(shè)定建筑工程圖區(qū)域U模型,歸納了繪制在不同區(qū)域的實體對象的屬性區(qū)別。然后,詳細闡述了DWG信息提取的具體方法,并描述了提取的具體數(shù)據(jù)類型和屬性關(guān)系。同時,通過改進平面掃描算法,實現(xiàn)了多實體對象的布爾運算[10-11],能有效獲得建筑樓板的輪廓數(shù)據(jù)。最后根據(jù)所獲得的信息進行三維草圖重繪,與二維工程圖繪圖輪廓相對比,證明本文數(shù)據(jù)提取方法可靠。
2000年AutoCAD應(yīng)用程序中有68個對象被公布。根據(jù)這些對象的從屬關(guān)系,文獻[6]歸納出具有4層樹狀結(jié)構(gòu)的Automation對象模型。在這個模型中,Application對象作為頂層對象,通過其屬性和方法可獲取AutoCAD應(yīng)用系統(tǒng)的本身特性(如版本信息)并執(zhí)行相關(guān)操作(如加載外部應(yīng)用程序文件);Preference對象和Document對象是第二層,Preference對象負責AutoCAD的個性化配置,Document對象則是當前打開的圖形文件,通過該對象可以實現(xiàn)對所有實體和非實體集合的訪問;Database數(shù)據(jù)庫對象作為第三層,主要是由符號表(Symbol Tables)和命名對象字典(Dictionaries)組成,第四層是塊表對象(BlockTable)。其模型結(jié)構(gòu)如圖1所示。
塊表下對象之間的關(guān)系如圖2所示。該對象下的塊表記錄(BlockTableRecord)是圖形文件中各類實體(Entity)的存儲位置,其中系統(tǒng)默認的特殊塊表記錄是模型空間(*Model_Space)(繪制在其中的實體對象在模型空間圖紙中顯示形狀)和圖紙空間(*Paper_Space)。繪圖時創(chuàng)建的各種實體類型(EntityType)會存入對應(yīng)繪制空間的特殊塊表記錄中,不會單獨生成塊表記錄;而自定義的塊(Block)不僅有EntityType對象,也會有單獨對應(yīng)的塊表記錄。根據(jù)設(shè)定的塊表記錄屬性,塊表記錄可以分為匿名塊表記錄和非匿名塊表記錄。非匿名塊表記錄多是繪圖時創(chuàng)建的各種圖形實體對象Entity集合,在*Model_Space窗口中可見;而匿名塊表記錄沒有名字,無法從其他對象引用獲得,在*Model_Space窗口可見但不可以編輯。
圖2 塊表下對象類型和相互關(guān)系
實體對象作為DWG數(shù)據(jù)獲取的主要研究對象,包含兩大類:塊參考(BlockReference)和實體類型(EntityType)。常見的實體類型有多線(Ployline)、多行(Mline)、面域(Region)、單行文本(DBText)、填充(Hatch)等。BlockTableRecord是由n個BlockReference和構(gòu)成塊的m個EntityType共同組成;BlockReference僅記錄Block的相關(guān)屬性(插入點、旋轉(zhuǎn)角度等), 不涉及圖形實體的點、線等屬性,而EntityType則是圖形點、線數(shù)據(jù)來源。實現(xiàn)圖紙信息的提取需要沿著模型的樹形結(jié)構(gòu)自上而下地對AutoCAD對象進行訪問。
將DWG建筑工程圖繪圖范圍簡記為U區(qū)域,其區(qū)域模型定義如式(1)所示。
U={Ue,Uf,UA}
(1)
式中,Ue、Uf和UA分別為建筑工程圖的解釋性區(qū)域、功能性區(qū)域和工程圖圖紙標準圖框。
(1)Uf是建筑工程圖的功能性區(qū)域,定義為:
Uf={Bff,Bfe}
(2)
式中:Bff為功能性區(qū)域功能性塊;Bfe為功能性區(qū)域解釋性塊。
功能性區(qū)域功能性塊指在建筑工程圖圖框內(nèi)繪制的基本構(gòu)件塊,是三維重建模型的二維草圖的數(shù)據(jù)來源。功能性區(qū)域解釋性塊指在建筑工程圖圖框內(nèi)繪制的非基本構(gòu)件塊,是三維重建中補充三維特征數(shù)據(jù)的來源。
(2)Ue是建筑工程圖的解釋性區(qū)域,定義為:
Ue={Bee,Bef}
(3)
式中:Bee為解釋性區(qū)域解釋性塊;Bef為解釋性區(qū)域功能性塊。
解釋性區(qū)域塊,構(gòu)件塊在建筑工程圖圖框外側(cè)單次或多次重復繪制,對建筑工程圖有細節(jié)補充和幫助人工辨識的作用。解釋性區(qū)域解釋性塊在Uf區(qū)域已經(jīng)繪制過。解釋性區(qū)域功能性塊沒有在Uf區(qū)域繪制過。
(3)UA是建筑工程圖的工程圖圖紙標準圖框,是區(qū)分Ue解釋性區(qū)域和Uf功能性區(qū)域的邊界線,定義為:
UA=Rect(P1,P2)
(4)
式中:P1為標準圖框的左下角頂點;P2為標準圖框的右上角頂點;Rect(P1,P2)表示標準圖框的最大外矩形。
Rect(P1,P2)={(x,y)|[(P1.x≤x≤P2.x)&
(y=P1.y|P2.y)]||[(P1.y≤y≤P2.y)&
(x=P1.x|P2.x)]
(5)
以鄭州某鋁模底圖為例(如圖3所示),繪制在標準圖框外的解釋性實體對象能直接被分割出來。這一結(jié)果對剔除圖層中部分不需要進行三維重建的實體對象有顯著效果。
圖3 建筑工程圖區(qū)域U模型示例
依據(jù)建筑工程圖區(qū)域模型U,從三維重建數(shù)據(jù)提取涉及的采集數(shù)據(jù)內(nèi)容、記錄方式和數(shù)據(jù)用途等方面進行分析,對建筑工程圖內(nèi)實體對象進行具體屬性統(tǒng)計,其歸納情況如表1所示。根據(jù)工程圖圖紙標準圖框公式可以剔除Ue解釋性區(qū)域?qū)嶓w對象,結(jié)合圖層分類,能提高獲取需要三維重建的實體對象準確率;根據(jù)是否是建筑構(gòu)件進行區(qū)分,可以實現(xiàn)Uf功能性區(qū)域的Bff功能性區(qū)域功能性塊和Bfe功能性區(qū)域解釋性塊的區(qū)分。
定義1:匿名塊。CAD(computer aided design)中命名為*UXX的圖塊。匿名塊是由動態(tài)創(chuàng)建和執(zhí)行過程代碼的PL/SQL(procedural language/structured query language)結(jié)果,其數(shù)據(jù)并不存儲在數(shù)據(jù)庫對象中。
定義2:重復塊。CAD中同一個塊表記錄對象下有多個塊參考對象的圖塊。重復塊具有唯一的塊名和實體對象,但有多個不同的塊屬性。
3.1.1 匿名塊處理
建筑工程圖以塊形式表達,針對DWG文件的數(shù)據(jù)提取,主要提取對象是存儲在塊表記錄(BlockTableRecord)中的實體(entity)。因此,信息并不存儲在數(shù)據(jù)庫的匿名塊應(yīng)提前被過濾,即過濾屬性IsAnonymous=false的btr。
3.1.2 重復塊處理
過濾掉匿名塊后,對btr對象中所有實體對象進行遍歷,分成塊參考br對象和實體類型obj對象,進行分類處理。如果存在多個br對象,則表示btr對象所代表的塊是重復塊。判斷塊插入點br.Position和工程圖圖框UA的相對位置關(guān)系,當塊插入點在工程圖圖框外側(cè)時,不用對br對象進行數(shù)據(jù)提取。否則,要對br對象進行數(shù)據(jù)提取。
3.2.1 BlockReference塊參考br對象數(shù)據(jù)提取
在過濾掉不需要進行數(shù)據(jù)提取的重復塊br對象后,對屬于同一個btr的其他br對象進行數(shù)據(jù)提取,將提取的信息集成為塊插入信息。塊插入屬性包括:圖塊名、圖層名、塊插入點、塊插入數(shù)量、是否重復塊標記和重復塊的塊插入點集合。
3.2.2 EntityType實體類型obj對象數(shù)據(jù)提取
遍歷同一個btr中獲得的obj對象,根據(jù)實體類型在三維重建中的作用,將其分為3類:圖元對象(Ployline、Region、Mline等),文本對象(DBtext)和填充對象(Hatch)。不同類型obj對象所需要提取的數(shù)據(jù)不一樣。公共屬性包括:對象ID、圖塊名、實體屬性和圖層名。圖元對象包括:Line端點集合。文本對象包括:文本旋轉(zhuǎn)角度、文本高度、文本內(nèi)容、文本寬度因子和文本插入點。填充對象包括:填充類型和填充插入點。
由于塊對象中創(chuàng)建的實體對象坐標是基于用戶坐標系的,但塊對象本身的坐標是基于世界坐標系的,因此塊對象需要通過坐標轉(zhuǎn)換才能被正確地組合到建筑工程圖的*modelspace中。
3.3.1 坐標系轉(zhuǎn)換
已知塊插入點P0(x,y,z) ,塊實體USC(user coordinate system)坐標矩陣為UBP(UCS_BlockPoint)=[x,y,z]T,將各塊的用戶坐標系USC轉(zhuǎn)換為世界坐標系WCS(world coordinate system),塊實體WCS坐標矩陣WBP(WCS_BlockPoint)其計算方法如式(6)所示。
(6)
3.3.2 數(shù)據(jù)圓整
實際建模注重點之間的相對距離特征。以墻塊最左下角頂點P1(x′,y′,z′)為自定義坐標系的原點,其計算方法如式(7)所示。各塊WBP坐標系再次進行坐標轉(zhuǎn)換,得到各塊CBP(cutomized block point)坐標矩陣,保留點之間的相對位置關(guān)系,完成數(shù)據(jù)圓整,其計算方法如式(8)所示。
(7)
(8)
3.4.1 同一直線上的線段合并算法
同一直線上兩兩有向線段的位置關(guān)系包括3種情況:重合、相交和不相交;進行合并時,結(jié)果分為4類。l1=(a1,a2),l2=(b1,b2)為在同一水平或垂直線上的兩條線段。同一直線上兩兩線段的位置關(guān)系和合并結(jié)果如圖4所示。
圖4 同一直線上兩兩線段的位置關(guān)系和合并結(jié)果
3.4.2 改進平面掃描算法
輸入:墻、梁、柱實體對象的閉合環(huán)Cir集合。
輸出:帶方向的閉合環(huán)集合。
Step1:對Cir中閉合環(huán)進行順時針標記,使組成環(huán)的line帶有方向。閉合環(huán)順時針標記,本文采取先找凸點A(閉合環(huán)中具有最小y坐標中的最小x坐標的端點),計算A點的兩條邊AB、AC的叉積AB×AC,如果叉積值大于0,ABC逆時針;小于0,ABC順時針。
Step2:根據(jù)線段傾斜率,line集合的線段分為水平線集合和垂直線集合。
Step3:水平線集合,根據(jù)y軸坐標進行分類,對具有相同y坐標的lines集合進行同一直線上的線段合并算法,合并結(jié)果如圖5(b_1)所示。
Step4:垂直線集合,根據(jù)x軸坐標進行分類,對具有相同x坐標的lines集合進行同一直線上的線段合并算法,合并結(jié)果如圖5(c_1)所示。
Step5:搜索閉合環(huán),合并結(jié)果如圖5(a_1)所示。尋找首尾端點相連的線段并保存,線段方向組成閉合環(huán)的順逆時針方向。
圖5(a)與圖5(a_1)是合并前后對象對比圖;圖5(b)與圖5(b_1)是水平線合并前后對比圖;圖5(c)與圖5(c_1)是垂直線合并前后對比圖。圖5(a_1)表示最后合并結(jié)果,其中深色閉合環(huán),方向為逆時針,表示樓板構(gòu)件。淺色閉合環(huán),方向為順時針,表示建筑最大外節(jié)點。
基于CJHJ和Visual Studio 2015的開發(fā)平臺,在AutoCAD2016中打開DWG文件,輸入行命令加載.DLL文件后,點擊插件,即可實現(xiàn)DWG文件數(shù)據(jù)提取。本文實驗的研究對象是DWG格式的某鋁模底圖。插件獲取數(shù)據(jù)結(jié)果如圖6所示,根據(jù)每一次選擇的塊名,可以查看其包含的圖層和線型信息。
圖6 操作界面獲取數(shù)據(jù)顯示
根據(jù)是否是真實建筑結(jié)構(gòu),將構(gòu)件分為建筑構(gòu)件和非建筑構(gòu)件2大類。該DWG建筑鋁模設(shè)計底圖有非匿名塊共計31個。采用重復塊處理后,篩掉無實際三維重建意義的塊對象16個,保留塊對象15個。針對這15個塊的實體數(shù)據(jù)提取,提取結(jié)果如表2所示,提取圖元對象1 723個、文本對象1 105個、填充對象217個。對所有數(shù)據(jù)進行點修正處理,以墻塊為例,同一端點在進行點修正前后的坐標對比結(jié)果如圖7所示。完成該DWG文件的數(shù)據(jù)提取全程耗時9.67 s。根據(jù)提取信息重繪建筑構(gòu)件草圖,其部分結(jié)果如圖8所示,與原始建筑構(gòu)建塊實體對象數(shù)量一致,形狀吻合。
表2 驗證實例的自動獲取塊信息統(tǒng)計
圖7 墻塊同一端點進行點修正前后坐標的對比圖
圖8 原DWG建筑塊與重繪建筑塊對比圖
筆者通過二次開發(fā),實現(xiàn)了實體對象數(shù)據(jù)提取并應(yīng)用于DWG建筑工程圖中,自動數(shù)據(jù)提取方法能極大提高工程圖三維重建效率,具有實際工程意義。