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