Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
雖然 Dynamo 最初是以 Revit 為基礎建置,但此視覺程式設計工具的多功能已不限用於 Revit。Dynamo 也整合到 Civil 3D 中,讓使用者能夠為土木基礎建設專案建立功能強大的自動化例行程式工作。這是一個非常有用的工具,可以處理從一般工作到最複雜設計工作流程的所有事物,最終可協助您節省時間、最佳化設計,並做出更好的設計決策。Dynamo 提供專用於 Civil 3D 的一整套節點,以及來自繁榮社群的協力廠商資源庫。
Primer 的本章將重點介紹 Dynamo for Civil 3D,從基礎知識開始,並探討更進階的主題。
我們先前提到,節點是 Dynamo 圖表的核心建置圖塊,在資源庫中被組織為邏輯群組。在 Dynamo for Civil 3D 中,資源庫中有兩個品類 (也就是層架),包含用於處理 AutoCAD 和 Civil 3D 物件 (例如定線、縱斷面、廊道、圖塊參考等) 的專用節點。資源庫的其餘部分包含本質上比較通用的節點,在所有「類型」的 Dynamo (例如,適用於 Revit 的 Dynamo、Dynamo Sandbox 等) 之間都一致。
請查看資源庫一節,進一步瞭解會如何在核心 Dynamo 資源庫中排列節點。
用於處理 AutoCAD 和 Civil 3D 物件的特定節點
一般用途節點
您可以單獨安裝的協力廠商套件中的節點
如果使用 AutoCAD 和 Civil 3D 層架下的節點,您的 Dynamo 圖表就只能在 Dynamo for Civil 3D 中運作。如果 Dynamo for Civil 3D 圖表在其他位置開啟 (例如在適用於 Revit 的 Dynamo 中),這些節點上會標示警告,而且不會執行。
為什麼 AutoCAD 和 Civil 3D 有兩個獨立層架?
這種排列方式是為了將原生 AutoCAD 物件 (直線、聚合線、圖塊參考等) 的節點和 Civil 3D 物件 (定線、廊道、地形等) 的節點區分開來。從技術角度來看,AutoCAD 和 Civil 3D 是兩個獨立的項目 - AutoCAD 是基礎應用程式,Civil 3D 則建置在其上。
若要使用 AutoCAD 和 Civil 3D 節點,請務必確實瞭解每個層架內的物件階層。記得生物學的分類法嗎?界、門、綱、目、科、屬、種?AutoCAD 和 Civil 3D 物件以類似方式分類。我們來瀏覽一些範例。
我們以定線為例。
假設您的目標是變更定線的名稱。下一個您要加入的節點是 CivilObject.SetName 節點。
一開始,這看起來可能不太直覺。CivilObject 是什麼?為什麼資源庫沒有 Alignment.SetName 節點?答案與 可重複使用性 和 簡易性 有關。請思考一下,無論物件是定線、廊道、縱斷面還是其他物件,變更 Civil 3D 物件名稱的過程都相同。因此,與其讓重複節點基本上都執行相同的作業 (例如 Alignment.SetName、Corridor.SetName、Profile.SetName 等),不如將該功能收闔為單一節點。這正是 CivilObject.SetName 的功能!
另一種考量的方式是 關係。定線和廊道都是一種 Civil 物件,就像蘋果和梨一樣都是水果。Civil 物件節點適用於任何類型的 Civil 物件,就像您想要使用一種削皮刀就可以削蘋果和削梨一樣。如果你為每種水果都買一個單獨的削皮刀,你的廚房會變得很混亂!從這個意義上來說,Dynamo 節點資源庫與您的廚房相似。
現在,我們更進一步。假設您要變更定線的圖層。您要使用的節點是 Object.SetLayer 節點。
為什麼沒有名為 CivilObject.SetLayer 的節點?我們先前討論的可重複使用性和簡易性原則同樣適用於此處。圖層 性質是 AutoCAD 中任何可繪製或插入的物件 (例如直線、聚合線、文字、圖塊參考等) 共有的性質。Civil 3D 物件 (例如定線和廊道) 位於同一品類下,因此適用於物件的任何節點也可用於任何 Civil 物件。
Dynamo for Civil 3D 為處理土木基礎建設專案的工程師和設計師提供 視覺程式設計 範例。您可以將 Dynamo 視為是 Civil 3D 使用者的某種數位多功能工具,無論處理何種工作,都有適合的工具。您可以使用其直覺式介面建立功能強大且可自訂的例行程式,無需撰寫任何一行程式碼。您不需要 成為 程式設計師就能使用 Dynamo,但您必須能夠以程式設計師的邏輯 思考。本章搭配 Primer 中其他章節,可協助您建立邏輯技能,讓您能夠運用計算設計的思維來處理任何工作。
Dynamo 是在 Civil 3D 2020 中首次引入,從那時候開始就一直持續發展。一開始是透過軟體更新單獨安裝,現在已經與所有版本的 Civil 3D 搭售。根據您使用的 Civil 3D 版本,您可能會發現 Dynamo 介面與本章中所看到的範例略有不同。這是因為 Civil 3D 2023 的介面經過重大改版。
建議您查看 ,以取得有關 Dynamo 開發的最新資訊。下表總結 Dynamo for Civil 3D 存在期間的關鍵里程碑。
Civil 3D 版本 | Dynamo 版本 | 附註 |
---|
2024.1 | 2.18 |
2024 | 2.17 | Dynamo 播放器使用者介面更新 |
2023.2 | 2.15 |
2023 | 2.13 | Dynamo 使用者介面更新 |
2022.1 | 2.12 |
|
2022 | 2.10 |
|
2021 | 2.5 |
2020.2 | 2.4 |
2020 Update 2 | 2.4 | 加入新節點 |
2020.1 | 2.2 |
2020 | 2.1 | 初始版本 |
一段時間後,您可能會發現自己不只需要基礎知識,還需要更深入瞭解 Dynamo 的內部運作。本節中的頁面將提供您在 Dynamo for Civil 3D 中解鎖進階功能的藍圖,以便您可以將圖表提升到下一個層次。
道路、鐵路、土地、公共事業、測量、GIS...
土木基礎建設除了包括上述所有事物,還有更多!本節包含數個實用且相關的範例圖表,可協助您掌握 Dynamo 並充分發揮 Dynamo for Civil 3D 的潛能。每個圖表都包含建立該圖表時所用邏輯的詳細描述,您不僅可以 使用 圖表,還可以 瞭解 圖表。
此外,這些範例內含經過時間測試、可建置功能強大圖表的最佳實踐。在您進行範例時,我們建議您也要熟悉最佳實踐一節,以獲得更多如何建置功能強大、靈活且可維護的圖表的構想。
您現在對整個圖像有一點瞭解,我們直接在 Civil 3D 中建置您的第一個 Dynamo 圖表!
這是一個簡單的範例,旨在示範基本的 Dynamo 功能。建議您在新的空白 Civil 3D 文件中完成所有步驟。
首先在 Civil 3D 中開啟一個空白文件。開啟後,導覽到 Civil 3D 功能區的 「管理」 頁籤,並尋找 「視覺程式設計」 面板。
按一下 「Dynamo」 按鈕,這會在單獨的視窗中啟動 Dynamo。
Dynamo 與 Dynamo 播放器有何差異?
Dynamo 是您用來建置和執行圖表的工具。Dynamo 播放器是一種無需在 Dynamo 中開啟圖表即可執行圖表的簡易方式。
當您準備好試用時,請前往 Dynamo 播放器一節。
開啟 Dynamo 後,您會看到開始畫面。按一下 「新建」 開啟空白工作區。
範例呢?
Dynamo for Civil 3D 隨附一些預先建置的圖表,可協助您激發更多有關如何使用 Dynamo 的想法。我們建議您有時候可以查看這些內容,以及 Primer 中的範例工作流程。
您現在應該會看到一個空白工作區。我們來看看 Dynamo 的運作!以下是我們的目標:
很簡單,對吧?但在開始之前,我們需要先討論一些基本知識。
Dynamo 圖表的核心建置圖塊稱為節點。節點就像一台小機器 - 您將資料放入其中,它對該資料執行某些作業,然後輸出結果。Dynamo for Civil 3D 有一個節點資源庫,您可以用線路將節點連接在一起形成圖表,圖表能做的事情比單獨任何一個節點所能做的更多、更好。
好,我們來建立圖表。以下是我們需要的所有節點的清單。
您可以在資源庫的搜尋列中鍵入這些節點的名稱,或在圖元區的任意位置按一下右鍵並在其中搜尋,以尋找這些節點。
如何知道要使用哪些節點?以及在何處找到它們?
資源庫中的節點會根據作用分成不同邏輯品類。請參閱節點資源庫一節,以取得更深入的導覽。
以下是您的最終圖表的外觀。
我們總結一下到目前為止完成的工作:
我們選擇要使用的文件。在此範例 (以及許多範例) 中,我們想要在 Civil 3D 中使用作用中的文件。
我們定義建立文字物件的目標圖塊 (在此範例中為模型空間)。
我們使用 String 節點指定應放置文字的圖層。
我們使用 Point.ByCoordinates 節點建立一點,以定義應放置文字的位置。
我們使用兩個 Number Slider 節點定義文字插入點的 X 座標和 Y 座標。
我們使用另一個 String 節點定義文字物件的內容。
最後,我們建立了文字物件。
我們來看看新圖表的結果!
回到 Civil 3D,確保已選取 「模型」 頁籤。您應該會看到 Dynamo 建立的新文字物件。
如果您沒看到文字,可能需要執行 ZOOM -> EXTENTS 指令以縮放至右側位置。
好酷!現在來更新一下文字。
回到 Dynamo 圖表中,繼續變更一些輸入值,例如文字字串、插入點座標等。您應該會看到文字在 Civil 3D 中自動更新。另請注意,如果您拔掉其中一個輸入埠,文字就會移除。如果將所有內容重新插入,則會再次建立文字。
為什麼 Dynamo 不在每次執行圖表時插入新的文字物件?
Dynamo 預設會「記住」它建立的物件。如果您變更節點輸入值,Civil 3D 中的物件會更新,而不是建立全新物件。您可以在物件併入一節閱讀有關此行為的更多資訊。
此範例只是一個您可以使用 Dynamo for Civil 3D 執行何種作業的入門。請繼續閱讀以瞭解更多資訊!
Dynamo 其中一種相當適合的使用案例,便是沿廊道模型動態放置離散物件。物件通常需要放置在與廊道上插入的組合無關的位置,這是一個非常冗長乏味而需手動完成的工作。當廊道的水平或垂直幾何圖形發生變更時,會導致需重複處理大量工作。
從外部檔案 (在此範例中為 Excel) 讀取資料
以字典組織資料
使用座標系統控制位置/比例/旋轉
放置圖塊參考
在 Dynamo 中視覺化幾何圖形
此圖表將在 Civil 3D 2020 及更高版本上執行。
首先,下載以下範例檔案,然後開啟 DWG 檔案和 Dynamo 圖表。
Excel 檔案與 Dynamo 圖表最好儲存在同一個目錄中。
以下是此圖表中的邏輯概觀。
讀取 Excel 檔案,將資料匯入至 Dynamo
從指定的廊道基準線取得地勢線
沿廊道地勢線在所需樁號處產生座標系統
使用座標系統在模型空間中放置圖塊參考
我們開始吧!
在此範例圖表中,我們使用 Excel 檔案來儲存 Dynamo 將用於放置燈柱圖塊參考的資料。表格看起來像下面這樣。
使用 Dynamo 從外部檔案 (例如 Excel 檔案) 讀取資料是種很好的策略,尤其是當需要與其他團隊成員共用資料時。
Excel 資料會像下面這樣匯入至 Dynamo。
我們現在有了資料,需要依欄 (Corridor、Baseline、PointCode 等) 把資料分開,以便在圖表的其餘部分使用。執行此作業的常見方法之一,是使用 List.GetItemAtIndex 節點並指定所需的每一欄索引號碼。例如,Corridor 欄是在索引 0,Baseline 欄是在索引 1 等等。
看起來沒問題,對吧?但是這個方法有一個潛在的問題。如果 Excel 檔案中欄的順序在將來發生變更,該怎麼辦?或是兩欄之間加入新的一欄?如此一來,圖表將無法正常運作而需要更新。我們可以將資料放入 字典,將 Excel 欄標題做為 鍵,其餘資料做為 值,讓圖表能繼續使用。
如果您不熟悉字典,請查看Dynamo 中的字典一節。
這可讓圖表變得更具彈性,因為它允許變更 Excel 中欄的順序。只要欄標題保持不變,您就可以使用其_鍵_ (即欄標題) 從字典中擷取資料,這是我們接下來要執行的作業。
我們現在已匯入 Excel 資料並準備好了,接下來我們開始使用它從 Civil 3D 取得有關廊道模型的一些資訊。
依名稱選取廊道模型。
取得廊道內的特定基準線。
透過基準線的點代碼取得基準線內的地勢線。
我們現在要沿廊道地勢線,在 Excel 檔案中指定的樁號值處產生座標系統。這些座標系統將用於定義燈柱圖塊參考的位置、旋轉和比例。
如果您不熟悉座標系統,請查看向量、平面和座標系統一節。
請注意,在此處使用程式碼區塊 (Code Block) 是為了根據座標系統在基準線哪一側來旋轉座標系統。您也可以使用幾個節點來達成這個目標,但這是一個很好的範例,說明撰寫出來更容易。
如果您不熟悉程式碼區塊,請查看程式碼區塊和 DesignScript一節。
我們快完成了!我們有實際放置圖塊參考所需的所有資訊。首先,使用 Excel 檔案中的 BlockName 欄取得圖塊定義。
從這裡,最後一步是建立圖塊參考。
當您執行圖表時,您應該會看到新的圖塊參考沿廊道展示在模型空間中。以下是最酷的部分 - 如果圖表的執行模式設定為「自動」,而且您編輯了 Excel 檔案,圖塊參考會自動更新!
您可以在使用者介面一節閱讀有關圖表執行模式的更多資訊。
以下是使用 Dynamo 播放器執行圖表的範例。
如果您不熟悉 Dynamo 播放器,請查看 Dynamo 播放器一節。
在 Dynamo 中視覺化廊道幾何圖形,有助於提供情境脈絡。此特定模型已在模型空間中萃取出廊道實體,因此我們將這些實體帶入 Dynamo。
但還有其他事情需要考慮。實體相對而言是「比較重」的幾何圖形類型,這表示此作業將減慢圖表速度。如果有一個簡單的方式可以 選擇 是否要檢視實體會更好。一種明顯的解決方法是拔掉 Corridor.GetSolids 節點,但這會對所有下游節點產生警告,而這看起來會有點雜亂。這時就是 ScopeIf 節點真正發揮功能的時候了。
請注意 Object.Geometry 節點底部有一條灰色列。這表示節點預覽已關閉 (在節點上按一下右鍵可存取),這樣 GeometryColor.ByGeometryColor 就可以避免為了背景預覽的顯示優先順序而與其他幾何圖形「競爭」。
ScopeIf 節點基本上可讓您選擇性地執行一條完整的節點分支。如果 test 輸入為 false,則連接至 ScopeIf 節點的每個節點都不會執行。
以下是 Dynamo 背景預覽的結果。
以下是一些如何擴充此圖表功能的構想。
在 Excel 檔案中新增 旋轉 一欄,就可以使用它驅動座標系統的旋轉。
在 Excel 檔案中新增 水平或垂直偏移,就可以視需要讓燈柱偏離廊道地勢線。
直接在 Dynamo 中 中使用起點樁號和典型間距產生樁號值,而不使用內含樁號值的 Excel 檔案。
典型住宅開發的工程設計涉及使用數個地下公共設施,例如污水管、雨水排水、飲用水或其他。此範例將示範如何使用 Dynamo 繪製從分佈主線到指定基地 (即宗地) 的服務連接。每個基地通常都需要連接服務,這使得放置所有服務的工作相當繁瑣。Dynamo 可以自動精確繪製必要的幾何圖形,並提供可做調整以符合本端代理標準的彈性輸入,來加快流程。
使用 Select Object 節點供使用者輸入
使用座標系統
使用幾何作業,例如 Geometry.DistanceTo 和 Geometry.ClosestPointTo
建立圖塊參考
控制物件併入設定
此圖表將在 Civil 3D 2020 及更高版本上執行。
首先,下載以下範例檔案,然後開啟 DWG 檔案和 Dynamo 圖表。
以下是此圖表中的邏輯概觀。
取得分佈主線的曲線幾何圖形
取得使用者所選界址線的曲線幾何圖形,如有必要可反轉
產生服務計量器的插入點
取得分佈主線最接近服務計量器位置的點
在模型空間中建立圖塊參考和線
我們開始吧!
我們的第一步是讓分佈主線的幾何圖形進入 Dynamo。我們要取得特定圖層上的所有物件,並接合在一起成為 Dynamo PolyCurve,而不是選取個別的線或聚合線。
如果您不熟悉 Dynamo 曲線幾何圖形,請查看曲線一節。
接下來,我們需要讓所選界址線的幾何圖形進入 Dynamo,以便我們可以使用它。適合進行此工作的工具是 Select Object 節點,可讓圖表的使用者在 Civil 3D 中點選特定物件。
我們還需要處理可能發生的潛在問題。界址線有起點和終點,這表示它有方向。為了讓圖表產生一致的結果,我們需要所有界址線的方向都一致。我們可以直接在圖表邏輯中說明此條件,這可以讓圖表更具彈性。
取得界址線的起點和終點。
測量每個點到分佈主線的距離,然後計算出哪個距離比較大。
想要的結果是,線的起點最接近分佈主線。如果不是如此,我們就反轉界址線的方向。否則,我們只需傳回原始界址線。
現在要來找出服務計量器的放置位置。放置通常由本端代理需求決定,因此我們只要提供可變更以滿足各種條件的輸入值。我們將使用沿界址線的座標系統做為建立點的參考。這可讓您非常輕鬆地定義相對於界址線的偏移,而不論其方位為何。
如果您不熟悉座標系統,請查看向量、平面和座標系統一節。
現在,我們需要取得分佈主線最接近服務計量器位置的點。這可讓我們在模型空間中繪製服務連接,以便能永遠與分佈主線互垂。Geometry.ClosestPointTo 節點是理想的解決方案。
這是分佈主線 PolyCurve
這些是服務計量器插入點
最後一步是在模型空間中實際建立物件。我們將使用先前產生的插入點來建立圖塊參考,然後使用分佈主線上的點來繪製連到服務連接的線。
當您執行圖表時,您應該會在模型空間中看到新的圖塊參考和服務連接線。請嘗試變更某些輸入,您會看到所有內容都會自動更新!
您可能會發現,在為一條界址線放置物件後,選取不同的界址線會導致物件被「移動」。
這是 Dynamo 的預設行為,在許多情況下非常有用。但是,您可能要依序放置多個服務連接,讓 Dynamo 在每次執行時建立新物件,而不是修改原始物件。您可以變更物件併入設定來控制此行為。
請查看物件併入一節,以取得更多資訊。
變更此設定將強制 Dynamo「忘記」每次執行時所建立的物件。以下是在關閉物件併入的情況下,使用 Dynamo 播放器執行圖表的範例。
如果您不熟悉 Dynamo 播放器,請查看 Dynamo 播放器一節。
以下是一些如何擴充此圖表功能的構想。
同時放置 多個服務連接,而不是選取每條界址線。
將輸入調整為改放置 污水管清掃口,而不是供水服務計量器。
加入開關,以允許在界址線的特定一側 (而非兩側) 放置單一服務連接。
制定運動包絡線以供間隙驗證,是軌道設計的重要一環。Dynamo 可用來產生包絡線的實體,而不是建立和管理複雜的廊道次組合來執行工作。
使用廊道地勢線
在座標系統之間轉換幾何圖形
透過斷面混成建立實體
使用交織設定控制節點行為
此圖表將在 Civil 3D 2020 及更高版本上執行。
首先,下載以下範例檔案,然後開啟 DWG 檔案和 Dynamo 圖表。
以下是此圖表中的邏輯概觀。
從指定的廊道基準線取得地勢線
沿廊道地勢線以所需間距產生座標系統
將縱斷面圖塊幾何圖形轉換至座標系統
在輪廓之間斷面混成實體
在 Civil 3D 中建立實體
我們開始吧!
我們的第一步是取得廊道資料。我們將依名稱選取廊道模型,取得廊道內的特定基準線,然後依其點代碼取得基準線內的地勢線。
我們現在要沿廊道地勢線,在指定的起點樁號和終點樁號之間產生座標系統。這些座標系統將用於將車輛縱斷面圖塊幾何圖形與廊道對齊。
請注意節點右下角的小 XXX。這表示節點的交織設定已設定為_笛卡兒積_,如此才能在兩條地勢線的相同樁號值處產生座標系統。
現在,我們需要以某種方式沿地勢線建立一系列車輛縱斷面。我們將使用 Geometry.Transform 節點,從車輛縱斷面圖塊定義來轉換幾何圖形。這是一個難以理解的概念,因此在我們查看節點之前,這裡有一個圖表顯示將要發生的情況。
因此,我們基本上是從_單一_圖塊定義中取得 Dynamo 幾何圖形,然後移動/旋轉它,同時沿地勢線建立一個陣列。好酷的東西!以下是節點序列的外觀。
這會從文件中取得圖塊定義。
這些節點會取得圖塊內物件的 Dynamo 幾何圖形。
這些節點基本上是定義我們要從中轉換幾何圖形的_來源_座標系統。
最後,此節點會實際執行轉換幾何圖形的工作。
請注意此節點上_最長的_交織。
以下是我們在 Dynamo 中得到的結果。
好消息!辛苦的工作已經完成。我們現在只需在輪廓之間產生實體。這可以透過 Solid.ByLoft 節點輕鬆完成。
以下是結果。請記住,這些是 Dynamo 實體 - 我們仍需要在 Civil 3D 中建立它們。
我們的最後一步是將產生的實體輸出至模型空間。我們也為它們塗上顏色,比較容易看清楚。
以下是使用 Dynamo 播放器執行圖表的範例。
以下是一些如何擴充此圖表功能的構想。
加入針對每條軌道分別使用 不同樁號範圍 的功能。
將實體分割 為可單獨分析衝突的較小區段。
請檢查包絡線實體是否 與圖徵相交,並為發生衝突的實體著色。
對於許多從測量現場到完成工作的流程而言,在 Civil 3D 中使用 COGO 點和點群組是核心要素。Dynamo 在資料管理方面非常出色,我們將在此範例中示範一個可能的使用案例。
使用清單
使用 List.GroupByKey 節點將類似物件分組
在 Dynamo 播放器中展示自訂輸出
此圖表將在 Civil 3D 2020 及更高版本上執行。
首先,下載以下範例檔案,然後開啟 DWG 檔案和 Dynamo 圖表。
以下是此圖表中的邏輯概觀。
取得文件中所有的 COGO 點
依描述將 COGO 點分組
建立點群組
將摘要輸出至 Dynamo 播放器
我們開始吧!
第一步是取得文件中所有的點群組,然後取得每個群組內的所有 COGO 點。這會產生一個 巢狀清單,也就是「清單的清單」,如果稍後使用 List.Flatten 節點將所有內容向下展開為單一清單,會更容易處理。
我們現在已有全部的 COGO 點,需要根據其描述分為多個群組。這正是 List.GroupByKey 節點所做的工作。它基本上會將共用相同鍵的所有項目分組在一起。
辛苦的工作已經完成!最後一步是從分組的 COGO 點建立新的 Civil 3D 點群組。
當您執行圖表時,Dynamo 背景預覽中沒有任何內容可供查看,因為我們沒有處理任何幾何圖形。因此,查看圖表是否正確執行的唯一方法是檢查「工具區」,或查看節點輸出預覽。但是,如果我們使用 Dynamo 播放器執行圖表,則可以透過輸出已建立的點群組摘要,提供更多有關圖表結果的回饋。您只需在節點上按一下右鍵,然後設定為 「是輸出」 即可。在此範例中,我們使用更名過的 Watch 節點來檢視結果。
以下是使用 Dynamo 播放器執行圖表的範例。
以下是一些如何擴充此圖表功能的構想。
將點群組修改為根據 完整描述,而非原始描述。
將點分組,分組時依據您選擇的其他某些 預先定義的品類 (例如,「地面快照」、「碑界」等)。
為某些群組中的點自動建立不規則三角網地形。
Dynamo for Civil 3D 包含功能非常強大的機制,可「記住」每個節點建立的物件。此機制稱為物件併入,它可讓 Dynamo 圖表在每次在同一個文件中執行時產生一致的結果。雖然在許多情況下這非常理想,但有時候,您可能想要對 Dynamo 的行為有更多控制。本節將協助您瞭解物件併入如何運作,以及如何利用此機制。
考慮這個在模型空間中的目前圖層上建立圓的圖表。
請注意半徑變更時所發生的情況。
這是物件併入處於作用中的情況。Dynamo 的預設行為是_修改_圓的半徑,而不是每次半徑輸入變更時就建立一個新的圓。這是因為每次執行圖表時,Object.ByGeometry 節點會「記住」它建立了這個_特定的_圓。此外,Dynamo 會儲存此資訊,以便下次您開啟 Civil 3D 文件並執行圖表時,圖表就會有完全相同的行為。
我們來看一個您要變更 Dynamo 預設物件併入行為的範例。假設您要建置一個將文字放在圓中央的圖表。但是,您使用此圖表的目的是,可以一直重複執行圖表,而每次執行時無論選取哪個圓,都可以放置新的文字。這是圖表的外觀。
但是,以下是實際上選取不同圓時所發生的情況。
進行這項變更後,我們會得到我們想要的行為。
Dynamo for Civil 3D 允許透過 「Dynamo」 功能表中的 「併入資料儲存」 設定,修改預設的物件併入行為。
請注意,「併入資料儲存」選項在 Civil 3D 2022.1 及更高版本中提供。
預設會啟用所有選項。以下是每個選項的功能摘要。
啟用此選項後,Dynamo 會「忘記」上次執行圖表時建立的物件。因此,圖表可在任何情況下在任何圖面中執行,並且每次都會建立新物件。
使用時機
當您希望 Dynamo「忘記」先前執行時所做的所有動作,並且每次都建立新物件時,請使用此選項。
此選項表示在儲存物件併入中繼資料時,會將其序列化至圖表 (.dyn 檔)。如果您關閉/重新開啟圖表,並在相同圖面中執行該圖表,則所有作業應與您之前離開圖表時相同。如果您在不同圖面中執行圖表,則將從圖表中移除併入資料,並建立新物件。這表示如果您開啟原始圖面並再次執行圖表,將建立除舊物件之外的新物件。
使用時機
如果您希望 Dynamo「記住」上次在特定圖面中執行時建立的物件,請使用此選項。
此選項最適合 特定圖面 與 Dynamo 圖表之間可以維持 1:1 關係的情況。選項 1 和 3 較適合設計為在多個圖面上執行的圖表。
這與選項 2 類似,不同之處在於物件併入資料是在圖面中而不是在圖表 (.dyn 檔) 中序列化。如果您關閉/重新開啟圖表,並在相同圖面中執行該圖表,則所有作業應與您之前離開圖表時相同。如果您在不同圖面中執行圖表,則併入資料仍會保留在原始圖面中,因為併入資料是儲存在圖面中而不是圖表中。
使用時機
如果您要在多個圖面中使用同一個圖表,並讓 Dynamo「記住」它在每個圖面中所做的動作,請使用此選項。
使用此選項時首先需要注意,透過 Dynamo 主介面執行圖表時,這不會影響圖表與圖面的互動方式。此選項_只_在使用 Dynamo 播放器執行圖表時適用。
如果您使用 Dynamo 主介面執行圖表,然後關閉主介面並使用 Dynamo 播放器執行同一個圖表,則會在之前建立的物件之上建立新物件。但是,Dynamo 播放器執行圖表一次後,就會序列化圖面中的物件併入資料。因此,如果您透過 Dynamo 播放器執行圖表多次,它會更新物件而不是建立新物件。如果您在不同圖面上透過 Dynamo 播放器執行圖表,則併入資料仍會保留在原始圖面中,因為併入資料是儲存在圖面中而不是圖表中。
使用時機
如果您要在多個圖面中使用 Dynamo 播放器執行圖表,並「記住」它在每個圖面中所做的動作,請使用此選項。
在管網中加入管和結構時,Civil 3D 會使用樣板自動指定名稱。這在一開始放置時通常足以應付,但是隨著設計逐漸發展,名稱在未來必然會有所變化。此外,我們可能需要許多不同的命名模式,例如在管路中從最下游的結構開始按順序命名結構,或按照與本端代理的資料架構一致的命名模式來命名結構。此範例將示範如何使用 Dynamo 定義任何類型的命名策略,並且以一致的方式套用。
使用邊界框
使用 List.FilterByBoolMask 節點篩選資料
使用 List.SortByKey 節點排序資料
產生和修改文字字串
此圖表將在 Civil 3D 2020 及更高版本上執行。
首先,下載以下範例檔案,然後開啟 DWG 檔案和 Dynamo 圖表。
以下是此圖表中的邏輯概觀。
依圖層選取結構
取得結構位置
依偏移篩選結構,然後依樁號排序
產生新名稱
更名結構
我們開始吧!
我們首先需要選取要使用的所有結構。我們會透過只選取特定圖層上的所有物件來執行此作業,這表示我們可以從不同的管網 (假設共用相同圖層) 選取結構。
此節點可確保我們不會意外擷取任何不想要但可能與結構共用相同圖層的物件類型。
我們現在有了結構,我們需要找出它們在空間中的位置,以便可以根據位置對結構排序。為了執行此作業,我們將利用每個物件的邊界框。物件的邊界框是完全包含物件幾何實際範圍的最小方塊。透過計算邊界框的中心,我們可以得到結構很近似的插入點。
我們將使用這些點來取得結構相對於所選定線的樁號和偏移。
從這裡開始,事情會變得有點棘手。在此階段,我們有一個大型清單,列出我們指定的圖層上的所有結構,並選擇了要沿其排序結構的定線。問題是清單中可能有我們不想更名的結構。例如,這類結構可能不是我們感興趣的特定管路。
選取的定線
要更名的結構
應忽略的結構
因此,我們需要篩選結構清單,這樣就不用考慮那些與該定線之間大於特定偏移的結構。這最適合使用 List.FilterByBoolMask 節點完成。篩選結構清單後,我們使用 List.SortByKey 節點,依其樁號值排序。
檢查結構的偏移是否小於門檻值
將任何空值取代為 false
篩選結構和樁號的清單
依樁號排序結構
我們要做的最後一項工作,是為結構建立新名稱。我們將使用的格式為 <alignment name>-STRC-<number>
。這裡還有額外幾個節點,是需要時以額外的零填補數字 (例如,「01」而不是「1」)。
最後也是同樣重要的,我們更名結構。
以下是使用 Dynamo 播放器執行圖表的範例。
利用 Dynamo 的 3D 背景預覽來視覺化圖表的中間輸出,而不是只顯示最終結果,會很有幫助。我們可以做一件簡單的事情,就是顯示結構的邊界框。此外,此特定資料集在文件中有廊道,因此我們可以將廊道地勢線幾何圖形帶入 Dynamo,為結構在空間中的位置提供一些情境脈絡。如果圖表是用在沒有任何廊道的資料集,則這些節點就不會執行任何作業。
現在,我們可以更清楚瞭解透過偏移篩選結構的流程如何運作。
以下是一些如何擴充此圖表功能的構想。
根據結構 最接近的定線 (而不是選取特定定線) 更名結構。
除了更名結構外,還 更名管。
根據結構的管路 設定圖層。
建置一個將文字插入模型空間的 Dynamo 圖表。
任務完成!
在 Excel 檔案中指定的樁號值處,沿廊道放置燈柱圖塊參考。
任務完成!
將供水服務計量器圖塊參考放置在距界址線的指定偏移處,並為與分佈主線互垂的每個服務連接繪製一條線。
任務完成!
使用車輛縱斷面圖塊沿廊道產生間隙包絡線 3D 實體。
如果您不熟悉座標系統,請查看一節。
如果您不熟悉節點交織,請查看一節。
如果您不熟悉 Dynamo 播放器,請查看 一節。
任務完成!
為每個唯一的 COGO 點描述建立點群組。
如果您不熟悉使用清單,請查看一節。
如果您不熟悉 Dynamo 播放器,請查看 一節。
任務完成!
看起來每次執行圖表後,文字就會刪除再重新建立。實際上,文字的位置是根據選取的圓做了_修改_。所以它是相同的文字,只是位置不同!為了每次都能建立新文字,我們需要修改 Dynamo 的物件併入設定為不要保留併入資料 (請參閱下面的)。
如果您不熟悉 Dynamo 播放器,請查看 一節。
根據定線的樁號標示,按順序更名管網結構。
如果您不熟悉使用清單,請查看一節。
如果您不熟悉 Dynamo 播放器,請查看 一節。
任務完成!
Dynamo 播放器提供一個在 Civil 3D 中執行 Dynamo 圖表的簡化方式。建立圖表後,您不需要任何 Dynamo 專業知識就可以使用播放器並執行圖表。您可以很輕鬆將圖表分享給對節點和線路的細節不感興趣的其他使用者。
如需在 Civil 3D 中使用 Dynamo 播放器的更多資訊,請參閱 Civil 3D 說明網站上提供的文件。
Dynamo 套件是由協力廠商開發的工具集,旨在擴大 Dynamo 的核心功能。所有使用者都可以存取這些套件,只要按一下按鈕即可下載。
請參閱套件一節,以取得有關如何開始使用套件的更多資訊。
以下是一些最常用套件的清單,這些套件可將您的 Dynamo for Civil 3D 圖表提升到更高層次。
Civil 3D Toolkit 是一個 Dynamo for Civil 3D 套件,透過大量額外節點顯著增強 Dynamo 的功能。
Camber 是一個開放原始碼的 Dynamo for Civil 3D 套件,包含數百個用於處理標示、外部參考、資料捷徑、型式等等的節點。
CivilConnection 是一個開放原始碼的適用於 Revit 的 Dynamo 套件,可讓您在 Civil 3D、Dynamo 和 Revit 之間交換資訊。
Arkance Systems Nodes 是一個 Dynamo for Civil 3D 套件,當中有各種有用的節點,可處理標註、表格、視圖、鑽孔控制等等。
雖然 Dynamo 作為視覺程式設計工具的功能非常強大,但它不僅僅只有節點和線路,還能以文字形式撰寫程式碼。有兩種方法可以達到這個目的:
使用程式碼區塊撰寫 DesignScript
使用 Python 節點撰寫 Python
本節會重點介紹如何在 Civil 3D 環境中運用 Python,以善加活用 AutoCAD 和 Civil 3D .NET API。
請查看 Python 一節,以取得有關在 Dynamo 中使用 Python 的更多一般資訊。
AutoCAD 和 Civil 3D 兩者都有數個可用的 API,可讓像您這樣的開發人員透過自訂功能延伸核心產品。在 Dynamo 環境中,相關的是 Managed .NET API。以下連結對於瞭解 API 的結構及其運作方式非常重要。
在您進行本節時,可能會有一些您不熟悉的概念,例如資料庫、交易、方法、性質等等。這當中的許多概念是使用 .NET API 的核心,並非專屬於 Dynamo 或 Python。詳細討論這些內容超出 Primer 本節的範圍,因此我們建議您經常參考上述連結以取得更多資訊。
當您第一次編輯新的 Python 節點時,會預先填入樣板程式碼讓您開始使用。以下是樣板的分解,其中包含有關每個圖塊的說明。
匯入
sys
和clr
模組,Python 解譯器必須有這兩個模組才能正常運作。尤其是clr
模組,可讓 .NET 名稱空間基本上被視為 Python 套件。載入標準組合 (即 DLL),以搭配 AutoCAD 和 Civil 3D 的 Managed .NET API 使用。
加入標準 AutoCAD 和 Civil 3D 名稱空間的參考。這些參考分別相當於 C# 的
using
指示詞或 VB.NET 的Imports
指示詞。使用名為
IN
的預先定義清單可存取節點的輸入埠。您可以使用埠的索引號碼存取特定埠的資料,例如dataInFirstPort = IN[0]
。取得作用中的文件和編輯器。
鎖住文件並啟動資料庫交易。
將大部分指令碼邏輯放在這裡。
將這一行取消註解,即可在主要工作完成後提交交易。
如果您要輸出節點中的任何資料,請在指令碼結尾將資料指定給
OUT
變數。
想要自訂?
您可以編輯 C:\ProgramData\Autodesk\C3D <version>\Dynamo
中的 PythonTemplate.py
檔案,修改預設的 Python 樣板。
接下來我們透過一個範例來示範在 Dynamo for Civil 3D 中撰寫 Python 指令碼的一些基本概念。
以下是您可在此練習中參考的範例檔案。
以下是此圖表中的邏輯概觀。
檢閱 Civil 3D API 文件
依圖層名稱選取文件中所有的集水區
「拆開」Dynamo 物件以存取內部的 Civil 3D API 成員
從 AutoCAD 點建立 Dynamo 點
從點建立 PolyCurve
我們開始吧!
在開始建置圖表和撰寫程式碼之前,最好先查看 Civil 3D API 文件,瞭解 API 可提供哪些內容。在此案例中,集水區類別中有一個性質,將傳回集水區的邊界點。請注意,此性質會傳回 Point3dCollection
物件,但 Dynamo 不會知道該如何處理這個物件。換言之,我們無法從 Point3dCollection
建立 PolyCurve,因此最終我們需要將所有內容轉換為 Dynamo 點。我們稍後會再說明。
現在,我們可以開始建置圖表邏輯。首先,取得文件中所有集水區的清單。有一些節點可以進行,因此我們不需要在 Python 指令碼中包含這項作業。使用節點可讓其他人 (比起在 Python 指令碼中放入大量程式碼) 更容易閱讀圖表,也可以讓 Python 指令碼只專注在一件事:傳回集水區的邊界點。
請注意,All Objects on Layer 節點的輸出是一個 CivilObject 的清單。這是因為 Dynamo for Civil 3D 目前沒有任何節點可處理集水區,因此我們需要透過 Python 存取 API。
進一步瞭解之前,先需要簡單討論一個重要概念。在節點資源庫一節,我們討論了 Object 與 CivilObject 的關聯方式。再更詳細一點,Dynamo Object 是 AutoCAD Entity 的一個包裝函式。同樣地,Dynamo CivilObject 是 Civil 3D Entity 的一個包裝函式。您可以存取物件的 InternalDBObject
或 InternalObjectId
性質來「拆開」物件。
根據經驗法則,使用 InternalObjectId
性質取得物件 ID,然後在交易中存取包裝後的物件通常比較安全。這是因為 InternalDBObject
性質會傳回非處於可寫入狀態的 AutoCAD DBObject。
以下是存取內部集水區物件並取得其邊界點的完整 Python 指令碼。亮顯的行表示從預設樣板程式碼修改/增加的行。
按一下指令碼中加底線的文字,可查看每一行的說明。
根據經驗法則,最好是將大部分指令碼邏輯內容放在交易內。這可確保安全地存取指令碼讀取/寫入的物件。在許多情況下,忽略交易可能會導致嚴重錯誤。
在此階段,Python 指令碼應該會輸出一個 Dynamo 點清單,您可以在背景預覽中看到這些點。最後一步只是從這些點建立 PolyCurve。請注意,您也可以直接在 Python 指令碼中完成這一步,但我們刻意將它放在指令碼外的節點中,這樣可以看得更清楚。這是最終圖表的外觀。
這是最終的 Dynamo 幾何圖形。
在收尾前,我們在這裡快速地總結。根據您使用的 Civil 3D 版本,Python 節點的規劃可能會有所不同。在 Civil 3D 2020 和 2021 中,Dynamo 使用一個稱為 IronPython 的工具,在 .NET 物件與 Python 指令碼之間移動資料。但是,在 Civil 3D 2022 中,Dynamo 已轉變為使用標準原生的 Python 解譯器 (也稱為 CPython),而不是使用 Python 3。這項轉換的優點包括可存取常見的新式資源庫和新的平台功能、基本維護和安全性修補。
您可以在 Dynamo 部落格閱讀更多有關此項轉換,以及如何升級舊式指令碼的資訊。如果您想要繼續使用 IronPython,只需使用 Dynamo Package Manager 安裝 DynamoIronPython2.7 套件。
這一行會從 Dynamo 幾何圖形資源庫取得我們需要的特定類別。請注意,我們在這裡指定 import Point as DynPoint
,而不是 import *
,因為後者會導致命名衝突。
我們在這裡明確指定哪個輸入埠包含需要的資料,而不是預設的 IN
,後者指的是所有輸入的整個清單。
取得圖面中所有集水區的邊界幾何圖形。
Dynamo 類型 | 包裝 |
---|---|
任務完成!
Object Autodesk.AutoCAD.DynamoNodes.Object
Entity Autodesk.AutoCAD.DatabaseServices.Entity
CivilObject Autodesk.Civil.DynamoNodes.CivilObject
Entity Autodesk.Civil.DatabaseServices.Entity