王 博,陳亞暉
(1.中國中鐵電氣化局集團(tuán)有限公司 設(shè)計(jì)研究院 ,北京 100166;2. 天津歐派集成家居有限公司,天津 301600 )
建筑信息模型(BIM,Building Information Modeling)技術(shù)以三維模型為載體,收集建設(shè)工程項(xiàng)目從籌劃到拆除的全生命周期內(nèi)的相關(guān)信息,為項(xiàng)目全生命周期內(nèi)的活動(dòng)提供信息基礎(chǔ),是建筑行業(yè)發(fā)展的必然趨勢(shì)[1-2]。BIM作為工程領(lǐng)域一種新的技術(shù)和工作管理方法[3-4],其實(shí)現(xiàn)需要一系列軟件支持,主要有:核心建模軟件(Revit等)、BIM分析軟件(Robot結(jié)構(gòu)分析等)、文件共享和協(xié)同軟件(Buzzsaw、Constructware)等[5]。
Revit是一款應(yīng)用較為廣泛的BIM建模軟件,它提供了較多的編程接口,具有良好的拓展性,程序員可以基于Revit進(jìn)行二次開發(fā),拓展其功能[6]?,F(xiàn)階段Revit建模主要還是通過“鏈接CAD”,將二維的CAD圖紙作為底圖進(jìn)行建模,二維圖紙的利用率并不高[7]。對(duì)于規(guī)模較大,構(gòu)件數(shù)量較多的工程,手動(dòng)建模效率低下,準(zhǔn)確性也無法保證[8]。因此,可以利用Revit良好的拓展性,對(duì)其進(jìn)行二次開發(fā),實(shí)現(xiàn)快速、精確建模。目前,市場(chǎng)上存在一些快速建模插件,但由于不同專業(yè)領(lǐng)域構(gòu)件的差別較大,針對(duì)某一專業(yè)的插件很難適用于其他專業(yè)。因此,有必要基于不同領(lǐng)域做有針對(duì)性的插件[9]。本文基于Revit的二次開發(fā),研究地鐵圍護(hù)樁自動(dòng)生成算法,實(shí)現(xiàn)地鐵圍護(hù)樁的快速布置。
圖1所示為地鐵圍護(hù)樁布置圖(局部),可以看出,樁的數(shù)量較多且沿樁定位線等間距分布,Revit建模過程中,可以通過 “復(fù)制”、“移動(dòng)”、“陣列”等功能來實(shí)現(xiàn)圍護(hù)樁的建模,但效率較低。因此,本文通過分析地鐵圍護(hù)樁分布規(guī)律,基于Revit進(jìn)行二次開發(fā),實(shí)現(xiàn)圍護(hù)樁的快速建模。
圖1 地鐵圍護(hù)樁布置圖(局部)
利用函數(shù)NewFamilyInstance(XYZ location,FamilySymbol symbol,Level level, StructuralType structuralType)創(chuàng)建樁族實(shí)例模型,其中,location為族實(shí)例放置點(diǎn)坐標(biāo),symbol為族類型,level為標(biāo)高,structuralType為結(jié)構(gòu)類型。由此可見,樁自動(dòng)生成的關(guān)鍵是計(jì)算樁定位點(diǎn)坐標(biāo),下文將重點(diǎn)介紹。
利用窗口(Form類)及一些控件:文本框(TextBox)、組合框(ComboBox)、按鈕(Button)等,按下述方法實(shí)現(xiàn)Revit數(shù)據(jù)與窗口的交互。
窗口類中定義UIDocument、FamilySymbol等字段,重載窗口類的構(gòu)造函數(shù)。這樣,窗口對(duì)象即可讀寫Revit當(dāng)前文檔數(shù)據(jù),外部命令接口也可獲得窗口的數(shù)據(jù)。部分代碼如下:
根據(jù)地鐵圍護(hù)樁排布規(guī)律以及構(gòu)造參數(shù)要求,設(shè)置如圖2所示的對(duì)話框窗口與Revit進(jìn)行數(shù)據(jù)交互,獲取生成樁的參數(shù)。
圖2 生成樁程序窗口
Revit可以讀取CAD文件并且CAD工程圖紙繪制的過程中會(huì)將不同的構(gòu)件分圖層表示。因此,可以通過相關(guān)算法(見參考文獻(xiàn)[10])識(shí)別以“鏈接CAD”的方式鏈接進(jìn)Revit中的CAD圖紙,獲得定位線并對(duì)其排序;判斷定位線走向,將其修正為沿順時(shí)針方向的有向線段;將順時(shí)針方向的樁定位線向外偏移樁直徑的一半并延長(zhǎng),使其相交,即得到圍護(hù)樁布置中心線;以圍護(hù)樁布置中心線為基線,計(jì)算出每根樁中心點(diǎn)并生成樁。
模型線(對(duì)應(yīng)ModelLine類)的GeometryCurve屬性是Line類型對(duì)象,表示直線的信息(起點(diǎn)、終點(diǎn)等)。將選中的模型線的直線信息存于鏈表lineList中,對(duì)lineList中儲(chǔ)存的元素進(jìn)行排序,使其成為連續(xù)有向的“多段線”,即第i+1個(gè)元素起點(diǎn)與第i個(gè)元素終點(diǎn)重合(i=1,2…)。實(shí)現(xiàn)的方法為:(1)定義新鏈表newList,取出lineList第1個(gè)元素L1添加到newList,找到終點(diǎn)與L1起點(diǎn)重合的元素,將其添加到newList頭部,循環(huán)找到L1前面的直線;(2)找到起點(diǎn)與L1終點(diǎn)重合的元素,將其添加到newList尾部,循環(huán)找到L1后面的直線;(3)最終得到的newList即為排序后的定位線。
將樁定位線向外偏移得到樁中心線的前提是樁定位線是沿順時(shí)針方向的有向線段,如圖3a所示。
對(duì)于有向多段線,取直線Li,其起點(diǎn)坐標(biāo)為(x起,y起),終點(diǎn)坐標(biāo)為 (x終,y終)。例如,將Li與x軸以及直線x=xa、x=xb圍成的四邊形面積記為Ai(可為負(fù)),則Ai=1/2(x終i-x起i)·(y終i+y起i)。將所有定位線對(duì)應(yīng)的Ai疊加,記為∑Ai,i=1,2,…,4。若∑Ai>0,則定位線為順時(shí)針,若∑Ai<0,則判定其為逆時(shí)針。以圖3a為例,圖3a為在第1象限的順時(shí)針有向4段線,L1的起點(diǎn)坐標(biāo)為(xa,yb),終點(diǎn)坐標(biāo)為(xb,yb),則:A1=1/2(xb-xa) · (yb+yb)=yb(xb-xa)>0,同理,A2=A4=0,A3=1/2(xa-xb) · (ya+ya)=ya(xa-xb)<0,∑Ai=yb(xb-xa)+ya(xa-xb)>0,滿足判定條件;圖3b顯示為逆時(shí)針有向4段線,∑Ai<0,滿足該判定條件。對(duì)于任意多邊形n,以上算法均適用,該判定條件均能滿足。
圖3 有向4段線
將上述逆時(shí)針排布的樁定位線鏈表中每條有向線段的方向反轉(zhuǎn),即得到按順時(shí)針排布的樁定位線,保證所有樁定位線是沿順時(shí)針方向排布。
將樁定位線向外偏移樁直徑的一半即可得到樁中心線。如圖4a所示,L1、L2、Li、Ln為沿順時(shí)針方向的樁定位線。(1)將每一根直線如Li沿逆時(shí)針方向旋轉(zhuǎn) 90°,即得到a→i;(2)將Li沿著a→偏移樁直徑的一半得到圖示的有向線段M1、M2、Mi、Mn,即為部分樁中心線;(3)通過方程組求兩相鄰直線的交點(diǎn),如圖4b所示的P1、P2、Pi、Pn,按順序連接上述交點(diǎn)即得到完整的樁中心線P1P2PiPn。
圖4 樁中心線
在得到樁中心線后,對(duì)于其中每條長(zhǎng)度為L(zhǎng)的線段,從起點(diǎn)開始按間距d(交互界面輸入?yún)?shù):樁間距)生成樁中心點(diǎn),若L/d為整數(shù),則得到L/d個(gè)樁中心點(diǎn),樁間距相等;若L/d不為整數(shù),則得到的樁中心點(diǎn)的個(gè)數(shù)為(L+d)/d的整數(shù)部分,最后一個(gè)中心點(diǎn)平分剩余長(zhǎng)度(詳見參考文獻(xiàn)[10])。通過上述方法便可獲取樁中心線對(duì)應(yīng)的樁中心點(diǎn)坐標(biāo)。
將上述樁中心點(diǎn)坐標(biāo)逐個(gè)傳遞到樁生成函數(shù)NewFamilyInstance,即可生成所有樁。
針對(duì)本文所述算法,利用Visual Studio 2015開發(fā)工具以及C#語言,基于.NET平臺(tái)編寫程序,程序流程如圖5所示。
圖5 程序流程圖
在Revit2018環(huán)境下運(yùn)行上述程序,導(dǎo)入工程圖紙進(jìn)行測(cè)試,生成地鐵圍護(hù)樁效果圖,如圖6所示。通過與Revit傳統(tǒng)建模方式對(duì)比發(fā)現(xiàn),利用本程序自動(dòng)生成樁建模速度較快,準(zhǔn)確性高,能夠滿足工程需求。
圖6 測(cè)試效果圖
綜上所述,本文所述算法以及程序可以提高建模效率,具有較強(qiáng)的實(shí)用性。本文僅針對(duì)線性排布的圍護(hù)樁提出其自動(dòng)生成算法,工程項(xiàng)目中還普遍存在有區(qū)域布置的群樁,另外對(duì)于樁基礎(chǔ)、承臺(tái)、樁鋼筋、冠梁等,其自動(dòng)生成算法是今后的研究方向。