王志勃 ,畢艷茹
(1.江蘇省電子產(chǎn)品裝備與制造中心,江蘇 淮安 223003;2.淮安信息職業(yè)技術(shù)學(xué)院,江蘇 淮安 22300)
近年來,隨著計(jì)算機(jī)技術(shù)和信息技術(shù)的迅猛發(fā)展,建筑工程概預(yù)算領(lǐng)域中出現(xiàn)了大量的預(yù)算軟件,但這些軟件只是在人工讀圖并計(jì)算出工程量的基礎(chǔ)上完成定額套用、調(diào)整、費(fèi)用計(jì)算、報(bào)表編制等工作,工程量計(jì)算工作還停留在由預(yù)算師人工識別圖紙的階段。因此,如何實(shí)現(xiàn)工程量的自動(dòng)計(jì)算是目前建筑工程概預(yù)算領(lǐng)域研究的主要熱點(diǎn)之一,而建筑工程圖的自動(dòng)識別問題是制約工程量計(jì)算自動(dòng)化水平提高的主要瓶頸。本文模仿人工識圖的思路與方法,以建筑AutoCAD中墻體識別建模為例,設(shè)計(jì)出一套有效識別墻體、裁剪建模的算法,解決AutoCAD與工程量計(jì)算的接口問題,為實(shí)現(xiàn)建筑工程量計(jì)算的自動(dòng)化提供參考。
AutoCAD采用矢量數(shù)據(jù)格式文件DXF存儲(chǔ)圖形信息[1]。DXF是一種被多數(shù)圖形設(shè)計(jì)軟件接受的文件存儲(chǔ)格式,其實(shí)際上已經(jīng)成為一種行業(yè)標(biāo)準(zhǔn)。隨著AutoCAD的新版本不斷推出,對DXF文件格式作了進(jìn)一步調(diào)整,但基本框架保持不變。DXF文件按先后順序分為7大段,其中實(shí)體段是研究的主要目標(biāo),在實(shí)體段中保存著所有離散的 圖形圖元[1],這些實(shí)體有 Point、Line、Circle、Arc、Trace、Solid、Polyline、Vertex 和 3Dface 等 圖 形 圖 元 。每段由鍵值對組成,鍵(通常稱為組碼)表明其后的值的類型,使用這些鍵值對可以將AutoCAD圖形元素組織到由記錄組成的區(qū)域中。
本文在對建筑墻體識別之前,首先將DXF格式文件轉(zhuǎn)化為可讀性更好、被軟件普遍接受的XML格式文件[2-4]。DXF格式文件轉(zhuǎn)換成XML格式文件后的數(shù)據(jù)格式如圖1所示。從 DXF文件中讀取的信息還處于離散狀態(tài),之間沒有任何聯(lián)系,在進(jìn)行墻體識別、裁剪、建模之前要對這些離散數(shù)據(jù)進(jìn)行必要的預(yù)處理,使其滿足識別需要。在房屋建筑制圖統(tǒng)一標(biāo)準(zhǔn)[5]中,對建筑制圖中的各種圖形元素畫法都作出了非常具體的規(guī)定,其中墻體具有以下特點(diǎn)。
(1)任何一段墻體都構(gòu)成一個(gè)封閉的區(qū)域,并且構(gòu)成墻體的線段數(shù)要大于或等于4;
(2)每段墻體之間通過門、窗等建筑構(gòu)件相連接;
(3)通常按照建筑中墻體的外型,可以將墻體分為L型、T型、C型、+型、直線型和復(fù)雜的不規(guī)則類型等。建筑圖中墻體的常見形狀如圖2所示。
圖1 DXF轉(zhuǎn)換成XML后的數(shù)據(jù)格式
圖2 建筑圖中墻體的常見形狀
構(gòu)成墻體的主要圖元就是線段,墻體是由若干條線段形成的一個(gè)封閉區(qū)域。對于墻體的數(shù)據(jù)提取,可以采用深度優(yōu)先遍歷方法[6-7],在已讀出的大量線段中任意選取一條作為起始點(diǎn),根據(jù)線段兩端的坐標(biāo)去匹配下一條線段,直到回到起點(diǎn)。
根據(jù)以上特點(diǎn),設(shè)計(jì)用于在離散數(shù)據(jù)中識別提取墻體的算法1。
算法1:墻體識別提取算法
(1)?line?{linei|i≥1}。
(2)提取 l1起點(diǎn)坐標(biāo) S{x,y,z}。
(3)提取 l1終點(diǎn)坐標(biāo) P{x,y,z},與{linei|i≥1}中其他線段起點(diǎn)坐標(biāo)匹配。
(4)匹配成功,得到 l2,存儲(chǔ) l1,l1=l2。
(5)LOOP 重復(fù)步驟(3)~步驟(4),循環(huán)計(jì)數(shù)器 count
經(jīng)過算法1處理后,從眾多離散線段中識別、提取出墻體集合{walli|i≥1}?{linei|i≥1}。
在成功獲取墻體集合后,采用提取墻體中軸線的方法建立墻體數(shù)學(xué)模型,但對于形式復(fù)雜的墻體造型,若直接提取中軸線會(huì)造成建筑工程量計(jì)算的重復(fù),導(dǎo)致數(shù)據(jù)偏差,所以還要對墻體進(jìn)行進(jìn)一步的細(xì)分。本文提出了基于凹點(diǎn)多邊形墻體裁剪算法[8-11],將復(fù)雜墻體分割成相對簡單的墻體單元。
針對平面直角坐標(biāo)系中墻體構(gòu)造的多邊形,判斷凹點(diǎn)及采集算法如下。
算法2:凹點(diǎn)判斷與墻體裁剪算法
在建筑CAD中絕大多數(shù)墻體都是水平或鉛直的,同時(shí)存在有一定角度或弧形的墻體。對于水平和鉛直類墻體,可以使用比較法判斷凹點(diǎn);對于有一定角度的墻體,拐點(diǎn)可以采用斜率法進(jìn)行判斷;對于弧形墻體,將進(jìn)行特殊處理,不在本文討論范圍內(nèi)。
(1)對于水平鉛直墻體的凹點(diǎn)判斷與裁剪算法。
①從墻體集合 {walli|i≥1}中選取一組封閉墻體數(shù)據(jù),以x分量最小的點(diǎn)作為起點(diǎn)。
②嚴(yán)格按照順時(shí)針方向遍歷墻體線段。
定義:起始線段 li(i=1),起點(diǎn)坐標(biāo) s(xi,yi),終點(diǎn)坐標(biāo) e(xi,yi),順時(shí)針鄰接線段為 li+1,起點(diǎn)坐標(biāo) s(xi+1,yi+1),終點(diǎn)坐標(biāo) e(xi+1,yi+1),兩線段交點(diǎn)為P,即 e(xi,yi)=s(xi+1,yi+1)。
簡單來說,從起點(diǎn)開始,x、y坐標(biāo)變化滿足下面規(guī)律就是最簡墻體;否則,若存在凹點(diǎn),就延長線段交于墻體線段集合中的某條線段,并分離出一段墻體。
裁剪算法過程演示如圖3所示。在圖3(a)中,選出A為遍歷起點(diǎn)。遍歷過程為:AB(Y↑)→BC(X↑)→CD(Y↓)→DE(X↓)→EF(Y↑)→FG(X↓),在 EF-FG 線段交點(diǎn)處出現(xiàn)凹點(diǎn),記錄F點(diǎn)信息,向墻體集合中添加輔助線段 FX,并將 EF延長到 X,即用 EX代替 DF,并將CD、DE、EX、XC從墻體集合中分離出來形成單獨(dú)集合。重復(fù)以上算法,對剩余墻體集合繼續(xù)遍歷,任何一段復(fù)雜的墻體集合通過該算法都能分解成為最簡墻體,即得到墻體的最簡形式。
圖3 水平鉛直墻體剪裁過程
(2)使用斜率判定非水平鉛直墻體的凹點(diǎn)。
圖紙識別的最終目的是要建立起墻體的數(shù)學(xué)模型,并在此基礎(chǔ)上實(shí)現(xiàn)對建筑工程量的估算[12]。模型是全面反映墻體形狀和結(jié)構(gòu)的基礎(chǔ),并附加以必要的屬性。墻體的中軸線是確定墻體的核心數(shù)據(jù),利用分解后的簡單墻體中平行的兩長邊端點(diǎn)信息,可以確定中軸線兩端點(diǎn)坐標(biāo),并將該段墻體的厚度等設(shè)計(jì)參數(shù)一并存入中軸線數(shù)據(jù)結(jié)構(gòu)中,形成一個(gè)關(guān)于墻體中軸線鏈表。設(shè)墻體的兩條平行邊為l1和l2,起點(diǎn)為s,終點(diǎn)為e,則中軸線兩端點(diǎn)坐標(biāo)為:
可以用鏈表構(gòu)造其內(nèi)部存儲(chǔ)結(jié)構(gòu),鏈表的節(jié)點(diǎn)定義如圖4所示。
圖4 鏈表節(jié)點(diǎn)意義
有了以上軸線抽象模型,可以方便、準(zhǔn)確地計(jì)算墻體的長度,重構(gòu)墻體輪廓,方便后期建筑工作量提取[13]。
本文在對AutoCAD矢量數(shù)據(jù)文件大量研究的基礎(chǔ)上,以建筑工程中墻體為例,設(shè)計(jì)了墻體深度優(yōu)先識別提取算法;針對提取的復(fù)雜墻體,設(shè)計(jì)了基于凹點(diǎn)分割的墻體裁剪算法,并以墻體中軸線模型加屬性的方式重構(gòu)墻體,為工程量計(jì)算提供有效支持。在算法設(shè)計(jì)過程中注重與具體問題相結(jié)合,加入識別裁剪過程中的輔助因素,降低了通用算法的復(fù)雜度,使算法簡潔而高效。
參考資料
[1]Autodesk Inc.DXF Reference.http://www.autodesk.com/techpubs/autocad/acadr14/dxf/.
[2]王志勃.基于 DXF文件格式的讀取與 XML轉(zhuǎn)換[J].新學(xué)術(shù),2007(6):240-243.
[3]劉傳亮,陸建德.AutoCAD DXF文件格式與二次開發(fā)圖形軟件編程[J].微機(jī)發(fā)展,2004(9):101-104.
[4]舒飛.中文版 AutoCAD 2004二次開發(fā)標(biāo)準(zhǔn)教程[M].上海:上??茖W(xué)普及出版社,2004.
[5]GB/T 50001-2001.房屋建筑制圖統(tǒng)一標(biāo)準(zhǔn)[S].
[6]DOSCH P H,MASINI G.Reconstruction of the 3D structure of a building from the 2D Drawings of its Floors[J].Proceedings of the 5th International Conference on DocumentAnalysis and Recognition, Bangalore (India),1999:487-490.
[7]Yu Yuhong,SAMAL A.A system for recognizing a large class of engineering drawings[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,1997,19(8): 868-890.
[8]宋曉眉,程昌秀,周成虎.簡單多邊形頂點(diǎn)凹凸性判斷算法綜述[J].國土資源遙感,2011,90(3):25-30.
[9]陳炳發(fā),錢志峰,廖文和.簡單多邊形凸凹性自識別算法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2002(3):214-218.
[10]FEITO F, TORRES JC, URENA A.Orientation,simplicity, and inclusion testforplanarpolygons[J].Computers&Graphics,1995,19(4):595-600.
[11]DORI D,Liu Wenyin.Automated CAD conversion with the machine drawing under standing system:Concepts algorithm and performance[J].IEEE Transaction on System,Man and Cybernetics, part A: System and Humans, 1999,29(4):411-416.
[12]孫靜波,侯秀萍,鄭虹.建筑圖數(shù)字化存貯與工程量計(jì)算模型的實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2003(10):222-225.
[13]陸再林,張樹有,譚建榮.基于圖形理解的預(yù)算工程量提取算法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2002(5):442-446.
網(wǎng)絡(luò)安全與數(shù)據(jù)管理2014年13期