Dynamo for Civil 3D には、各ノードで作成されたオブジェクトを「記憶する」ための非常に強力なメカニズムが含まれています。このメカニズムはオブジェクト バインドと呼ばれ、これにより、Dynamo グラフは同じドキュメントで実行されるたびに一貫した結果を生成することができます。これは多くの状況で非常に望ましいことですが、Dynamo の動作をより詳細にコントロールしなければならない場合もあります。このセクションでは、オブジェクト バインドの仕組みと、その利点について説明します。
このオプションで最初に注意する点は、メインの Dynamo インタフェースでグラフを実行する場合に、グラフと図面の相互作用に影響を与えないことです。このオプションは、Dynamo プレーヤを使用してグラフを実行する場合に のみ 適用されます。
Dynamo プレーヤを初めて使用する場合は、「 」セクションを参照してください。
メインの Dynamo インタフェースを使用してグラフを実行し、その後閉じて、次に Dynamo プレーヤを使用して同じグラフを実行すると、以前に作成したオブジェクトの上に新しいオブジェクトが作成されます。ただし、Dynamo プレーヤでグラフを一度実行すると、図面内のオブジェクト バインド データがシリアル化されます。したがって、Dynamo プレーヤでグラフを複数回実行する場合、新しいオブジェクトを作成するのではなく、オブジェクトが更新されます。別の図面で Dynamo プレーヤを使用してグラフを実行した場合、バインド データはグラフではなく図面に保存されるため、元の図面で保持されます。
使用する状況
このオプションは、複数の図面で Dynamo プレーヤを使用してグラフを実行し、各グラフで行ったことを「記憶」させる場合に使用します。
時間の経過とともに、基本を超えて、Dynamo の内部の仕組みを詳細に理解する必要が出てくることがあります。このセクションのページでは、グラフを次のレベルに引き上げることができるように、Dynamo for Civil 3D の高度な機能を明らかにしていきます。
Python と Civil 3D
Dynamo はビジュアル プログラミング ツールとして非常に強力ですが、ノードやワイヤを超えて、テキスト形式でコードを記述することもできます。これを行うには、次の 2 つの方法があります。
Code Block ノードを使用して DesignScript を記述する
Python ノードを使用して Python を記述する
このセクションでは、Civil 3D 環境で Python を活用して、AutoCAD および Civil 3D .NET API を利用する方法について説明します。
Dynamo での Python の使用に関する一般情報については、「 」セクションを参照してください。
API ドキュメント
AutoCAD と Civil 3D にはどちらにも、開発者がカスタム機能を使用してコア製品を拡張できるようにする複数の API が用意されています。Dynamo のコンテキストで関連するのは、Managed .NET API です。次のリンクは、API の構造とその仕組みを理解するために不可欠です。
このセクションを進めていくと、データベース、トランザクション、メソッド、プロパティなど、馴染みのない概念が出てくるかもしれません。これらの概念の多くは、.NET API を使用するための中核であり、Dynamo や Python に固有のものではありません。これらの項目の詳細については、Primer のこのセクションでは取り上げません。詳細については、上記のリンクを頻繁に参照することをお勧めします。
Dynamo for Civil 3D で Python スクリプトを作成する場合の基本的な概念について、例を見ていきましょう。
目標
🎯 図面内のすべての集水域の境界ジオメトリを取得します。
データセット
この演習で参照できるサンプル ファイルを次に示します。
対処法の概要
このグラフのロジックの概要を次に示します。
Civil 3D API のドキュメントを確認する
レイヤ名でドキュメント内のすべての集水域を選択する
Dynamo オブジェクトを「アンラップ」して、内部の Civil 3D API メンバーにアクセスする
以上です。
API ドキュメントを確認する
グラフの作成とコードの作成を開始する前に、Civil 3D API のドキュメントを参照して、API が提供する機能を理解することをお勧めします。この場合、集水域の境界点を返すに存在します。このプロパティは、Dynamo が処理する必要があるオブジェクトとは異なる Point3dCollection オブジェクトを返すことに注意してください。つまり、Point3dCollection からポリカーブを作成することはできないため、最終的にはすべてを Dynamo の点に変換する必要があります。詳細については、後で説明します。
All Objects on Layer ノードからの出力は、CivilObjects のリストであることに注意してください。これは、Dynamo for Civil 3D には現在、集水域を操作するためのノードが存在しないためです。これが、Python を使用して API にアクセスする必要がある理由です。