劉祾頠,彭先寶,張應(yīng)波
(中鐵第四勘察設(shè)計(jì)院集團(tuán)有限公司,湖北 武漢 430063)
2002年美國(guó)AutoDesk公司發(fā)布了BIM(Building Information Modeling)白皮書(shū),將BIM作為其主要的戰(zhàn)略方向,率先啟動(dòng)了BIM工程化應(yīng)用進(jìn)程[1-2]。此后BIM在全球范圍內(nèi)得到了業(yè)界的廣泛認(rèn)可,并迅速在行業(yè)內(nèi)開(kāi)始大規(guī)模應(yīng)用[3-6]。BIM可以實(shí)現(xiàn)項(xiàng)目全生命周期的信息集成,將項(xiàng)目各個(gè)階段有效銜接起來(lái),對(duì)提升效率、節(jié)省資源和降低成本作用明顯[7]。
軌道BIM設(shè)計(jì)是鐵路BIM設(shè)計(jì)的重要組成部分,當(dāng)前軌道BIM建模主要依靠設(shè)計(jì)人員利用BIM軟件(如Revit、Open Rail Designer等)手工完成,過(guò)程中需頻繁進(jìn)行拾取、移動(dòng)、旋轉(zhuǎn)、拉伸、放樣、融合等操作[8],機(jī)械重復(fù)性工作多,影響設(shè)計(jì)效率。Dynamo是一個(gè)基于Revit的可視化編程平臺(tái),滿足個(gè)性化需求,實(shí)現(xiàn)批量建模和自動(dòng)化建模,從而提升BIM設(shè)計(jì)效率。Dynamo只需少量編程就可以快速實(shí)現(xiàn)用戶的個(gè)性化需求,上市后便得到業(yè)界的普遍關(guān)注[9-12]。針對(duì)軌道BIM設(shè)計(jì)特點(diǎn),探索基于Dynamo的軌道建模的原理與方法。
Dynamo是一款基于Revit的參數(shù)化設(shè)計(jì)輔助工具,除了幾何建模外,Dynamo還可以高效處理建筑信息模型中的信息,與Revit配合使用,可以大大提高BIM建模效率。Dynamo采用“所見(jiàn)即所得”的編程模式,傳統(tǒng)編程的代碼塊在Dynamo中由可視化節(jié)點(diǎn)代替。節(jié)點(diǎn)是Dynamo程序的基本組成單元,它可以進(jìn)行數(shù)據(jù)處理,完成某項(xiàng)功能。用戶只需要像搭積木一樣按照自己的需求將節(jié)點(diǎn)拖拽到編程窗口,并用流程線將節(jié)點(diǎn)連接起來(lái),就可以實(shí)現(xiàn)特定功能。
Dynamo節(jié)點(diǎn)由輸入接口和輸出接口兩部分組成(見(jiàn)圖1),通過(guò)輸入接口指定要處理的數(shù)據(jù),通過(guò)輸出接口獲取處理結(jié)果。Dynamo內(nèi)置許多常用的節(jié)點(diǎn)形成節(jié)點(diǎn)庫(kù),如構(gòu)建點(diǎn)、構(gòu)建曲線、構(gòu)建面、拉伸操作、放樣操作、文件讀寫等。除此之外,Dynamo還允許用戶通過(guò)Python編寫自定義節(jié)點(diǎn)并加入到現(xiàn)有節(jié)點(diǎn)庫(kù),讓用戶實(shí)現(xiàn)一些特殊需求。
圖1 Dynamo節(jié)點(diǎn)
鐵路有砟軌道模型由鋼軌、軌枕及扣件、道床等3個(gè)部分構(gòu)成。鋼軌主要有50、60、75 kg/m等型號(hào),每種型號(hào)的鋼軌其斷面形狀和技術(shù)指標(biāo)均有所差別。軌枕主要有Ⅰ類木枕、Ⅱ類木枕、Ⅰ型混凝土枕、Ⅱ型混凝土枕和Ⅲ型混凝土枕等類型,每種類型的軌枕尺寸均不同。道床的形狀則與線路等級(jí)、速度、路基等因素相關(guān),其幾何特征主要由頂面寬度、厚度、邊坡坡度等參數(shù)決定。
利用Dynamo進(jìn)行有砟軌道BIM設(shè)計(jì)的流程如下:
(1)基礎(chǔ)數(shù)據(jù)準(zhǔn)備。從線路設(shè)計(jì)軟件導(dǎo)出線路中線坐標(biāo),利用Revit建立鋼軌斷面輪廓族、軌枕族、扣件族。
(2)構(gòu)建線路中線。在Dynamo中讀取線路中線坐標(biāo)并建立線路中線。
(3)構(gòu)建鋼軌模型。利用Dynamo對(duì)鋼軌斷面進(jìn)行放樣構(gòu)建鋼軌模型。
(4)放置軌枕及扣件。利用Dynamo將軌枕族放置到線路指定位置。
(5)構(gòu)建道床模型。根據(jù)道床參數(shù),分段建立道床模型并放置到線路指定位置。
(6)創(chuàng)建屬性并賦值。根據(jù)需要為模型定義特征屬性并輸入屬性信息。
(7)模型裝配與集成。
由于Revit本身不具備緩和曲線表達(dá)能力,在Revit中構(gòu)建線路曲線時(shí),主要采用以直代曲來(lái)實(shí)現(xiàn),即將曲線劃分為若干較短的直線,將這些直線首尾相連構(gòu)成曲線。首先需要借助二維CAD,將線路中線按固定點(diǎn)距將線路坐標(biāo)導(dǎo)出到Excel。借助Dynamo中的Data.ImportExcel節(jié)點(diǎn),可以快速地將Excel中的數(shù)據(jù)導(dǎo)入到Dynamo中。
當(dāng)模型坐標(biāo)的數(shù)值較大時(shí),Revit模型會(huì)發(fā)生嚴(yán)重的變形,Revit給出的方案是設(shè)定項(xiàng)目基點(diǎn),通過(guò)使用相對(duì)坐標(biāo)使坐標(biāo)值變小。一般項(xiàng)目基點(diǎn)會(huì)設(shè)置在項(xiàng)目中心位置,建模時(shí)使用的坐標(biāo)都是基于基點(diǎn)的相對(duì)坐標(biāo)。因此,構(gòu)建線路曲線時(shí)需要對(duì)讀入的坐標(biāo)值進(jìn)行處理(減去項(xiàng)目基點(diǎn)),讓坐標(biāo)變成較小的相對(duì)坐標(biāo)。用讀取的坐標(biāo)創(chuàng)建點(diǎn),并將點(diǎn)放到樣條曲線中,這樣就構(gòu)建完成了線路曲線,此后的建模都需要利用該曲線進(jìn)行相關(guān)計(jì)算。
建模中無(wú)論是輪廓放樣,還是放置族實(shí)例,都涉及曲線某點(diǎn)處方向的計(jì)算。以鋼軌建模為例,鋼軌建模采用的是利用鋼軌斷面進(jìn)行分段放樣的方法,即將鋼軌斷面輪廓沿線放置,然后將前后輪廓連接起來(lái)形成三維實(shí)體。斷面輪廓的放置要求與線路中線垂直,否則放樣出來(lái)的模型會(huì)出現(xiàn)變形,這需要計(jì)算放置點(diǎn)處線路的平面方位角和豎向傾角。Dynamo中的Curve.Coordinate System At Segment Length節(jié)點(diǎn)可以用于計(jì)算線路上某點(diǎn)處的局部坐標(biāo)系統(tǒng),該坐標(biāo)系統(tǒng)的X軸指向線路法向,Y軸指向線路切向,Z軸符合右手定則。斷面放置后與線路中線垂直,也就是要與局部坐標(biāo)系統(tǒng)的Y軸垂直。假設(shè)斷面輪廓族建立在XZ平面上,可按以下步驟對(duì)斷面進(jìn)行旋轉(zhuǎn)。
(1)獲取局部坐標(biāo)系X軸向量XVector,將XVector的Z值設(shè)置為0,使X軸向量變?yōu)樗矫娴耐队跋蛄俊?/p>
(2)利用Math.Atan2節(jié)點(diǎn)計(jì)算世界坐標(biāo)系的X軸與局部坐標(biāo)系X軸水平投影的角度XAngle。
(3)利用Geometry.Rotate節(jié)點(diǎn)將斷面繞世界坐標(biāo)系的Z軸旋轉(zhuǎn)XAngle,此時(shí)斷面與線路水平投影垂直。
(4)獲取局部坐標(biāo)系Y軸向量YVector,將YVector的Z值設(shè)置為0,使Y軸向量變?yōu)樗矫娴耐队跋蛄俊?/p>
(5)利用Math.Atan2節(jié)點(diǎn)計(jì)算世界坐標(biāo)系的Y軸與局部坐標(biāo)系Y軸水平投影的角度YAngle。
(6)利用Geometry.Rotate節(jié)點(diǎn)繞局部坐標(biāo)系X軸水平投影旋轉(zhuǎn)YAngle,此時(shí)斷面與線路中線垂直,至此旋轉(zhuǎn)完成。
鋼軌建模時(shí)首先需要將事先建立的鋼軌斷面族加載到Revit項(xiàng)目中,然后利用Curve.PointAtSegment?Length節(jié)點(diǎn)計(jì)算斷面放置位置,然后利用Dynamo的FamilyInstance.ByPoint節(jié)點(diǎn)讀入斷面,并根據(jù)3.2節(jié)所述方法調(diào)整斷面方向,最后將斷面移動(dòng)到線路指定點(diǎn)處。完成斷面放置后即可利用Solid.BySweep節(jié)點(diǎn)來(lái)創(chuàng)建鋼軌實(shí)體,創(chuàng)建的實(shí)體此時(shí)還只是處于內(nèi)存中,需要借助Spring.FamilyInstance.ByGeometry將創(chuàng)建的鋼軌實(shí)體放入到Revit文件中(見(jiàn)圖2)。
圖2 將鋼軌模型放入Revit
軌枕建模與鋼軌建模類似,只需將事先建立的軌枕實(shí)體族放置到線路處指定點(diǎn)并調(diào)整方向角度即可,由于放置的軌枕數(shù)量較多,建模所需要的時(shí)間會(huì)比軌道建模略長(zhǎng)。鋼軌及軌枕建模效果見(jiàn)圖3。
圖3 鋼軌及軌枕建模效果
由于道床尺寸是根據(jù)線路特征確定,采用參數(shù)化建模方法來(lái)創(chuàng)建道床模型。對(duì)于道床來(lái)說(shuō),主要的參數(shù)有頂寬、堆高、邊坡坡度、厚度等。為了能精確的控制道床位置,還需要軌道高度、軌道墊板厚度、軌枕軌下厚度、軌枕埋入深度等參數(shù),道床頂面高程Zs由下式確定:
式中:Zr為軌頂標(biāo)高,可從線路中線獲??;Hr為鋼軌高度;Hc為墊板厚度;Hsr為軌枕軌下厚度;Hsd為軌枕埋入道砟的深度。
根據(jù)頂寬、堆高、邊坡坡度、厚度等參數(shù),利用Dynamo創(chuàng)建道床輪廓,并進(jìn)行拉伸以創(chuàng)建道床實(shí)體族,并利用軌枕建模的思路將建立的道床實(shí)體族放置到指定位置。道床實(shí)體族構(gòu)建效果見(jiàn)圖4。
圖4 道床實(shí)體族構(gòu)建效果
由于BIM模型的幾何特征較為精細(xì),使得BIM建模工具對(duì)計(jì)算機(jī)硬件資源的消耗較大,過(guò)多的硬件消耗會(huì)極大地影響運(yùn)行效率。盡量減少模型文件的大小,建模時(shí)通常將鋼軌、軌枕及扣件、道床模型分別輸出到不同的rvt文件,必要時(shí)還需要對(duì)線路進(jìn)行分段處理。待所有構(gòu)配件完成后,再進(jìn)行模型統(tǒng)一裝配。Revit中提供了鏈接功能,可以將多個(gè)rvt文件鏈接到一起,從而將不同的模型組裝起來(lái),實(shí)現(xiàn)模型的集成(見(jiàn)圖5)。
圖5 Revit集成效果
Revit對(duì)于大體量模型的承載能力較弱,而項(xiàng)目中的軌道有時(shí)會(huì)達(dá)到數(shù)十甚至上百公里,集成后Revit會(huì)出現(xiàn)嚴(yán)重卡頓。另外,項(xiàng)目集成通常還涉及鐵路工程的其他專業(yè),有時(shí)還需要加入地理信息模型,此時(shí)對(duì)集成軟件的要求更高,AutoDesk給出的大體量模型集成方案是采用Navisworks軟件(見(jiàn)圖6)。
圖6 Navisworks集成效果
集成的另一種方案是采用GIS軟件,相對(duì)而言,GIS軟件對(duì)大體量數(shù)據(jù)的承載能力要比BIM軟件強(qiáng)很多,因此對(duì)于全專業(yè)的BIM集成通常會(huì)采用GIS軟件來(lái)完成,除專業(yè)的BIM設(shè)計(jì)模型外,還加入了傾斜攝影模型,集成后場(chǎng)景運(yùn)行流暢,效果良好(見(jiàn)圖7)。
圖7 GIS集成效果
BIM建模過(guò)程中有許多機(jī)械重復(fù)性的工作,手工完成效率較低,二次開(kāi)發(fā)代價(jià)大,Dynamo可視化編程為完成此類工作提供了一條良好途徑。不需要大量煩瑣的程序開(kāi)發(fā),就可以讓計(jì)算機(jī)來(lái)完成一系列建模任務(wù)?;贒ynamo可視化編程技術(shù)進(jìn)行BIM設(shè)計(jì),可以大大地提高建模速度,同時(shí)可以通過(guò)程序精準(zhǔn)控制模型的位置和方向,建模精度高。
但Dynamo在解決復(fù)雜問(wèn)題方面的能力有限,一方面,內(nèi)置節(jié)點(diǎn)不夠豐富,對(duì)于一些問(wèn)題需要自己編寫自定義節(jié)點(diǎn),此過(guò)程較為耗時(shí),另一方面,當(dāng)Dynamo程序過(guò)于復(fù)雜后,程序的運(yùn)行效率顯著下降,特別是涉及復(fù)雜的幾何布爾運(yùn)算時(shí),此問(wèn)題更加突出。因此,對(duì)于復(fù)雜的建模工作,目前可行的辦法還是有針對(duì)性地進(jìn)行二次開(kāi)發(fā)。