ポイントを作成したり、ポイント グループにポイントを追加したり、およびポイント グループからサーフェスを作成する場合は、Autodesk Dynamo for Civil 3D で新しいノードを作成します。
サンプル Dynamo スクリプト: CoGoPoints.dyn
サンプル プロジェクト: CoGoPoints.dwg
CoGoPoints.dll を読み込む際に作成されたノードが次の図表に表示されます。
COGO ポイントが図表内に作成され、ポイント グループに追加され、サーフェスがポイント グループから作成されます。
![]() |
![]() |
Dynamo には、トレース メカニズムを実現するために 2 つの方法があります。1 つは既存のメソッド(CommonConstruct)を使用します(新しいノードの作成時)。もう 1 つはテンプレートでトレース コードを作成します。
新しいノードのトレース メカニズムを実現するには、クラスが Autodesk.AutoCAD.DynamoNodes.ObjectBase または 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 は、Autodesk.AutoCAD.DatabaseServices.Object から派生した Civil 3D でポイント グループを定義します。Civil 3D ポイント グループ タイプがカプセル化されるように、Autodesk.AutoCAD.DynamoNodes.ObjectBase から派生した PointGroup と呼ばれる新しいクラスを作成する必要があります。DynamoServices.RegisterForTrace 属性を PointGroup クラスに追加して、トレース メカニズムを実現することができます。Dynamo は既定でこの機能をサポートしているためこれは不要ですが、推奨されるコーディング規則です。
CreateFromPoints ノードが PointGroup で定義できるようになりました。継承関係があるため、Autodesk.AutoCAD.DynamoNodes.ObjectBase の CommonConstruct が呼び出されます。
TNode メソッドはノードのタイプで、Autodesk.AutoCAD.DynamoNodes.ObjectBase を継承する必要があります。
TNode = CogoPoints.PointGroupTObject は、Autodesk.AutoCAD.DatabaseServices.DBObject を継承する必要がある AutoCAD オブジェクトのタイプです。
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 により、データベースに対する読み取り/書き込みアクセスに対して、またデータベース オブジェクトを開くためのトランザクションを行う際にドキュメント ロックが取得されます。データベース オブジェクトの読み取りまたは書き込みを行うノードは、上記メソッドを使用する必要があります。