潘杰
摘 要:本文主要闡述了Dynamo可視化編程在BIM(建筑信息模型中的應(yīng)用)。目前,針對(duì)快速且準(zhǔn)確建模是設(shè)計(jì)、施工等企業(yè)的一個(gè)首要需求。隨著Dynamo技術(shù)的引入,使得工程師能更為便捷地重新設(shè)計(jì)Revit軟件的功能,以便能實(shí)現(xiàn)快速且準(zhǔn)確建模的目標(biāo)。
關(guān)鍵詞:Dynamo;可視化編程; BIM; Revit; 預(yù)留孔洞
一、概述
(一)BIM建筑信息模型
BIM建筑信息模型是現(xiàn)今工程行業(yè)中的一個(gè)熱點(diǎn)話題,《GB/T51212-2016建筑信息模型應(yīng)用統(tǒng)一標(biāo)準(zhǔn)》對(duì)BIM的定義是[1]:在建設(shè)工程及設(shè)施全生命期內(nèi),對(duì)其物理和功能特性進(jìn)行數(shù)字化表達(dá),并依此設(shè)計(jì)、施工、運(yùn)營(yíng)的過(guò)程和結(jié)果的總稱。
從BIM的定義中不難看出,BIM最重要的特征是數(shù)字化,這也是與傳統(tǒng)CAD最明顯的區(qū)別之一。這里的數(shù)字化,指的是模型應(yīng)該包含數(shù)據(jù)信息,且這些數(shù)據(jù)信息在模型的不同階段,會(huì)被繼承和迭代更新,以此來(lái)支撐項(xiàng)目的設(shè)計(jì)、施工和運(yùn)營(yíng)。
由Autodesk公司出品的Revit系列軟件是當(dāng)下最廣為人知的BIM建模軟件之一,本文中的BIM管道模型,指的是用Revit軟件創(chuàng)建的管道模型。后文中涉及到模型圖元的概念、屬性等都是基于Revit語(yǔ)境下產(chǎn)生的。
(二)Dynamo可視化編程
BIM引領(lǐng)建筑行業(yè)的變革,Dynamo便是那火車頭[2]。自從2015年Dynamo橫空出世后,便受到了業(yè)內(nèi)的廣泛關(guān)注,現(xiàn)在已成為BIM技術(shù)中的關(guān)鍵力量之一。
Dynamo產(chǎn)品的設(shè)計(jì)初衷就是為了簡(jiǎn)化開(kāi)發(fā)過(guò)程。以往軟件的二次開(kāi)發(fā)(API)的缺點(diǎn)是高度復(fù)雜,周期長(zhǎng),靈活度不夠,但是Dynamo的問(wèn)世,提供了另一種軟件開(kāi)發(fā)的思路,通過(guò)組織連接節(jié)點(diǎn),形成一個(gè)可視化的,可執(zhí)行的程序,它使得軟件開(kāi)發(fā)變得不再高深莫測(cè)。
1、節(jié)點(diǎn)
節(jié)點(diǎn)是核心,每一個(gè)節(jié)點(diǎn)有各自的功能。節(jié)點(diǎn)有三部分構(gòu)成:
(1)節(jié)點(diǎn)名稱:描述的是該節(jié)點(diǎn)的基本功能,節(jié)點(diǎn)名稱是可以自定義的。
(2)輸入項(xiàng):傳入的參數(shù),例如節(jié)點(diǎn)Point.ByCoodinates中,需要傳入x/y/z三個(gè)數(shù)值。
(3)輸出項(xiàng):傳出的參數(shù),例如節(jié)點(diǎn)Point.ByCoodinates中,傳出一個(gè)坐標(biāo)。
由此不難看出,節(jié)點(diǎn)Point.ByCoodinates的功能是:傳入三個(gè)數(shù)值,傳出一個(gè)坐標(biāo)。
2、節(jié)點(diǎn)連接
節(jié)點(diǎn)與節(jié)點(diǎn)之間是通過(guò)導(dǎo)線連接,從而形成邏輯關(guān)系。節(jié)點(diǎn)意味著功能,導(dǎo)線連接意味著邏輯關(guān)系,兩者結(jié)合,構(gòu)成一個(gè)完整的程序。
二、Dynamo管道預(yù)留孔洞的實(shí)現(xiàn)過(guò)程
(一)需求背景
機(jī)電管道綜合協(xié)調(diào)是BIM設(shè)計(jì)、施工中的一個(gè)重要環(huán)節(jié)。管道協(xié)調(diào)的過(guò)程中,必然會(huì)涉及到預(yù)留孔洞的問(wèn)題。在實(shí)際項(xiàng)目中,機(jī)電管道的模型往往是較為復(fù)雜的,管道布置縱橫交錯(cuò),這在一定程度上增加了管道協(xié)調(diào)的難度。
具體到預(yù)留孔洞問(wèn)題,筆者總結(jié)了目前Revit使用上的兩方面痛點(diǎn)。第一,Revit自帶的開(kāi)孔功能,需要人工繪制輪廓或者人工插入孔洞模型,在面對(duì)大批量的預(yù)留孔洞問(wèn)題時(shí),人工操作將會(huì)大大地降低工作效率。
第二個(gè)痛點(diǎn)是Revit開(kāi)孔和放置套管模型是彼此分開(kāi)的步驟,這意味著必須在結(jié)束開(kāi)孔任務(wù)后,才能進(jìn)行后續(xù)布置套管模型的任務(wù)。如果在開(kāi)孔操作結(jié)束的同時(shí),在相應(yīng)位置自動(dòng)生成套管模型,那么必定會(huì)顯著地提高工作效率!
(二)核心思路
Dynamo可視化編程實(shí)現(xiàn)管道快速開(kāi)孔及生成套管,大致可以分為以下三個(gè)過(guò)程:
1、讀取模型數(shù)據(jù)
具體來(lái)說(shuō),首先需要讀取管道的通徑尺寸和外徑尺寸。其次,需要讀取樓板或者墻體等模型的結(jié)構(gòu)厚度尺寸,以保證后續(xù)孔洞模型最終能完全貫穿樓板或者墻體。
2、求得管道與樓板、墻體等干涉位置
給定模型插入點(diǎn)的坐標(biāo),是放置孔洞模型和套管模型的一個(gè)必要條件。因此,需要求得管道的中心線與樓板或墻體表面發(fā)生干涉的位置坐標(biāo),此坐標(biāo)即是孔洞模型和套管模型的插入點(diǎn)坐標(biāo)。
3、生成套管模型及開(kāi)孔
生成套管模型,并且需要對(duì)其尺寸參數(shù)進(jìn)行賦值。根據(jù)上述兩個(gè)過(guò)程,已經(jīng)獲取了樓板或墻體的結(jié)構(gòu)厚度,即可以確定出套管模型的深度尺寸。對(duì)于套管的內(nèi)外徑尺寸,可以根據(jù)管道的外徑尺寸來(lái)確定。最后,需要在樓板或墻體上實(shí)現(xiàn)開(kāi)孔。
(三)Dynamo實(shí)現(xiàn)方法
1、選擇模型
Dynamo有兩種常用節(jié)點(diǎn)可以實(shí)現(xiàn)拾取Revit系統(tǒng)中的模型,分別是:SelectModelElement和SelectModelElements。兩者的區(qū)別在于,前者只能選取單個(gè)模型,后者能批量選取多個(gè)模型。本文中,SelectModelElements更符合實(shí)際需要。
2、讀取模型屬性
首先,需要明確Revit屬性是分成兩類:實(shí)例屬性與類型屬性。Dynamo讀取這兩類屬性所用的方法是不同的。
實(shí)例屬性只能影響單個(gè)模型圖元。例如,套管的標(biāo)高屬性,顯然,每個(gè)單獨(dú)套管模型,可以有各自不同的標(biāo)高,修改一個(gè)套管模型的標(biāo)高,不會(huì)影響到其他套管的標(biāo)高。Dynamo讀取Revit的實(shí)例屬性,需要用到兩個(gè)核心節(jié)點(diǎn):Parameter.ParameterByName和Parameter.Value。
管道的通徑尺寸、外徑尺寸皆屬于實(shí)例參數(shù)范疇,因此用上述兩個(gè)節(jié)點(diǎn)即可讀取參數(shù)。
類型屬性與實(shí)例屬性不同,類型屬性是同一類型圖元所共有的屬性。例如,同一種類型的套管模型,其材質(zhì)屬性即為類型屬性。更改任意一個(gè)套管的材質(zhì),其他同類別套管的材質(zhì)會(huì)同步更改。Dynamo讀取Revit的類型屬性,需要多用兩個(gè)節(jié)點(diǎn):Family.ByName,F(xiàn)amily.Types。
3、求得管道模型與樓板、墻體干涉的坐標(biāo)
第一步,得到管道與樓板、墻體表面相交的幾何圖形。需要用到Dynamo的節(jié)點(diǎn)是Geometry.IntersectAll。它有兩個(gè)輸入項(xiàng),分別為幾何圖形(geometry)和實(shí)體(solids),輸出項(xiàng)為幾何圖形(geometry)。
第二步,將相交的幾何圖形(geometry)轉(zhuǎn)換為輪廓線,進(jìn)而求得輪廓線的中心坐標(biāo)。在此用到的節(jié)點(diǎn)是Curve.StartPoint,該節(jié)點(diǎn)的輸入項(xiàng)是輪廓(Curve),輸出項(xiàng)為坐標(biāo)(Point)。
4、生成模型的方法
本文中套管模型是族模型,這里重點(diǎn)探討Dynamo生成族模型的方法。
第一步,在Revit中插入族,使用FamilyInstance.ByFace節(jié)點(diǎn)。該節(jié)點(diǎn)有四個(gè)輸入項(xiàng):
(1)族類型(Familytype)是套管的族類型;(2)放置平面(Face)是樓板或者墻體的表面;(3)放置點(diǎn)(Location)是管道截面與樓板表面或墻體表面相交的幾何圖形的中心坐標(biāo)(Point);(4)參考向量(Referencedirection),在本文中,套管模型的放置方向應(yīng)與樓板或墻體的平面垂直,通過(guò)兩點(diǎn)坐標(biāo)可確定方向向量。
第二步,族模型的屬性賦值,使用Element.SetParameterByName節(jié)點(diǎn)。這里,根據(jù)管道模型的尺寸,自動(dòng)對(duì)套管模型進(jìn)行屬性賦值。
第三步,在樓板或墻體上開(kāi)孔。這里用到Dynamo中一個(gè)特殊節(jié)點(diǎn):Python節(jié)點(diǎn),它是通過(guò)代碼來(lái)實(shí)現(xiàn)更為復(fù)雜的操作,這極大地豐富了Dynamo的適用性。筆者調(diào)用AddInstanceVoidCut方法,實(shí)現(xiàn)樓板或墻體開(kāi)洞的功能。
以上是Dynamo管道預(yù)留孔洞實(shí)現(xiàn)的主要過(guò)程。在本次開(kāi)發(fā)中,還有一些其他的功能,例如,用戶可以決定是否需要在開(kāi)孔的同時(shí)生成套管模型,由于受篇幅限制的影響,不做展開(kāi)。三維測(cè)試的效果圖以及源代碼見(jiàn)下圖。
三、結(jié)語(yǔ)
對(duì)于BIM管道模型預(yù)留孔洞,筆者嘗試使用了Dynamo編程手段對(duì)其進(jìn)行開(kāi)發(fā)。相比于傳統(tǒng)的軟件API開(kāi)發(fā),Dynamo具有的最大特點(diǎn)是可視化,可視化指的是程序邏輯的可視,用戶只需理清邏輯關(guān)系,找到合適的節(jié)點(diǎn),就能實(shí)現(xiàn)開(kāi)發(fā)目標(biāo)。
Dynamo擁有豐富的節(jié)點(diǎn)庫(kù),涵蓋了軟件開(kāi)發(fā)的基礎(chǔ)功能。此外,它還支持使用Python語(yǔ)言來(lái)自定義節(jié)點(diǎn),以此實(shí)現(xiàn)復(fù)雜功能。Dynamo的缺點(diǎn)是程序運(yùn)行的速度較慢,尤其是在執(zhí)行復(fù)雜程序的情況下,會(huì)出現(xiàn)嚴(yán)重卡頓的現(xiàn)象。筆者認(rèn)為,Dynamo更適合用于小型輕量化的開(kāi)發(fā)。
參考文獻(xiàn):
[1]GB/T51212-2016,建筑信息模型應(yīng)用統(tǒng)一標(biāo)準(zhǔn)[s].北京:中國(guó)建筑工業(yè)出版社,2016.
[2]羅嘉祥,宋珊,田宏鈞.AutodeskRevit煉金術(shù)-Dynamo基礎(chǔ)實(shí)戰(zhàn)教程[M].上海:同濟(jì)大學(xué)出版社,2017.