在 Autodesk Dynamo for Civil 3D 中建立新節點,以建立點、將點加入點群組,以及從點群組建立地形。
範本 Dynamo 腳本:CoGoPoints.dyn
範例專案:CoGoPoints.dwg
下圖顯示的是您在匯入 CoGoPoints.dll 時所建立的節點。
會在圖面中建 立 COGO 點,並將 COGO 點加入至點群組,且系統會以點群組建立地形。
![]() |
![]() |
Dynamo 提供了兩種方法實現追蹤機制。其中一種方法是在建立新節點時使用既有方法 (CommonConstruct)。另一種是以樣板寫入追蹤程式碼。
若要在新節點上實現追蹤機制,則類別必須衍生自 Autodesk.AutoCAD.DynamoNodes.ObjectBase or Autodesk.AutoCAD.DynamoNodes.Object。追蹤的節點必須具有該節點已建立類別的輸出資料,才能讓追蹤生效。
CommonConstruct 函數會建立在 Autodesk.AutoCAD.DynamoNodes.ObjectBase 與 Autodesk.AutoCAD.DynamoNodes.Object 中。
Autodesk.AutoCAD.DynamoNodes.ObjectBase | Autodesk.AutoCAD.DynamoNodes.Object |
---|---|
![]() |
![]() |
您可以建立類別,以繼承 Autodesk.AutoCAD.DynamoNodes.ObjectBase 或 Autodesk.AutoCAD.DynamoNodes.Object。當您按照繼承關係來建立新節點時,會呼叫上述方法。例如,請注意以下 PointGroup.CreateFromPoints 節點。
節點會依據點清單在 Civil 3D 中建立點群組。
Autodesk.Civil.DatabaseServices.PointGroup 會在 Civil 3D 中定義衍生自 Autodesk.AutoCAD.DatabaseServices.Object 的點群組。必須建立衍生自 Autodesk.AutoCAD.DynamoNodes.Objectbase 的新類別,該類別名為 PointGroup,如此才能封裝 Civil 3D 點群組類型。可將 DynamoServices.RegisterForTrace 屬性加入 PointGroup 類別,以實現追蹤機制。這並非必要,因為依預設會受到 Dynamo 支援,但這是不錯的編碼常規。
現在可以在 PointGroup 中定義 CreateFromPoints 節點。由於固有關係的緣故,會呼叫 Autodesk.AutoCAD.DynamoNodes.ObjectBase 中的 CommonConstruct。
TNode 方法的類型是節點,必須使用此方法才能繼承 Autodesk.AutoCAD.DynamoNodes.ObjectBase。
TNode = CogoPoints.PointGroupTObject 的類型是 AutoCAD 物件,必須有此物件才能繼承 Autodesk.AutoCAD.DatabaseServices.DBObject。
TObject = Autodesk.Civil.DatabaseServices.PointGroupobjectCreator 函數可建立物件。在此範例中,會將其定義為建立新的點群組。
objectUpdater 函數會更新物件。在此範例中,會將其定義為更新既有的點群組。
CommonConstruct 函數會嘗試在追蹤處理碼中尋找既有物件。若有找到,就會以具有 isExisting==true 的呼叫 objectUpdater 進行更新。如果更新失敗,objectCreator 會進行呼叫來建立新物件,然後 objectUpdater 則會呼叫 isExisting==false。
CommonConstruct 函數會嘗試更新資料庫中具有相同追蹤處理碼值的既有物件。如果失敗,則會建立新物件。如果物件不支援更新,您可以傳回 isExisting==false。這表示會建立一個新物件並刪除舊物件。CommonConstruct 在這種情況下,仍會嘗試維持相同的處理碼值。
完整的範例程式碼會顯示在 PointGroup.cs 中,而 Autodesk.AutoCAD.DynamoNodes.Object 中的 CommonConstruct 方法如上所述。
您可以透過以下樣本編寫追蹤程式碼。但是,新節點的類別仍需要繼承 Autodesk.AutoCAD.DynamoNodes.Object 或 Autodesk.AutoCAD.DynamoNodes.Entity。
您可以填入建立程式碼和更新程式碼,以實現上述樣板中的追蹤程式碼。
DocumentContext 會確保取得文件鎖,以獲得讀取/寫入資料庫的存取權,以及在交易時用以開啟資料庫物件。任何想要讀取或寫入資料庫物件的節點,都必須使用上述方法。