?

基于Dynamo可視化編程技術在BIM管線預留孔洞中的應用

2020-10-20 05:22潘杰
磚瓦世界·下半月 2020年2期

潘杰

摘 要:本文主要闡述了Dynamo可視化編程在BIM(建筑信息模型中的應用)。目前,針對快速且準確建模是設計、施工等企業的一個首要需求。隨著Dynamo技術的引入,使得工程師能更為便捷地重新設計Revit軟件的功能,以便能實現快速且準確建模的目標。

關鍵詞:Dynamo;可視化編程; BIM; Revit; 預留孔洞

一、概述

(一)BIM建筑信息模型

BIM建筑信息模型是現今工程行業中的一個熱點話題,《GB/T51212-2016建筑信息模型應用統一標準》對BIM的定義是[1]:在建設工程及設施全生命期內,對其物理和功能特性進行數字化表達,并依此設計、施工、運營的過程和結果的總稱。

從BIM的定義中不難看出,BIM最重要的特征是數字化,這也是與傳統CAD最明顯的區別之一。這里的數字化,指的是模型應該包含數據信息,且這些數據信息在模型的不同階段,會被繼承和迭代更新,以此來支撐項目的設計、施工和運營。

由Autodesk公司出品的Revit系列軟件是當下最廣為人知的BIM建模軟件之一,本文中的BIM管道模型,指的是用Revit軟件創建的管道模型。后文中涉及到模型圖元的概念、屬性等都是基于Revit語境下產生的。

(二)Dynamo可視化編程

BIM引領建筑行業的變革,Dynamo便是那火車頭[2]。自從2015年Dynamo橫空出世后,便受到了業內的廣泛關注,現在已成為BIM技術中的關鍵力量之一。

Dynamo產品的設計初衷就是為了簡化開發過程。以往軟件的二次開發(API)的缺點是高度復雜,周期長,靈活度不夠,但是Dynamo的問世,提供了另一種軟件開發的思路,通過組織連接節點,形成一個可視化的,可執行的程序,它使得軟件開發變得不再高深莫測。

1、節點

節點是核心,每一個節點有各自的功能。節點有三部分構成:

(1)節點名稱:描述的是該節點的基本功能,節點名稱是可以自定義的。

(2)輸入項:傳入的參數,例如節點Point.ByCoodinates中,需要傳入x/y/z三個數值。

(3)輸出項:傳出的參數,例如節點Point.ByCoodinates中,傳出一個坐標。

由此不難看出,節點Point.ByCoodinates的功能是:傳入三個數值,傳出一個坐標。

2、節點連接

節點與節點之間是通過導線連接,從而形成邏輯關系。節點意味著功能,導線連接意味著邏輯關系,兩者結合,構成一個完整的程序。

二、Dynamo管道預留孔洞的實現過程

(一)需求背景

機電管道綜合協調是BIM設計、施工中的一個重要環節。管道協調的過程中,必然會涉及到預留孔洞的問題。在實際項目中,機電管道的模型往往是較為復雜的,管道布置縱橫交錯,這在一定程度上增加了管道協調的難度。

具體到預留孔洞問題,筆者總結了目前Revit使用上的兩方面痛點。第一,Revit自帶的開孔功能,需要人工繪制輪廓或者人工插入孔洞模型,在面對大批量的預留孔洞問題時,人工操作將會大大地降低工作效率。

第二個痛點是Revit開孔和放置套管模型是彼此分開的步驟,這意味著必須在結束開孔任務后,才能進行后續布置套管模型的任務。如果在開孔操作結束的同時,在相應位置自動生成套管模型,那么必定會顯著地提高工作效率!

(二)核心思路

Dynamo可視化編程實現管道快速開孔及生成套管,大致可以分為以下三個過程:

1、讀取模型數據

具體來說,首先需要讀取管道的通徑尺寸和外徑尺寸。其次,需要讀取樓板或者墻體等模型的結構厚度尺寸,以保證后續孔洞模型最終能完全貫穿樓板或者墻體。

2、求得管道與樓板、墻體等干涉位置

給定模型插入點的坐標,是放置孔洞模型和套管模型的一個必要條件。因此,需要求得管道的中心線與樓板或墻體表面發生干涉的位置坐標,此坐標即是孔洞模型和套管模型的插入點坐標。

3、生成套管模型及開孔

生成套管模型,并且需要對其尺寸參數進行賦值。根據上述兩個過程,已經獲取了樓板或墻體的結構厚度,即可以確定出套管模型的深度尺寸。對于套管的內外徑尺寸,可以根據管道的外徑尺寸來確定。最后,需要在樓板或墻體上實現開孔。

(三)Dynamo實現方法

1、選擇模型

Dynamo有兩種常用節點可以實現拾取Revit系統中的模型,分別是:SelectModelElement和SelectModelElements。兩者的區別在于,前者只能選取單個模型,后者能批量選取多個模型。本文中,SelectModelElements更符合實際需要。

2、讀取模型屬性

首先,需要明確Revit屬性是分成兩類:實例屬性與類型屬性。Dynamo讀取這兩類屬性所用的方法是不同的。

實例屬性只能影響單個模型圖元。例如,套管的標高屬性,顯然,每個單獨套管模型,可以有各自不同的標高,修改一個套管模型的標高,不會影響到其他套管的標高。Dynamo讀取Revit的實例屬性,需要用到兩個核心節點:Parameter.ParameterByName和Parameter.Value。

管道的通徑尺寸、外徑尺寸皆屬于實例參數范疇,因此用上述兩個節點即可讀取參數。

類型屬性與實例屬性不同,類型屬性是同一類型圖元所共有的屬性。例如,同一種類型的套管模型,其材質屬性即為類型屬性。更改任意一個套管的材質,其他同類別套管的材質會同步更改。Dynamo讀取Revit的類型屬性,需要多用兩個節點:Family.ByName,Family.Types。

3、求得管道模型與樓板、墻體干涉的坐標

第一步,得到管道與樓板、墻體表面相交的幾何圖形。需要用到Dynamo的節點是Geometry.IntersectAll。它有兩個輸入項,分別為幾何圖形(geometry)和實體(solids),輸出項為幾何圖形(geometry)。

第二步,將相交的幾何圖形(geometry)轉換為輪廓線,進而求得輪廓線的中心坐標。在此用到的節點是Curve.StartPoint,該節點的輸入項是輪廓(Curve),輸出項為坐標(Point)。

4、生成模型的方法

本文中套管模型是族模型,這里重點探討Dynamo生成族模型的方法。

第一步,在Revit中插入族,使用FamilyInstance.ByFace節點。該節點有四個輸入項:

(1)族類型(Familytype)是套管的族類型;(2)放置平面(Face)是樓板或者墻體的表面;(3)放置點(Location)是管道截面與樓板表面或墻體表面相交的幾何圖形的中心坐標(Point);(4)參考向量(Referencedirection),在本文中,套管模型的放置方向應與樓板或墻體的平面垂直,通過兩點坐標可確定方向向量。

第二步,族模型的屬性賦值,使用Element.SetParameterByName節點。這里,根據管道模型的尺寸,自動對套管模型進行屬性賦值。

第三步,在樓板或墻體上開孔。這里用到Dynamo中一個特殊節點:Python節點,它是通過代碼來實現更為復雜的操作,這極大地豐富了Dynamo的適用性。筆者調用AddInstanceVoidCut方法,實現樓板或墻體開洞的功能。

以上是Dynamo管道預留孔洞實現的主要過程。在本次開發中,還有一些其他的功能,例如,用戶可以決定是否需要在開孔的同時生成套管模型,由于受篇幅限制的影響,不做展開。三維測試的效果圖以及源代碼見下圖。

三、結語

對于BIM管道模型預留孔洞,筆者嘗試使用了Dynamo編程手段對其進行開發。相比于傳統的軟件API開發,Dynamo具有的最大特點是可視化,可視化指的是程序邏輯的可視,用戶只需理清邏輯關系,找到合適的節點,就能實現開發目標。

Dynamo擁有豐富的節點庫,涵蓋了軟件開發的基礎功能。此外,它還支持使用Python語言來自定義節點,以此實現復雜功能。Dynamo的缺點是程序運行的速度較慢,尤其是在執行復雜程序的情況下,會出現嚴重卡頓的現象。筆者認為,Dynamo更適合用于小型輕量化的開發。

參考文獻:

[1]GB/T51212-2016,建筑信息模型應用統一標準[s].北京:中國建筑工業出版社,2016.

[2]羅嘉祥,宋珊,田宏鈞.AutodeskRevit煉金術-Dynamo基礎實戰教程[M].上海:同濟大學出版社,2017.

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合