燈柱放置
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-c97bae3ba9c9b673de59c0e53dcfa1dd02bdbf93%252FRoads_CorridorBlockRefs_Player%2520%281%29.gif%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=75c169a2&sv=1)
Dynamo 其中一種相當適合的使用案例,便是沿廊道模型動態放置離散物件。物件通常需要放置在與廊道上插入的組合無關的位置,這是一個非常冗長乏味而需手動完成的工作。當廊道的水平或垂直幾何圖形發生變更時,會導致需重複處理大量工作。
目標
🎯 在 Excel 檔案中指定的樁號值處,沿廊道放置燈柱圖塊參考。
主要概念
從外部檔案 (在此範例中為 Excel) 讀取資料
以字典組織資料
使用座標系統控制位置/比例/旋轉
放置圖塊參考
在 Dynamo 中視覺化幾何圖形
版本相容性
此圖表將在 Civil 3D 2020 及更高版本上執行。
資料集
首先,下載以下範例檔案,然後開啟 DWG 檔案和 Dynamo 圖表。
Excel 檔案與 Dynamo 圖表最好儲存在同一個目錄中。
解決方法
以下是此圖表中的邏輯概觀。
讀取 Excel 檔案,將資料匯入至 Dynamo
從指定的廊道基準線取得地勢線
沿廊道地勢線在所需樁號處產生座標系統
使用座標系統在模型空間中放置圖塊參考
我們開始吧!
取得 Excel 資料
在此範例圖表中,我們使用 Excel 檔案來儲存 Dynamo 將用於放置燈柱圖塊參考的資料。表格看起來像下面這樣。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-3119bb9a977968f97b56185738f1239e16bc3b6e%252FRoads_CorridorBlockRefs_ExcelFile.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=bd755ebf&sv=1)
使用 Dynamo 從外部檔案 (例如 Excel 檔案) 讀取資料是種很好的策略,尤其是當需要與其他團隊成員共用資料時。
Excel 資料會像下面這樣匯入至 Dynamo。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-a801dc929782993cc242ae8b9111705e5c4297e4%252FRoads_CorridorBlockRefs_GetExcelData%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=43a27b42&sv=1)
我們現在有了資料,需要依欄 (Corridor、Baseline、PointCode 等) 把資料分開,以便在圖表的其餘部分使用。執行此作業的常見方法之一,是使用 List.GetItemAtIndex 節點並指定所需的每一欄索引號碼。例如,Corridor 欄是在索引 0,Baseline 欄是在索引 1 等等。
看起來沒問題,對吧?但是這個方法有一個潛在的問題。如果 Excel 檔案中欄的順序在將來發生變更,該怎麼辦?或是兩欄之間加入新的一欄?如此一來,圖表將無法正常運作而需要更新。我們可以將資料放入 字典,將 Excel 欄標題做為 鍵,其餘資料做為 值,讓圖表能繼續使用。
如果您不熟悉字典,請查看Dynamo 中的字典一節。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-7a50b7420e08ec24b4d2c5abbeee4e4ebe84663e%252FRoads_CorridorBlockRefs_Dictionary.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=58ecc28f&sv=1)
這可讓圖表變得更具彈性,因為它允許變更 Excel 中欄的順序。只要欄標題保持不變,您就可以使用其_鍵_ (即欄標題) 從字典中擷取資料,這是我們接下來要執行的作業。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-1a1366f197a182d51d72f44091dcbfbe380280cd%252FRoads_CorridorBlockRefs_DictionaryRetrieval.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=cf75639f&sv=1)
取得廊道地勢線
我們現在已匯入 Excel 資料並準備好了,接下來我們開始使用它從 Civil 3D 取得有關廊道模型的一些資訊。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-614ba829e4790df44b18dd78d1994c44d37eb2f4%252FRoads_CorridorBlockRefs_GetCorridorFeatureLines.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=7764dd81&sv=1)
依名稱選取廊道模型。
取得廊道內的特定基準線。
透過基準線的點代碼取得基準線內的地勢線。
產生座標系統
我們現在要沿廊道地勢線,在 Excel 檔案中指定的樁號值處產生座標系統。這些座標系統將用於定義燈柱圖塊參考的位置、旋轉和比例。
如果您不熟悉座標系統,請查看向量、平面和座標系統一節。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-efe007d82c8b1b59ded9046dcadb67385f417fc7%252FRoads_CorridorBlockRefs_GetCoordinateSystems%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=fe0d65b8&sv=1)
請注意,在此處使用程式碼區塊 (Code Block) 是為了根據座標系統在基準線哪一側來旋轉座標系統。您也可以使用幾個節點來達成這個目標,但這是一個很好的範例,說明撰寫出來更容易。
如果您不熟悉程式碼區塊,請查看程式碼區塊和 DesignScript一節。
建立圖塊參考
我們快完成了!我們有實際放置圖塊參考所需的所有資訊。首先,使用 Excel 檔案中的 BlockName 欄取得圖塊定義。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-249de556182f309946d599e62f54714b2e8686bc%252FRoads_CorridorBlockRefs_GetBlockDefinitions.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=f8059bff&sv=1)
從這裡,最後一步是建立圖塊參考。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-3a7a5f59a8128b97de3230fa5006c924b7b80136%252FRoads_CorridorBlockRefs_CreateBlockReferences.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=7910691&sv=1)
結果
當您執行圖表時,您應該會看到新的圖塊參考沿廊道展示在模型空間中。以下是最酷的部分 - 如果圖表的執行模式設定為「自動」,而且您編輯了 Excel 檔案,圖塊參考會自動更新!
您可以在使用者介面一節閱讀有關圖表執行模式的更多資訊。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-98bbc4816018cf7cee6bacabe87c480a403cc0b8%252FRoads_CorridorBlockRefs_Excel.gif%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=76ef647a&sv=1)
以下是使用 Dynamo 播放器執行圖表的範例。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-c97bae3ba9c9b673de59c0e53dcfa1dd02bdbf93%252FRoads_CorridorBlockRefs_Player%2520%281%29.gif%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=75c169a2&sv=1)
如果您不熟悉 Dynamo 播放器,請查看 Dynamo 播放器一節。
🎉 任務完成!
附註:在 Dynamo 中視覺化
在 Dynamo 中視覺化廊道幾何圖形,有助於提供情境脈絡。此特定模型已在模型空間中萃取出廊道實體,因此我們將這些實體帶入 Dynamo。
但還有其他事情需要考慮。實體相對而言是「比較重」的幾何圖形類型,這表示此作業將減慢圖表速度。如果有一個簡單的方式可以 選擇 是否要檢視實體會更好。一種明顯的解決方法是拔掉 Corridor.GetSolids 節點,但這會對所有下游節點產生警告,而這看起來會有點雜亂。這時就是 ScopeIf 節點真正發揮功能的時候了。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-bb127a8c17fc0df41b349e7ca32efccd424f52c7%252FRoads_CorridorBlockRefs_VisualizeCorridor%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=8d099c87&sv=1)
請注意 Object.Geometry 節點底部有一條灰色列。這表示節點預覽已關閉 (在節點上按一下右鍵可存取),這樣 GeometryColor.ByGeometryColor 就可以避免為了背景預覽的顯示優先順序而與其他幾何圖形「競爭」。
ScopeIf 節點基本上可讓您選擇性地執行一條完整的節點分支。如果 test 輸入為 false,則連接至 ScopeIf 節點的每個節點都不會執行。
以下是 Dynamo 背景預覽的結果。
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F1226582865-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FmuqshfgEG0ZvIFN5DRfA%252Fuploads%252Fgit-blob-23657306ebcf8021ced1345f603a8628eb840acd%252FRoads_CorridorBlockRefs_Dynamo.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b3a9bfbe&sv=1)
構想
以下是一些如何擴充此圖表功能的構想。
在 Excel 檔案中新增 旋轉 一欄,就可以使用它驅動座標系統的旋轉。
在 Excel 檔案中新增 水平或垂直偏移,就可以視需要讓燈柱偏離廊道地勢線。
直接在 Dynamo 中 中使用起點樁號和典型間距產生樁號值,而不使用內含樁號值的 Excel 檔案。
Last updated