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