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

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

主站蜘蛛池模板: 黄平县| 邢台县| 互助| 岑巩县| 湖北省| 广汉市| 福建省| 天等县| 长寿区| 武冈市| 遂溪县| 嘉兴市| 化隆| 涡阳县| 增城市| 武义县| 泸水县| 江孜县| 郑州市| 榆林市| 仙游县| 普格县| 昌图县| 威远县| 呼玛县| 工布江达县| 额敏县| 洛阳市| 巴中市| 大埔区| 临漳县| 克山县| 双牌县| 余庆县| 同仁县| 湘乡市| 工布江达县| 游戏| 阿拉善右旗| 招远市| 马鞍山市|