官术网_书友最值得收藏!

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

思考

能不能按照設定的要求或路徑進行編碼?

主站蜘蛛池模板: 太和县| 玉田县| 东城区| 玉屏| 左贡县| 钦州市| 武清区| 屏山县| 绍兴市| 呼图壁县| 象州县| 如东县| 河间市| 天门市| 健康| 乾安县| 邮箱| 安顺市| 金堂县| 枣强县| 华容县| 长治市| 濉溪县| 聂荣县| 偏关县| 孝昌县| 镇坪县| 巢湖市| 抚州市| 永顺县| 于都县| 汉川市| 德格县| 黑水县| 尚志市| 江源县| 杂多县| 文昌市| 张家港市| 镇江市| 滦平县|