- Autodesk Revit參數化設計之道:Dynamo實戰剖析
- 柏慕聯創組編
- 2524字
- 2022-05-10 17:34:32
2.1 案例1:幕墻嵌板編號
1.案例背景
隨著裝配式建筑的發展日益成熟,預制構件的運輸、吊裝、定位、施工等過程,均需要根據施工工藝順序提前對構件進行編碼。預制構件的數量多且煩瑣,人為因素的影響會產生編碼錯誤和重復勞動;同時構件的編碼又有一定的規則,利用這一邏輯,借助于Dynamo軟件可進行快速準確的編碼工作。
本案例以幕墻嵌板為例進行簡單的講解,實現快速自動編碼,如圖2-1所示。

圖2-1
2.解決方案
選擇幕墻嵌板→根據幕墻嵌板數量生成編碼列表→將生成的編碼按順序依次為每個幕墻嵌板參數賦值。
3.案例知識點
● Dynamo與Revit的數據交互
● Revit數據寫入
● Dynamo列表過濾
● Categories
● All Elements of Category
● All Elements of Family Type
● GetParameterValueByName
● Element. SetParameterByName
● String
● List. List. FilterByBoolMask
● FamilyType. Name
4.案例詳解
(1)選擇幕墻嵌板族實例。打開案例文件,進入Dynamo界面。
利用Dynamo與Revit的數據交互,在Dynamo中選擇Revit的構件。選擇元素的節點在Revit下的Selection(選擇)里,如圖2-2所示。

圖2-2
Selection(選擇)中又有多種選擇方式,結合最初的解決方案,通過Categories(族類別)、All Elements of Category(選擇項目中該族類別的所有族實例)節點對,在項目中獲取“幕墻嵌板類別”的所有族實例。
在Dynamo中,對于族類別、族、族類型、族實例都有著如圖2-3所示的對應關系。
結合對應關系,找到了Categories(族類別)這個節點,但最終目的是要對這個類別下的所有幕墻嵌板族實例進行編碼,所以需要提取該類別的所有族實例,也就是選擇All Elements of Category(選擇項目中該族類別的所有族實例)這個節點,使之連成一組,如圖2-4所示。

圖2-3

圖2-4
(2)設置幕墻嵌板族實例參數。有一對節點常用于Revit構件參數信息數據的讀取與寫入,分別是Revit→Elements(Revit圖元)→Element(族實例)中的GetParameterValueByName(根據參數名獲取參數的值)和SetParameterByName(根據參數名設置參數的值),如圖2-5所示。

圖2-5
而在本項目中,需要Element.SetParameterByName(根據參數名設置參數的值)這個節點,如圖2-6所示。根據節點的輸入信息,需要對哪個族實例(element)的哪個參數(parameterName)設置什么值(value)。
幕墻嵌板的編碼信息一定要寫入一個實例參數,而不是類型參數。
在這里暫定將編碼信息寫入“注釋”這個參數,當然也可以創建一個單獨的項目實例參數用于存儲編碼信息。參數(parameterName)需要連接一個字符串,即Input(輸入)→Basic(基礎數據)→String(字符串)節點,如圖2-7所示。

圖2-6

圖2-7
根據現有節點和邏輯,先嘗試連接現有節點,如圖2-8所示。

圖2-8
(3)幕墻嵌板編碼。對于幕墻嵌板的編碼,需要根據嵌板的總數n,生成一個1~n的數列(列表),然后將值賦到“注釋”這個參數里。
這是一個關于列表的問題,在List(列表)下找到Count(獲取列表項數)節點來統計嵌板族實例的總數。通過簡單的DesignScript語言,利用Code Block節點,生成一個1~n的列表,如圖2-9所示。

圖2-9
運行之后系統會報錯,這是由于數據類型的不對應,這也是常見的錯誤。
要保證接收數據類型的正確性。Value(值)接收的數據類型是string(字符串),所以找到String from Object(將對象類型轉化為字符串)節點,將對象轉化為字符串,如圖2-10所示。

圖2-10
這樣便實現了對幕墻嵌板的編碼,如圖2-11所示。

圖2-11
可以結合標記族對編碼進行檢查,如圖2-12所示。

圖2-12
通過觀察測試發現,Dynamo會根據幕墻繪制的起點、終點確定編碼1的起點位置。同時也會根據幕墻嵌板的層數按從左到右遞增的規律進行編碼。默認情況下,構件編碼順序是按照放置在項目中的先后順序編碼。
5.案例拓展
在項目實際應用中,同一個項目有多種幕墻嵌板類型,以上根據族類別選擇族實例方法,將一次性選擇所有幕墻嵌板族實例,不能實現根據幕墻嵌板族類型,分別編碼應用。如圖2-13所示,同一項目中有點爪式幕墻嵌板和玻璃嵌板兩種。

圖2-13
根據族類別、族、族類型、族實例的層級關系,也可以通過選擇族類型實現對構件的選擇,如圖2-14所示。結合對應關系,找到了Family Types(族類型)這個節點,但最終目的是要對這個類型下的所有幕墻嵌板族實例進行編碼,所以需要提取所有類型的族實例,也就是選擇All Elements of Family Type(在項目中獲取該族類型的所有構件)這個節點,使之連成一組。

圖2-14
根據以上內容及所學知識,讀者自行補充完善腳本。
6.腳本優化
在項目實際應用中,幕墻嵌板下料生成是根據施工組織計劃按進度按需下料,可能會要求按樓層或按朝向分別給幕墻嵌板類型編碼。
通過族類別、族類型選擇構件的方法只能實現選擇所有族類型或族類別實例,且需要用戶對Revit中的屬性有清楚的認識,并不能實現按樓層或按分區朝向過濾編碼;最好能采用直接框選構件的方法,再將族類型名稱作為過濾的判斷依據,最后分別編碼。
(1)框選族實例。利用Revit→Selection(選擇)→Select Model Elements(選擇Revit圖元實例),選擇多個構建元素。Select Model Element(選擇Revit圖元實例)用于選擇一個構件元素,如圖2-15所示。

圖2-15
(2)讀取族類型名稱。因為要使用族類型名稱作為過濾的判斷依據,所以需要讀取Revit中框選的族實例名稱。在Revit→Elements(Revit圖元)→FamilyType(族類型)中選擇Name(查詢族類型名稱)節點,如圖2-16所示。

圖2-16
(3)過濾族類型。Dynamo的數據處理都是對列表的處理,接下來需要找一個過濾的節點。
在List(列表)里找到兩個過濾節點:Filter(通過函數條件過濾)和FilterByBoolMask(通過布爾條件過濾),如圖2-17所示。本案例將講解List.FilterByBoolMask(通過布爾條件過濾)節點的使用。

圖2-17
List.FilterByBoolMask(通過布爾條件過濾)節點需要對列表進行布爾判斷。那么判斷的依據是什么?根據族類型名稱是否等于“玻璃”或“點爪式幕墻嵌板”進行true(真值)和false(假值)的判斷,如圖2-18所示。

圖2-18
如何建立兩者的邏輯判斷聯系?
篩選出框選構件里族類型名稱等于“玻璃”或“點爪式幕墻嵌板”的構件,并通過布爾運算判斷連接FilterByBoolMask(通過布爾條件過濾)節點的mask(過濾布爾列表)。在這里介紹Math(數學)→Operators(運算符)→“==”節點,該節點用于判斷兩個端口的輸入值是否相等,并輸出布爾值[true(真值)和false(假值)],如圖2-19所示。注意對比數據信息格式的一致性,同類才能比較。

圖2-19
框選元素列表,通過List.FilterByBoolMask(通過布爾條件過濾)節點,按true(真值)和false(假值)的邏輯判斷,分別從in和out輸出結果,如圖2-20所示。

圖2-20
這里需要注意的是,要得到Revit中族類型名稱為“玻璃”的元素,需要將“Elements”(Revit圖元)接入List.FilterByBoolMask(通過布爾條件過濾)節點的“list”(列表),而不是接入族類型名稱,如圖2-21所示。

圖2-21
(4)編碼。如果要對不同類型的幕墻嵌板設置不同的前綴,如朝向分區等,直接用“+”連接即可。結合解決方案中的知識點,完成剩下的內容,如圖2-22所示。保存文件。

圖2-22
思考
能不能按照設定的要求或路徑進行編碼?
- 中文版SketchUp 2022完全實戰技術手冊
- TArch 8.5天正建筑軟件標準教程
- 創意UI:Photoshop玩轉移動UI設計
- Yii 1.1 Application Development Cookbook
- UG NX 9.0中文版 基礎教程 (UG工程師成才之路)
- Python Text Processing with NLTK 2.0 Cookbook: LITE
- CorelDRAW服裝設計實用教程(第四版)
- UG NX 12.0實例寶典
- Apache Roller 4.0 – Beginner's Guide
- Unity Game Development Essentials
- 零基礎學數碼攝影后期
- 邊做邊學:平面廣告設計與制作(Photoshop 2020+Illustrator 2020·第3版·微課版)
- Liferay Portal Systems Development
- Photoshop CC完全自學教程:從入門到實踐(全新版)
- Maya Paint Effect 特效應用手冊