API スクリプトの例: COGO ポイントの生成

ポイントを作成したり、ポイント グループにポイントを追加したり、およびポイント グループからサーフェスを作成する場合は、Autodesk Dynamo for Civil 3D で新しいノードを作成します。

サンプル Dynamo スクリプト: CoGoPoints.dyn

サンプル プロジェクト: CoGoPoints.dwg

  1. NET Framework 4.7 を使用して CoGoPoints Class Library(.Net Framework)と呼ばれる新しい C# プロジェクトを作成します。
  2. プロジェクトに、Point.cs、PointGroup.cs、および Surface.cs の各ファイルを追加します。
  3. Civil 3D インストール パスから AeccDbMgd.dll などのファイルのリファレンスを追加します。
  4. ソリューションを構築し、CoGoPoints.dll を生成します。
  5. Civil 3D を実行し、CoGoPoints.dwg を開きます。
  6. [管理]タブ [ビジュアル プログラミング]パネル [Dynamo] をクリックします。
  7. [ファイル] [ライブラリを読み込み]を選択し、CoGoPoints.dll を読み込みます。

    CoGoPoints.dll を読み込む際に作成されたノードが次の図表に表示されます。

  8. CoGoPoints.dyn スクリプトを開いて実行します。

    COGO ポイントが図表内に作成され、ポイント グループに追加され、サーフェスがポイント グループから作成されます。

新しいノードを作成し、トレース メカニズムを新しいノードに追加するために、Dynamo では 2 つのクラスが用意されています。
  1. Autodesk.AutoCAD.DynamoNodes.ObjectBase: Autodesk.AutoCAD.DatabaseServices.DBObject をカプセル化します
  2. Autodesk.AutoCAD.DynamoNodes.Object: Autodesk.AutoCAD.DynamoNodes.ObjectBase から派生し、Autodesk.AutoCAD.DatabaseServices.Object に従ってプロパティまたは関数を拡張します

Dynamo には、トレース メカニズムを実現するために 2 つの方法があります。1 つは既存のメソッド(CommonConstruct)を使用します(新しいノードの作成時)。もう 1 つはテンプレートでトレース コードを作成します。

新しいノードのトレース メカニズムを実現するには、クラスが Autodesk.AutoCAD.DynamoNodes.ObjectBase または Autodesk.AutoCAD.DynamoNodes.Object から派生している必要があります。トレース ノードでは、トレースを有効にするためにノードで作成されたクラスの出力を使用する必要があります。

トレース メソッド(CommonConstruct)を使用する

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.PointGroup
TObject は、Autodesk.AutoCAD.DatabaseServices.DBObject を継承する必要がある AutoCAD オブジェクトのタイプです。
この例の場合は、次のようになります。
TObject = Autodesk.Civil.DatabaseServices.PointGroup
objectCreator 関数はオブジェクトを作成します。この例では、新しいポイント グループの作成として定義されています。

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 について

DocumentContext により、データベースに対する読み取り/書き込みアクセスに対して、またデータベース オブジェクトを開くためのトランザクションを行う際にドキュメント ロックが取得されます。データベース オブジェクトの読み取りまたは書き込みを行うノードは、上記メソッドを使用する必要があります。