- Autodesk Revit參數化設計之道:Dynamo實戰剖析
- 柏慕聯創組編
- 2064字
- 2022-05-10 17:34:33
2.2 案例2:地下車位按設計路徑自動排序編碼
1.案例背景
在BIM施工應用中,地下車位優化的前提是根據設計指定路徑給車位編碼。手動給車位編碼的工作較為煩瑣,編碼方案也會隨著設計行車路線的變化而變化,這使得工作量成倍增加。應用Dynamo自動給地下車位編號,高效準確。
案例1中講解了給構件編碼的方法,但是沒有提及編碼的順序;默認的編碼規則是構件生成的先后順序,如果需要自定義編碼規則順序,案例1的知識點顯然不夠,本案例著重講述按設計路徑編碼。
2.解決方案
根據設計行車路線,通過繪制樣條曲線表示該行車路線。選擇需要編碼的車位,獲取距該樣條曲線上最近的車位;然后將車位根據樣條曲線的繪制方向排序,并按行車路線編碼,即獲取沿樣條曲線放置車位的編碼;最后將編碼寫入構件的“注釋”實例參數中。
3.案例知識點
● NurbsCurve. ControlPoints
● Geometry. ClosestPointTo
● Curve. ParameterAtPoint
● PolyCurve. ByPoints
● List. SortByKey
4.案例詳解
(1)項目前期準備。首先打開案例文件,項目中已經放置了一系列車位;然后用模型線繪制一條樣條曲線比擬的車位的編碼順序,如圖2-23所示,按圖示箭頭順序由小到大編碼。

圖2-23
注意繪制樣條曲線的方向:樣條曲線的起始點為編碼的起點。本案例編碼順序是從左下角到左上角,因此繪制樣條曲線時,要以左下角為起點繪制蛇形線。
回顧第2.1節“案例1幕墻嵌板編號”所學知識點,運用Element.SetParameterByName(根據參數名設置參數值)節點,將最終處理的編碼數據,寫入構件的“注釋”實例參數中。
進入Dynamo界面,應用節點對Categories(族類別)和All Elements of Category(選擇該族類別的所有族實例),按類別選擇車位。
提示
如果車位所屬類別有其他構件,可以參照案例1的方法,通過All Elements of Family Type(在項目中獲取該族類型的所有構件)這個節點來選擇所有車位。
應用節點對Select Model Element(選擇Revit實例)和Element.Geometry(獲取Revit圖元的幾何圖形),選擇樣條曲線。
(2)獲取車位在樣條曲線上的對應點。要按路線先后來排序,需要找到車位對應于樣條曲線上的點,然后對這些點進行排序即完成對車位的排序。而車位對應于樣條曲線上的點,可以提取車位的插入點,并通過節點找到樣條曲線上距離此插入點最近的點。
首先提取構件的插入點,利用Revit→Elements(Revit圖元)→Element(實例)→GetLocation(獲取族實例位置)節點,如圖2-24所示。

圖2-24
然后在曲線上找到車位插入點距離曲線最近的點,在Geometry(幾何學)→Modifiers(修改)→Geometry(幾何圖形)中選擇ClosestPointTo(獲取距離另一幾何圖形最近的點),Geometry.ClosestPointTo(獲取距離另一幾何圖形最近的點)節點用于找到距圖元最近的點,如圖2-25所示。

圖2-25
這里需要注意的是,Geometry.ClosestPointTo(獲取距離另一幾何圖形最近的點)節點的連綴應該設置為“最長”或者是“叉積”,如圖2-26所示。

圖2-26
運行之后結果并不對,如圖2-27所示,Geometry.ClosestPointTo(獲取距離另一幾何圖形最近的點)節點在曲線上所獲取的最近距離的點,全部是曲線的起點和終點位置。

圖2-27
樣條曲線作為一個整體存在,對最近點的判定產生干擾,此時需要優化節點。
樣條曲線由多個控制點生成,可以找到控制點,并將其重新連線,從而再判斷取點。在Geometry(幾何學)→Curves(線)→NurbsCurve(樣條曲線)中選擇ControlPoints(獲取樣條曲線的控制點),NurbsCurve.ControlPoints(獲取樣條曲線的控制點)節點用于找到樣條曲線的控制點,如圖2-28所示。

圖2-28
控制點找到之后,利用PolyCurve(復合曲線)節點連接各點,并生成多段線曲線。
PolyCurve(復合曲線)一般是指多段線或者多重曲線,由多條曲線拼接而成。在Geometry(幾何學)→Curves(線)→PolyCurve(復合曲線)中選擇ByPoints(通過點形成多段線),利用PolyCurve.ByPoints(通過點形成多段線)節點串聯各控制點,生成多段線曲線;然后利用Geometry.ClosestPointTo(獲取距離另一幾何圖形最近的點)節點進行最近距離的取點,如圖2-29所示。
(3)編碼和多段線曲線上的點一一對應。由于是多段線組成的一條曲線,回顧Curve. PointAtParameter(獲取曲線上參數處的點)節點,可以考慮反過來,確定點在曲線上的位置參數,最后根據位置參數進行排序。

圖2-29
在Geometry(幾何學)→Curves(線)→Curve(線)中選擇ParameterAtPoint(獲取曲線上點的參數),連接已有節點,如圖2-30所示。同樣,Curve.ParameterAtPoint(獲取曲線上點的參數)節點的連綴也應該設置為“最長”或者是“叉積”。

圖2-30
Curve.ParameterAtPoint(獲取曲線上點的參數)節點輸出的是位置參數,通過[0,1]的取值來表示曲線上的位置,這樣就可以按位置參數對構件進行排序。List(列表)→Organize(組織)下有多種排序節點,這里使用List.SortByKey(根據關鍵字給列表排序)節點,如圖2-31所示。

圖2-31
最終需要排序編碼的是構件,即車位族。所以List.SortByKey(根據關鍵字給列表排序)節點中的排序列表是All Elements of Category(獲取項目中該族類別的所有構件)中的元素,排序的關鍵字即為Curve.ParameterAtPoint(獲取曲線上點的參數)節點的位置參數,如圖2-32所示。

圖2-32
List.SortByKey(根據關鍵字給列表排序)節點輸出的“sorted list”(排序列表)即為已按關鍵字排序后的圖元。
(4)生成編碼數據。應用節點List.Count(列表項數)獲取車位的總數;然后再通過Cold Block節點獲取編碼數列(起始為1,間隔為1),如圖2-33所示。

圖2-33
參照案例1,增加一個格式轉換節點String from Object(將對象類型轉化為字符串),如圖2-34所示。

圖2-34
結合Element.SetParameterByName(根據參數名設置參數值)節點的相關知識,便完成了車位的編碼工作,如圖2-35所示。
完成后,制作一個車位所屬類別的標記族,標簽為“注釋”;將標記族載入項目中,通過命名“全部標記”對已經編碼后的車位進行標記,檢查編碼是否正確,如圖2-36所示。

圖2-35

圖2-36
- 中文版Photoshop CS6完全使用手冊(超值版)
- 爸媽微信e時代
- 剪映:短視頻剪輯/字幕/動畫/AI從新手到高手(手機版+電腦版)
- VSTO 3.0 for Office 2007 Programming
- UG NX 12.0實例寶典
- Photoshop CS6實戰從入門到精通(超值版)
- Premiere Pro影視后期編輯:短視頻制作實戰寶典
- Django 1.0 Template Development
- 零基礎學會聲會影2018(全視頻教學版)
- Photoshop+CorelDRAW平面設計案例實戰:從入門到精通(視頻自學全彩版)
- Altium Designer 21 PCB設計官方指南(高級實戰)
- 構筑敏捷的開發團隊:微軟Visual Studio 2010實戰兵法
- Unity 3 Game Development Hotshot
- FLUENT 15.0流場分析實戰指南
- Photoshop數字創意設計教程(案例微課版)