All pages
Powered by GitBook
1 of 21

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Civil 3D の接続

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 バージョン
メモ

2.13

Dynamo のユーザ インタフェースの更新

2022.1

2.12

  • オブジェクト バインド データ ストレージ設定を追加

  • オブジェクト バインドをコントロールするための新しいノード

2022

2.10

  • Civil 3D のメイン インストールに追加

  • IronPython から Python.NET に移行

2021

2.5

2020.2

2.4

2020 Update 2

2.4

新しいノードの追加

2020.1

2.2

2020

2.1

初回リリース

2024.1

2.18

2024

2.17

Dynamo プレーヤのユーザ インタフェースの更新

2023.2

2.15

Dynamo Blog
Dynamo インタフェース、Civil 3D 2020 ~ 2022
Dynamo インタフェース、Civil 3D 2023 ~現在

2023

Dynamo for Civil 3D

Dynamo は当初は Revit を念頭に置いて開発されたものでしたが、ビジュアル プログラミング ツールとしての汎用性は Revit を超えています。Dynamo は Civil 3D にも統合されるため 、ユーザは土木インフラストラクチャ プロジェクト用の強力な自動化ルーチンを作成できます。これは、一般的なタスクから最も複雑な設計ワークフローまで、あらゆる処理を行う上で非常に便利なツールであり、最終的に、時間の節約、設計の最適化、設計の意思決定の向上に役立ちます。Dynamo には、Civil 3D 専用に設計されたさまざまなノードが用意されています。さらに活発なコミュニティで、各種のサードパーティ製ライブラリが開発されています。

Primer のこの章では、Dynamo for Civil 3D の基本から始めて、より高度なトピックへと進んでいきます。

軌道

スタートアップ

全体像について少し詳しく理解できたところで、Civil 3D で最初の Dynamo グラフを作成してみましょう。

これは、Dynamo の基本的な機能を説明することを意図した簡単な例です。新しい空の Civil 3D ドキュメントを使用して手順を実行することをお勧めします。

Dynamo を開く

最初の手順は、Civil 3D で空のドキュメントを開くことです。次に、Civil 3D リボンの [管理] タブにナビゲートし、[ビジュアル プログラミング] パネルを探します。

Dynamo ボタンをクリックすると、別のウィンドウで Dynamo が起動します。

Dynamo と Dynamo プレーヤの違いとは

Dynamo は、グラフの作成と実行に使用します。Dynamo プレーヤは、Dynamo でグラフを開くことなく簡単にグラフを実行できます。

使用してみる場合は、「」 セクションに進んでください。

新しいグラフを開始する

Dynamo を開くと、開始画面が表示されます。[新規] をクリックして、空のワークスペースを開きます。

サンプルについて

Dynamo for Civil 3D には、いくつかのグラフが事前に作成されています。これらのグラフを参考にして、Dynamo の使用方法に関してアイデアを発展させてください。いずれかの時点で、これらのサンプル グラフと、Primer 内の を確認することをお勧めします。

ノードを追加する

現在、空のワークスペースが表示されているはずです。Dynamo を実際に使用してみましょう。目標は次のとおりです。

🎯 モデル空間にテキストを挿入する Dynamo グラフを作成します。

とても簡単ですよね?しかし、開始する前に、いくつかの基礎事項を確認する必要があります。

Dynamo グラフの主要な構成要素は、ノードと呼ばれます。ノードは小さなマシンのようなものです。ノードにデータを入れると、そのデータに対して何らかの処理が行われ、結果が出力されます。Dynamo for Civil 3D には、ノードのライブラリが用意されています。このライブラリをワイヤで接続して、ノードが単独で実行する以上の規模と内容を実行できるグラフを形成することができます。

Dynamo を使用したことがない場合はどうすればよいですか?

見慣れないものがあるかもしれませんが、大丈夫です。次のセクションが役に立ちます。

では、グラフを作成しましょう。必要なすべてのノードのリストを以下に示します。

これらのノードを見つけるには、ライブラリの検索バーにノード名を入力するか、キャンバス内の任意の場所を右クリックして検索します。

使用するノードとそれらがある場所を調べる方法

ライブラリ内のノードは、動作に基づいて論理的なカテゴリにグループ化されています。詳細な説明については、 セクションを参照してください。

最終的なグラフは次ようになります。

ここで行った作業をまとめてみましょう。

  1. 作業するドキュメントを選択しました。この場合(多くの場合)、Civil 3D のアクティブなドキュメントで作業します。

  2. Text オブジェクトを作成する対象のブロック(この場合はモデル空間)を定義しました。

  3. String ノードを使用して、テキストを配置するレイヤを指定しました。

真新しいグラフの結果を確認しましょう。

結果を確認する

Civil 3D に戻り、[モデル] タブが選択されていることを確認します。Dynamo で作成された新しい Text オブジェクトが表示されるはずです。

テキストが表示されない場合は、[ズーム] -> [範囲]コマンドを実行して適切な位置にズームする必要があります。

素晴らしい。次に、テキストを更新します。

Dynamo グラフに戻り、テキスト文字列、挿入位置の座標などの入力値をいくつか変更します。Civil 3D でテキストが自動的に更新されます。また、入力ポートの 1 つを接続解除すると、テキストが削除されることにも注意してください。元通りにつなぎ直すと、テキストが再度作成されます。

グラフを実行するたびに Dynamo が新しい Text オブジェクトを挿入しない理由とは

既定では、Dynamo は作成したオブジェクトを「記憶」します。ノード入力値を変更すると、まったく新しいオブジェクトが作成されるのではなく、Civil 3D のオブジェクトが更新されます。この動作の詳細については、「」セクションを参照してください。

🎉 ミッションが達成されました。

次のステップ

この例では、Dynamo for Civil 3D で実行できる機能の基礎に触れただけです。詳細については読み続けてください。

土地

Point.ByCoordinates ノードを使用して点を作成し、テキストを配置する位置を定義しました。
  • 2 つの Number Slider ノードを使用して、テキスト挿入位置の X 座標と Y 座標を定義しました。

  • 別の String ノードを使用して、Text オブジェクトの内容を定義しました。

  • 最後に、Text オブジェクトを作成しました。

  • Dynamo プレーヤ
    サンプル ワークフロー
    ユーザ インタフェース
    ノードとワイヤ
    基本ノードと概念
    ノード ライブラリ
    オブジェクト バインド
    Dynamo の開始画面
    ノードは、ライブラリから配置することも、キャンバス内で右クリックして配置することもできる
    完成したグラフ
    完成したグラフの動作

    道路

    便利なパッケージ

    Dynamo パッケージは、Dynamo のコア機能を拡張するためにサード パーティが開発したツールセットです。すべてのユーザがアクセスでき、ボタンをクリックすることでダウンロードできます。

    パッケージの使用を開始する方法の詳細については、「パッケージ」 セクションを参照してください。

    Dynamo for Civil 3D のグラフを次のレベルに引き上げることができる最も人気の高いパッケージをいくつかご紹介します。

    Civil 3D Toolkit

    Civil 3D Toolkit は、追加ノードの大規模なインベントリにより、Dynamo の機能を大幅に強化する Dynamo for Civil 3D パッケージです。

    フィードバック

    関連する Autodesk University のクラス

    Camber

    Camber はオープン ソースの Dynamo for Civil 3D パッケージであり、ラベル、外部参照、データ ショートカット、スタイルなどを操作するための数百ものノードが含まれています。

    フィードバック

    ソース コード

    CivilConnection

    CivilConnection は、Civil 3D、Dynamo、Revit 間での情報交換を可能にするオープン ソースの Revit 用の Dynamo パッケージです。

    関連する Autodesk University のクラス

    (英語)

    (英語)

    (英語)

    ソース コード

    Arkance Systems Nodes

    Arkance Systems Nodes は、Dynamo for Civil 3D パッケージであり、寸法、テーブル、ビュー、ドリル コントロールなどを操作するためのさまざまな便利なノードが用意されています。

    フィードバック

    ドキュメント

    高度なトピック

    時間の経過とともに、基本を超えて、Dynamo の内部の仕組みを詳細に理解する必要が出てくることがあります。このセクションのページでは、グラフを次のレベルに引き上げることができるように、Dynamo for Civil 3D の高度な機能を明らかにしていきます。

    Civil 3D ツールキット フィードバック スレッド
    Civil 3D ツールキットで Dynamo グラフを強化 | Autodesk University
    Camber フィードバック スレッド
    Civil 3D、Revit、Dynamo CivilConnection による計算モデリングの直線構造 | Autodesk University
    橋梁の詳細設計 2.0: Civil 3D、Revit、Dynamo を使用した計算モデリング手法 | Autodesk University
    パラメトリック モデリングとユニバーサル TBM リング配置の自動化 | Autodesk University
    Arkance Systems ノード ライブラリ フィードバック スレッド

    ノード ライブラリ

    以前に、ノードは Dynamo グラフの主要な構成要素であり、ライブラリ内で論理グループに編成されていると説明しました。Dynamo for Civil 3D では、ライブラリ内に、Alignments、Profiles、Corridors、Block References など、AutoCAD および Civil 3D オブジェクトを操作するための専用ノードを含む 2 つのカテゴリ(シェルフ)があります。ライブラリの残りの部分には、本質的により汎用的であり、Dynamo のすべての「フレーバー」(Revit 用の Dynamo、Dynamo Sandbox など)間で一貫しているノードが含まれています。

    コアの Dynamo ライブラリでノードを構成する方法の詳細については、「 ライブラリ 」セクションを参照してください。

    Dynamo for Civil 3D のノード ライブラリ
    1. AutoCAD および Civil 3D オブジェクトを操作するための特定のノード

    2. 汎用ノード

    3. 個別にインストールできるサードパーティ製パッケージのノード

    AutoCAD および Civil 3D シェルフにあるノードを使用すると、Dynamo グラフは Dynamo for Civil 3D でのみ動作します。Dynamo for Civil 3D グラフを別の場所(たとえば Revit 用の Dynamo)で開くと、これらのノードに警告フラグが設定され、実行されません。

    AutoCAD と Civil 3D に 2 つの別個のシェルフがある理由とは

    この構成により、ネイティブ AutoCAD オブジェクト(Lines、Polylines、Block References など)のノードと Civil 3D オブジェクト(Alignments、Corridors、Surfaces など)のノードが区別されます。また、技術的には、AutoCAD と Civil 3D は 2 つの別個の製品です。AutoCAD は基礎となるアプリケーションであり、Civil 3D はその上に構築されています。

    ノード階層

    AutoCAD ノードと Civil 3D ノードを使用するには、各シェルフ内のオブジェクト階層をしっかり理解しておくことが重要です。生物学ではあらゆる生物が体系的に分類されており、その分類法は、上位から下位にかけて、界、門、網、目、科、属、種という階層構造から成り立っています。AutoCAD と Civil 3D のオブジェクトも同様に分類されています。いくつかの例を使用して説明しましょう。

    Civil オブジェクト

    例として Alignment を使用しましょう。

    目的が Alignment の名前を変更することであるとします。次に追加するノードは CivilObject.SetName ノードです。

    最初は、あまり直感的には見えないかもしれません。CivilObject とは何ですか?ライブラリに Alignment.SetName ノードがないのはなぜですか?この答えは、再利用 と 簡易化 に関連しています。考えてみると、Civil 3D オブジェクトの名前を変更するプロセスは、オブジェクトが Alignment、Corridor、Profile など何であっても同じです。したがって、基本的にすべて同じ処理を行う繰り返しノード(Alignment.SetName、Corridor.SetName、Profile.SetName など)を使用する代わりに、その機能を単一のノードにラップすることをお勧めします。これはまさに、CivilObject.SetName で行うことです。

    これについては、関係 の観点で考えることもできます。Alignment と Corridor は、リンゴと梨の両方が果実の一種であるように、どちらも Civil オブジェクトの一種です。Civil オブジェクト ノードはあらゆるタイプの Civil オブジェクトに適用されますが、これは、リンゴと梨の両方の皮をむくのに単一のピーラーを使用するのに似ています。果物の種類ごとに専用のピーラーを揃えていたら、キッチンはひどく散らかってしまいます。その意味で、Dynamo ノード ライブラリはキッチンとまったく同じです。

    オブジェクト

    では、この手順を一歩進めてみましょう。Alignment のレイヤを変更するとします。使用するノードは、Object.SetLayer ノードです。

    CivilObject.SetLayer というノードがないのはなぜでしょうか?前述の再利用とシンプルさの原則が、ここにも適用されます。layer プロパティは、Line、Polyline、Text、Block Reference など、AutoCAD で描画または挿入できるオブジェクトに共通のものです。Alignment や Corridor などの Civil 3D オブジェクトは同じカテゴリに分類されるため、オブジェクトに適用されるノードは、どの Civil オブジェクトでも使用できます。

    Dynamo プレーヤ

    Dynamo プレーヤを使用してグラフを実行し、Civil 3D で結果を確認する

    Dynamo プレーヤを使用すると、Civil 3D で Dynamo グラフを簡単に実行することができます。グラフが作成されたら、Dynamo の専門知識がなくても、Dynamo プレーヤを使用してグラフを実行できます。これにより、ノードやワイヤの詳細に関心のない他のユーザとグラフを簡単に共有できます。

    Civil 3D の Dynamo プレーヤの詳細については、「Civil 3D ヘルプ」サイトに提供されているドキュメントを参照してください。

    サンプル ワークフロー

    道路、鉄道、土地、ユーティリティ、測量、GIS...。

    土木インフラは、これらすべてが含まれますが、それだけではありません。このセクションでは、Dynamo に習熟し、Dynamo for Civil 3D の可能性を最大限に引き出すための、実践的で関連性の高いサンプル グラフをいくつか紹介します。各グラフには、作成に使用されたロジックの詳細な説明が含まれています。これにより、そのロジックを 使用 できるだけでなく、理解 できるようになります。

    さらに、これらのサンプルは、強力なグラフを構築するための実績のあるベスト プラクティスを具体化しています。サンプルを使用して作業する際に、強力で柔軟性があり、保守が可能なグラフを構築する方法についてのアイデアについて、「」セクションを読むことをお勧めします。

    ベスト プラクティス

    構造物の名前を変更する

    パイプ ネットワークにパイプと構造物を追加する場合、Civil 3D はテンプレートを使用して名前を自動的に割り当てます。通常、初期の配置時にはこの値で十分ですが、設計が進行するにつれて、必然的に名前を変更する必要が出てきます。さらに、要求される命名パターンは多数あります。たとえば、パイプ配管内で最も下流の構造物から始めて構造物に順番に命名したり、現地の関係機関のデータ スキーマに沿った命名パターンに従ったりすることです。この例では、Dynamo を使用して、あらゆるタイプの命名方法を定義して、一貫して適用する方法を示します。

    目標

    🎯 Alignment の測点に基づいて、パイプ ネットワーク構造物の名前を順番に変更します。

    主要な概念

    • バウンディング ボックスを操作する

    • List.FilterByBoolMask ノードを使用してデータをフィルタする

    • List.SortByKey ノードを使用してデータを並べ替える

    バージョンの互換性

    このグラフは Civil 3D 2020 以降で実行できます。

    データセット

    まず、以下のサンプル ファイルをダウンロードし、DWG ファイルと Dynamo グラフを開きます。

    対処法

    このグラフのロジックの概要を以下に示します。

    1. レイヤ別に構造物を選択する

    2. 構造物の位置を取得する

    3. 構造物をオフセットでフィルタし、測点で並べ替える

    4. 新しい名前を生成する

    以上です。

    構造物を選択する

    最初に、作業する構造物をすべて選択する必要があります。これを行うには、単純に特定のレイヤ上のすべてのオブジェクトを選択します。つまり、異なるパイプ ネットワークから構造物を選択できます(同じレイヤを共有していると仮定します)。

    1. このノードを使用すると、構造物と同じレイヤを共有する可能性のある不要なオブジェクト タイプを誤って取り出すことがなくなります。

    構造物の位置を取得する

    構造物が取得できたので、空間内での構造物の位置を特定し、位置に応じて構造物を並べ替えられるようにする必要があります。これを行うには、各オブジェクトのバウンディング ボックスを利用します。オブジェクトのバウンディング ボックスは、オブジェクトのジオメトリ範囲を完全に含む最小サイズのボックスです。バウンディング ボックスの中心を計算することで、構造物の挿入位置に非常に近い値が得られます。

    これらの挿入位置を使用し、選択した Alignment を基準にして構造物の測点とオフセットを取得します。

    フィルタと並べ替え

    ここでは、少し面倒な作業を開始します。この段階では、指定したレイヤ上のすべての構造物の大きなリストを取得し、それを並べ替える Alignment を選択しました。問題は、名前を変更したくない構造物がリストに含まれている可能性があることです。たとえば、構造物が対象となる特定の経路に含まれていない場合があります。

    1. 選択された Alignment

    2. 名前を変更する構造物

    3. 無視する必要がある構造物

    そのため、Alignment からの特定のオフセットよりも外にある構造物は対象に含めないように、構造物のリストをフィルタする必要があります。これは、List.FilterByBoolMask ノードを使用して行うのが最適です。構造物のリストをフィルタした後、List.SortByKey ノードを使用して、測点値で並べ替えます。

    リストを初めて使用する場合は、「 」セクションを参照してください。

    1. 構造物のオフセットがしきい値より小さいかどうかを確認する

    2. Null 値を false に置き換える

    3. 構造物と測点のリストをフィルタする

    4. 構造物を測点で並べ替える

    新しい名前を生成する

    最後に、構造物の新しい名前を作成する必要があります。使用する形式は <alignment name>-STRC-<number> です。ここに、必要に応じてゼロを追加して数値に埋め込むための追加ノードがいくつかあります(例: 「1」を「01」に)。

    構造物の名前を変更する

    最後に、構造物の名前を変更します。

    結果

    以下に、Dynamo プレーヤを使用してグラフを実行する例を示します。

    Dynamo プレーヤを初めて使用する場合は、「 」セクションを参照してください。

    🎉 ミッションが達成されました。

    ボーナス: Dynamo での視覚化

    Dynamo の 3D バックグラウンド プレビューを利用して、最終的な結果だけでなく、グラフの中間出力を視覚化すると便利です。簡単に行える方法の 1 つは、構造物のバウンディング ボックスを表示することです。さらに、この特定のデータセットにはドキュメントにコリドーがあるため、コリドー計画線ジオメトリを Dynamo に取り込んで、構造物が空間内のどこに位置するかを確認することができます。グラフがコリドーを持たないデータセットで使用されている場合、これらのノードは何も実行しません。

    これで、オフセットによる構造物のフィルタ処理がどのように機能するかを理解できるようになりました。

    アイデア

    このグラフの機能を拡張する方法について、いくつかのアイデアを示します。

    特定の Alignment を選択するのではなく、最も近い Alignment に基づいて構造物の名前を変更します。

    構造物に加えて パイプの名前も変更します。

    経路に基づいて構造物の レイヤを設定します。

    照明柱の配置

    Dynamo の多くの優れた使用事例の 1 つは、コリドー モデルに沿って個別のオブジェクトを動的に配置することです。多くの場合、オブジェクトはコリドーに沿って挿入されたアセンブリとは独立した位置に配置する必要があります。これは、手動で行うにはきわめて面倒な作業です。コリドーの水平ジオメトリまたは垂直ジオメトリが変更されると、大量の再作業が必要になります。

    目標

    🎯 Excel ファイルで指定した測点値でコリドーに沿って照明柱のブロック参照を配置します。

    テキスト文字列を生成および修正する

    構造物の名前を変更する

    139KB
    Utilities_RenameStructures.dyn
    Open
    6MB
    Utilities_RenameStructures.dwg
    Open
    リストの操作
    Dynamo プレーヤ
    特定のレイヤ上の構造物を選択する
    バウンディング ボックスを使用して各構造物のおおよその挿入位置を取得する
    構造物をフィルタし、並べ替える
    新しい構造物の名前を生成する
    構造物の名前を設定する
    Dynamo プレーヤを使用してグラフを実行し、Civil 3D で結果を確認する
    構造物とコリドー計画線のジオメトリを視覚化する
    Alignment オフセットのしきい値を調整し、影響を受ける構造物を Dynamo で視覚化する
    主要な概念
    • 外部ファイル(この場合は Excel)からデータを読み込む

    • ディクショナリ内のデータを編成する

    • 座標系を使用して位置/尺度/回転をコントロールする

    • ブロック参照を配置する

    • Dynamo でジオメトリを視覚化する

    バージョンの互換性

    このグラフは Civil 3D 2020 以降で実行できます。

    データセット

    まず、以下のサンプル ファイルをダウンロードし、DWG ファイルと Dynamo グラフを開きます。

    Excel ファイルを Dynamo グラフと同じフォルダに保存することをお勧めします。

    対処法

    このグラフのロジックの概要を以下に示します。

    1. Excel ファイルを読み込み、データを Dynamo に読み込む

    2. 指定したコリドー基線から計画線を取得する

    3. 目的の測点でコリドー計画線に沿って座標系を生成する

    4. 座標系を使用してモデル空間にブロック参照を配置する

    以上です。

    Excel データを取得する

    このサンプル グラフでは、Excel ファイルを使用して、Dynamo が照明柱のブロック参照を配置するために使用するデータを保存します。表は次のようになります。

    Excel ファイルのテーブル構造

    Dynamo を使用して外部ファイル(Excelファイルなど)からデータを読み込む方法は、特にデータを他のチーム メンバーと共有する必要がある場合に最適です。

    Excel データは、次ように Dynamo に読み込まれます。

    Excel データを Dynamo に読み込む

    データが得られたら、列(Corridor、Baseline、PointCode など)で分割して、グラフの残りの部分で使用できるようにする必要があります。これを行う一般的な方法は、List.GetItemAtIndex ノードを使用して、必要な列のインデックス番号を指定することです。たとえば、[Corridor] 列はインデックス 0、[Baseline] 列はインデックス 1、などです。

    問題なさそうですね?しかし、このアプローチには潜在的な問題があります。Excel ファイルの列の順序が将来変更されたらどうなるでしょうか?あるいは、2 つの列の間に新しい列が追加されたら?その場合は、グラフが正しく機能しなくなり、更新が必要になります。Excel の列ヘッダーを キー として、残りのデータを 値 として使用して、データをディクショナリに入れることで、グラフを将来も使用できるように保証します。

    ディクショナリを初めて使用する場合は、「 Dynamo のディクショナリ 」セクションを参照してください。

    Excel データをディクショナリに入れる

    これにより、Excel で列の順序を柔軟に変更できるため、グラフの柔軟性が向上します。列ヘッダーが同じであるかぎり、キー(列ヘッダー)を使用してディクショナリからデータを取得できます。これを次に実行します。

    ディクショナリからデータを取得する

    コリドー計画線を取得する

    これで Excel データが読み込まれ、準備ができたので、このデータを使用して、コリドー モデルに関する情報を Civil 3D から取得しましょう。

    1. コリドー モデルを名前で選択します。

    2. コリドー内の特定の基線を取得します。

    3. 基線内の計画線をポイント コードにより取得します。

    座標系を生成する

    ここで、Excel ファイルで指定した測点値でコリドー計画線に沿って座標系を生成します。これらの座標系は、照明柱のブロック参照の位置、回転、および尺度を定義するために使用されます。

    座標系を初めて使用する場合は、「 ベクトル、平面、座標系 」セクションを参照してください。

    コリドー計画線に沿って座標系を取得する

    基線のどちら側に座標系があるかに応じて座標系を回転するために、ここでコード ブロックを使用します。これは複数のノードのシーケンスを使用して実現できますが、これは単に書き出すほうが簡単である良い例です。

    コード ブロックを初めて使用する場合は、「 コード ブロックと DesignScript 」セクションを参照してください。

    ブロック参照を作成する

    あと少しです。ブロック参照を実際に配置するために必要なすべての情報が揃いました。まず、Excel ファイルの BlockName 列を使用して必要なブロック定義を取得します。

    ドキュメントから必要なブロック定義を取得する

    ここから、最後の手順としてブロック参照を作成します。

    モデル空間でブロック参照を作成する

    結果

    グラフを実行すると、コリドーに沿ってモデル空間に新しいブロック参照が表示されます。これが素晴らしいところで、グラフの実行モードが[自動]に設定されている状態で Excel ファイルを編集すると、ブロック参照が自動的に更新されます。

    グラフの実行モードの詳細については、「 ユーザ インタフェース 」セクションを参照してください。

    Excel ファイルを更新して、Civil 3D で結果をすばやく表示する

    以下に、Dynamo プレーヤを使用してグラフを実行する例を示します。

    Dynamo プレーヤを使用してグラフを実行し、Civil 3D で結果を確認する

    Dynamo プレーヤを初めて使用する場合は、「 Dynamo プレーヤ 」セクションを参照してください。

    🎉 ミッションが達成されました。

    ボーナス: Dynamo での視覚化

    コンテキストを提供するために、Dynamo でコリドー ジオメトリを視覚化すると便利です。この特定のモデルでは、モデル空間で既に抽出されたコリドーのソリッドが存在するため、Dynamo に取り込んでみましょう。

    しかし、他にも検討する必要があることがあります。ソリッドは比較的重いジオメトリ タイプであるため、この操作によってグラフの速度が低下します。ソリッドを表示するかどうかを、簡単に 選択 できる方法があれば便利です。解決策は非常に単純で、 Corridor.GetSolids ノードの接続を解除するだけですが、これによってすべての下流ノードに警告が生成されてしまう点が少々面倒です。この状況では、ScopeIf ノードが役に立ちます。

    1. Object.Geometry ノードの下部にグレーのバーがあることに注目してください。これは、ノードのプレビューがオフになり(ノードを右クリックしてアクセス可能)、GeometryColor.ByGeometryColor が、背景プレビューでの表示優先順位に関して他のジオメトリとの「競合」を回避できることを意味します。

    2. ScopeIf ノードを使用すると、基本的にノードのブランチ全体を選択的に実行できます。test 入力が false の場合、ScopeIf ノードに接続されたすべてのノードは実行されません。

    Dynamo の背景プレビューの結果は次のとおりです。

    Dynamo でコリドー ジオメトリを視覚化する

    アイデア

    このグラフの機能を拡張する方法について、いくつかのアイデアを示します。

    Excel ファイルに 回転 列を追加し、それを使用して座標系の回転を駆動します。

    必要に応じて照明柱がコリドー計画線から外れるようにするため、Excel ファイルに 水平オフセットまたは垂直オフセット を追加します。

    Excel ファイルで測点値を使用する代わりに、開始測点と標準間隔を使用して、Dynamo で直接 測点値を生成します。

    232KB
    Roads_CorridorBlockRefs.dyn
    Open
    54MB
    Roads_CorridorBlockRefs.dwg
    Open
    12KB
    LightPoles.xlsx
    Open

    クリアランスのエンベロープ

    クリアランス検証のための運動学的エンベロープの開発は、鉄道設計の重要な部分です。Dynamo を使用すると、複雑なコリドー サブアセンブリを作成して管理する代わりに、エンベロープのソリッドを生成してこのジョブを実行できます。

    目標

    🎯 車両の縦断ブロックを使用して、コリドーに沿ってクリアランスのエンベロープ 3D ソリッドを生成します。

    リソース

    この Primer は、Dynamo for Civil 3D を使用する際の出発点にすぎません。Dynamo ユーザの発達したコミュニティがあり、豊富な知識を得ることができます。これらのリソース参照しながら、学習を続けてください。

    Civil 3D ヘルプ

    Dynamo フォーラム

    ユーティリティ

    主要な概念
    • コリドー計画線を操作する

    • 座標系間でジオメトリを変換する

    • ロフトによりソリッドを作成する

    • レーシング設定を使用してノードの動作をコントロールする

    バージョンの互換性

    このグラフは Civil 3D 2020 以降で実行できます。

    データセット

    まず、以下のサンプル ファイルをダウンロードし、DWG ファイルと Dynamo グラフを開きます。

    対処法

    このグラフのロジックの概要を以下に示します。

    1. 指定したコリドー基線から計画線を取得する

    2. コリドー計画線に沿って目的の間隔で座標系を生成する

    3. プロファイルの Block ジオメトリを座標系に変換する

    4. プロファイル間でソリッドをロフトする

    5. Civil 3Dでソリッドを作成する

    以上です。

    コリドー データを取得する

    最初の手順は、コリドー データを取得することです。コリドー モデルを名前で選択し、コリドー内の特定の基線を取得します。次に、基線内の計画線をそのポイント コードで取得します。

    コリドー、基線、および計画線を選択する

    座標系を生成する

    ここで、指定した開始測点と終了測点の間に、コリドー計画線に沿って座標系を生成します。これらの座標系は、車両プロファイルの Block ジオメトリを コリドーに位置合わせするために使用されます。

    座標系を初めて使用する場合は、「 ベクトル、平面、座標系 」セクションを参照してください。

    コリドー計画線に沿って座標系を取得する
    1. ノードの右下隅にある小さな XXX に注目してください。これは、ノードのレーシング設定が [直積] に設定されていることを意味します。これは、両方の計画線に対して同じ測点値で座標系を生成するために必要です。

    ノード レーシングを初めて使用する場合は、「 リストの概要 」セクションを参照してください。

    Block ジオメトリを変換する

    ここで、計画線に沿って車両プロファイルの配列を何らかの方法で作成する必要があります。これから行う作業では、Geometry.Transform ノードを使用して、車両プロファイルのブロック定義からジオメトリを変換します。これは視覚化が難しい概念なので、ノードを確認する前に、次のグラフィックスでこれから起こる動作を示します。

    座標系間でのジオメトリの変換の視覚化。

    基本的に、単一の Block 定義から Dynamo ジオメトリを取得し、移動または回転しながら、計画線に沿って配列を作成します。いいですね。ノード シーケンスは次のようになります。

    1. これにより、ドキュメントから Block 定義を取得します。

    2. これらのノードは、Block 内のオブジェクトの Dynamo ジオメトリを取得します。

    3. これらのノードは、基本的にジオメトリの 変換元 の座標系を定義します。

    4. 最後に、このノードはジオメトリを変換する実際の作業を行います。

    5. このノードの 最長 レーシングに注目してください。

    Dynamo では、次のようになります。

    変換後の車両プロファイルの Block ジオメトリ

    ソリッドを生成する

    とっておきの朗報です。大変な作業は終わりました。次に行う必要があるのは、プロファイル間にソリッドを生成することだけです。これは、Solid.ByLoft ノードを使用して簡単に行うことができます。

    結果は次のようになります。これらは Dynamo ソリッドです。これらを Civil 3D で作成する必要があります。

    ロフト後の Dynamo ソリッド

    Civil 3D にソリッドを出力する

    最後の手順は、生成されたソリッドをモデル空間に出力することです。見やすくするために、色付けもします。

    ソリッドを Civil 3D に出力する

    結果

    以下に、Dynamo プレーヤを使用してグラフを実行する例を示します。

    Dynamo プレーヤを使用してグラフを実行し、Civil 3D で結果を確認する

    Dynamo プレーヤを初めて使用する場合は、「 Dynamo プレーヤ 」セクションを参照してください。

    🎉 ミッションが達成されました。

    アイデア

    このグラフの機能を拡張する方法について、いくつかのアイデアを示します。

    各トラックに対して 異なる測点範囲 を個別に使用する機能を追加します。

    小さなセグメントに ソリッドを分割 し、クラッシュを個別に解析できるようにします。

    エンベロープ ソリッドが フィーチャと交差 するかを確認し、クラッシュするソリッドに色を付けます。

    185KB
    Rail_ClearanceEnvelope.dyn
    Open
    22MB
    Rail_ClearanceEnvelope.dwg
    Open
    Autodesk University

    書籍

    ポイント グループ管理

    Civil 3D で COGO ポイントとポイント グループを使用して作業することは、多くのデータの一貫処理のプロセスの中核となる要素です。Dynamo はデータ管理に関して非常に優れています。この例では、その潜在的な使用例の 1 つを示します。

    目標

    🎯 一意の COGO ポイントの説明ごとにポイント グループを作成します。

    主要な概念

    • リストの操作

    • List.GroupByKey ノードを使用して類似オブジェクトをグループ化する

    • Dynamo プレーヤでカスタム出力を表示する

    バージョンの互換性

    このグラフは Civil 3D 2020 以降で実行できます。

    データセット

    まず、以下のサンプル ファイルをダウンロードし、DWG ファイルと Dynamo グラフを開きます。

    対処法

    このグラフのロジックの概要を以下に示します。

    1. ドキュメント内のすべての COGO ポイントを取得する

    2. COGO ポイントを説明でグループ化する

    3. ポイント グループを作成する

    4. 概要を Dynamo プレーヤに出力する

    以上です。

    COGO ポイントを取得する

    最初に、ドキュメント内のすべてのポイントグループを取得し、次に各グループ内のすべての COGO ポイントを取得します。これにより、ネストされたリスト、つまり「リストのリスト」が得られます。これは、List.Flatten ノードを使用してリスト全体をフラット化する場合に、後で操作が簡単になります。

    リストを初めて使用する場合は、「 」セクションを参照してください。

    ポイントを説明でグループ化する

    すべての COGO ポイントを取得できたので、説明に基づいてグループに分類する必要があります。これは、まさに List.GroupByKey ノードが行う処理です。基本的に、同じキーを共有する項目をグループ化します。

    ポイント グループを作成する

    大変な作業は終わりました。最後の手順は、グループ化された COGO ポイントから新しい Civil 3D ポイント グループを作成することです。

    概要を出力する

    グラフを実行しても、ジオメトリを操作していないため、Dynamo の背景プレビューには何も表示されません。グラフが正しく実行されたかどうかを確認する唯一の方法は、ツールスペースを確認するか、ノード出力のプレビューを確認することです。ただし、Dynamo プレーヤを使用してグラフを実行する場合は、作成したポイント グループの概要を出力することで、グラフの結果に関するフィードバックを増やすことができます。必要な操作は、ノードを右クリックして[出力]に設定することだけです。この場合、名前を変更した Watch ノードを使用して結果を表示します。

    結果

    以下に、Dynamo プレーヤを使用してグラフを実行する例を示します。

    Dynamo プレーヤを初めて使用する場合は、「 」セクションを参照してください。

    🎉 ミッションが達成されました。

    アイデア

    このグラフの機能を拡張する方法について、いくつかのアイデアを示します。

    ポイントのグループ化を、未処理の説明ではなく 完全な説明 に基づいて行うように修正します。

    選択した他の 定義済みカテゴリ (「グラウンド ショット」、「モニュメント」など)によってポイントをグループ化します。

    特定のグループのポイントに対して TIN サーフェスを自動的に作成します。

    33KB
    Survey_CreatePointGroups.dyn
    Open
    1MB
    Survey_CreatePointGroups.dwg
    Open
    リストの操作
    Dynamo プレーヤ
    すべてのポイント グループと COGO ポイントを取得する
    COGO ポイントを説明でグループ化する
    新しいポイント グループを作成する
    ノードを[出力]に設定すると、その内容が Dynamo プレーヤの出力に表示される
    Dynamo プレーヤを使用してグラフを実行し、ツールスペースで結果を確認する

    測量

    GitHub - Autodesk/civilconnection: CivilConnection enables the exchange of information between Civil 3D, Dynamo and Revit.GitHub
    Arkance Systems Node Library for Civil 3D DynamoHuizBlog

    サービスの配置

    一般的な住宅開発のエンジニアリング設計には、汚水管、雨水排水、飲料水などの地下ユーティリティの使用が含まれます。この例では、Dynamo を使用して、配水本管から特定の区画にサービス接続を描画する方法を示します。これは、サービス接続を必要とするすべての区画で一般的であり、すべてのサービスを配置するには非常に面倒な作業が発生します。Dynamo を使用すると、必要なジオメトリを正確に自動的に描画したり、現地の関係機関の標準に合わせて調整できる柔軟な入力を提供したりすることで、プロセスをスピードアップすることができます。

    目標

    🎯水道メーターのブロック参照を区画線から指定したオフセットに配置し、配水本管に垂直に各サービス接続の線分を描画します。

    主要な概念

    • ユーザ入力に Select Object ノードを使用する

    • 座標系を使用する

    • Geometry.DistanceTo や Geometry.ClosestPointTo などのジオメトリ操作を使用する

    バージョンの互換性

    このグラフは Civil 3D 2020 以降で実行できます。

    データセット

    まず、以下のサンプル ファイルをダウンロードし、DWG ファイルと Dynamo グラフを開きます。

    対処法

    このグラフのロジックの概要を以下に示します。

    1. 排水本管の曲線ジオメトリを取得する

    2. ユーザ選択の区画線の曲線ジオメトリを取得し、必要に応じて反転する

    3. サービス メーターの挿入点を生成する

    4. サービス メーターの位置に最も近い配水本管上の点を取得する

    以上です。

    配水本管のジオメトリを取得する

    最初の手順では、Dynamo に配水本管のジオメトリを取得します。Lines または Polylines を個別に選択するのではなく、特定のレイヤ上のすべてのオブジェクトを取得し、Dynamo のポリカーブとしてそれらを結合します。

    Dynamo の曲線ジオメトリを初めて使用する場合は、「 」セクションを参照してください。

    区画線ジオメトリを取得する

    次に、選択した区画線のジオメトリを Dynamo に取り込んで、作業できるようにする必要があります。このジョブに適したツールは Select Object ノードで、グラフのユーザは、Civil 3D で特定のオブジェクトを選択できます。

    また、発生する可能性のある潜在的な問題にも対処する必要があります。区画線には始点と終点があります。つまり、方向があります。グラフで一貫した結果を生成するには、すべての区画線の方向が一貫している必要があります。この条件はグラフ ロジックで直接考慮できるため、グラフの弾力性が向上します。

    1. 区画線の始点と終点を取得します。

    2. 各点から配水本管までの距離を測定し、どちらの距離が大きいかを特定します。

    3. 望ましい結果は、線分の始点が配水本管に最も近くなることです。そうでない場合は、区画線の方向を反転します。それ以外の場合は、元の区画線を返します。

    挿入点を生成する

    次に、サービス メーターが配置される場所を決定します。通常、配置は現地の関係機関の要件によって決定されるため、さまざまな条件に合わせて変更できる入力値を指定します。点を作成するための参照として、区画線に沿って座標系を使用します。これにより、区画線に対するオフセットを、その向きに関係なく、非常に簡単に定義できます。

    座標系を初めて使用する場合は、「 」セクションを参照してください。

    接続点を取得する

    次に、サービス メーターの位置に最も近い点を配水本管上で取得する必要があります。これにより、サービス接続が配水本管に対して常に垂直になるようにモデル空間にサービス接続を描画できます。Geometry.ClosestPointTo ノードは最適な対処法です。

    1. これは配水本管のポリカーブです

    2. これらは、サービス メーターの挿入点です

    オブジェクトを作成する

    最後の手順は、モデル空間にオブジェクトを実際に作成することです。以前に生成した挿入点を使用してブロック参照を作成し、次に、配水本管上のポイントを使用してをサービス接続に線分を描画します。

    結果

    グラフを実行すると、モデル空間に新しいブロック参照とサービス接続線が表示されます。入力をいくつか変更して、すべてが自動的に更新されるのを確認してください。

    ボーナス: 順次配置を有効にする

    1 つの区画線にオブジェクトを配置した後に、別の区画線を選択すると、オブジェクトが「移動」することがあります。

    これは Dynamo の既定の動作で、多くの場合に非常に便利です。ただし、複数のサービス接続を順番に配置し、元の接続を変更するのではなく、Dynamo に実行ごとに新しいオブジェクトを作成させたい場合があるかもしれません。この動作は、オブジェクト バインドの設定を変更することでコントロールできます。

    詳細については、 セクションを参照してください。

    この設定を変更すると、Dynamo は各実行で作成されるオブジェクトを「忘れる」ようになります。次に、Dynamo プレーヤを使用してオブジェクト バインドをオフに設定した状態でグラフを実行する例を示します。

    Dynamo プレーヤを初めて使用する場合は、「 」セクションを参照してください。

    🎉 ミッションが達成されました。

    アイデア

    このグラフの機能を拡張する方法について、いくつかのアイデアを示します。

    各区画行を選択する代わりに、複数のサービス接続 を同時に配置します。

    入力を調整して、水道メーターの代わりに、下水管の掃除口 を配置します。

    切り替えを追加 して、区画線の両側ではなく特定の側に単一のサービス接続を配置できるようにします。

    GitHub - mzjensen/Camber: An open-source Dynamo package for Civil 3D.GitHub

    オブジェクト バインド

    Dynamo for Civil 3D には、各ノードで作成されたオブジェクトを「記憶する」ための非常に強力なメカニズムが含まれています。このメカニズムはオブジェクト バインドと呼ばれ、これにより、Dynamo グラフは同じドキュメントで実行されるたびに一貫した結果を生成することができます。これは多くの状況で非常に望ましいことですが、Dynamo の動作をより詳細にコントロールしなければならない場合もあります。このセクションでは、オブジェクト バインドの仕組みと、その利点について説明します。

    例

    現在のレイヤでモデル空間に円を作成するこのグラフについて考えてみましょう。

    半径が変更されるとどうなるかに注目してください。

    ブロック参照を作成する
  • オブジェクト バインド設定をコントロールする

  • モデル空間でブロック参照と線分を作成する

    108KB
    Land_ServicePlacement.dyn
    Open
    842KB
    Land_ServicePlacement.dwg
    Open
    曲線
    ベクトル、平面、座標系
    オブジェクト バインド
    Dynamo プレーヤ
    Civil 3D からオブジェクトを取得し、すべてを単一のポリカーブに結合する
    区画線を選択し、正しい方向を向くようにする
    サービス メーターの挿入点を作成する
    配水本管上の垂直ポイントを取得する
    Dynamo で入力パラメータを調整し、Civil 3D で結果を即座に確認する
    オブジェクト バインドがオンの場合の動作
    Dynamo のオブジェクト バインド設定
    Dynamo プレーヤを使用してグラフを実行し、Civil 3D で結果を確認する
    これが実際のオブジェクト バインドです。Dynamo の既定の動作では、半径の入力が変更されるたびに新しい円が作成されるのではなく、円の半径が 修正 されます。これは、グラフを実行するたびに、Object.ByGeometry ノードが 特定の 円を作成したことを「記憶」するためです。さらに、Dynamo はこの情報を保存するので、次に Civil 3D ドキュメントを開いてグラフを実行すると、まったく同じ動作が実行されます。

    別の例

    次に、Dynamo の既定のオブジェクト バインド動作を変更する例を見てみましょう。たとえば、円の中央にテキストを配置するグラフを作成するとします。ただし、このグラフの目的は、繰り返し実行でき、選択した円に毎回新しいテキストを配置できるようにすることです。グラフは次のようになります。

    選択した円の中心にテキストを配置する単純なグラフ

    ただし、別の円を選択すると、実際にはこのようになります。

    新しい円を選択したときの Dynamo の既定の動作

    グラフを実行するたびにテキストが削除され、再作成されているように見えます。実際には、選択した円に応じてテキストの位置が 修正 されています。つまり、同じテキストが、別の場所に配置されているだけです。毎回新しいテキストを作成するには、バインド データが保持されないように、Dynamo のオブジェクト バインド設定を修正する必要があります(以下の「オブジェクト バインド」を参照してください)。

    オブジェクト バインド設定

    この変更を行うと、求めている動作が得られます。

    オブジェクト バインドが無効になっている場合の動作

    バインド設定

    Dynamo for Civil 3D では、Dynamo メニューの [バインド データ ストレージ] 設定を使用して、既定のオブジェクト バインドの動作を変更することができます。

    [バインド データ ストレージ]オプションは、Civil 3D 2022.1 以降で使用できることに注意してください。

    すべてのオプションは既定で有効になっています。各オプションの機能の概要を次に示します。

    オプション1: バインド データを保持しない

    このオプションを有効にすると、Dynamo は最後にグラフを実行したときに作成したオブジェクトを「忘れる」ようになります。したがって、グラフは、どのような状況でも任意の図面で実行でき、毎回新しいオブジェクトを作成します。

    使用する状況

    このオプションは、前回の実行で行った操作をすべて Dynamo が「忘れて」、毎回新しいオブジェクトを作成する場合に使用します。

    オプション2: Dynamo のグラフに保存する

    このオプションを選択すると、オブジェクト バインド メタデータが保存時にグラフ(.dyn ファイル)にシリアル化されます。グラフを閉じて再度開き、同じ図面で実行すると、すべてが、グラフを閉じる前と同じように動作するはずです。別の図面でグラフを実行すると、グラフからバインド データが削除され、新しいオブジェクトが作成されます。これは、元の図面を開いてグラフを再度実行すると、古いオブジェクトに加えて新しいオブジェクトが作成されることを意味します。

    使用する状況

    このオプションは、特定の図面 で最後に作成したオブジェクトを Dynamo に「記憶」させたい場合に使用します。

    このオプションは、特定の図面 と Dynamo グラフの間で 1:1 の関係を維持できる場合に最適です。オプション 1 と 3 は、複数の図面で実行するように設計されたグラフに適しています。

    オプション3: Dynamo の図面に保存する

    これは、オブジェクト バインド データがグラフ(.dyn ファイル)ではなく図面内でシリアル化される点を除き、オプション 2 と同様です。グラフを閉じて再度開き、同じ図面で実行すると、すべてが、グラフを閉じる前と同じように動作するはずです。別の図面でグラフを実行すると、バインド データはグラフではなく図面に保存されるため、元の図面でも保持されます。

    使用する状況

    このオプションは、複数の図面で同じグラフを使用し、Dynamo にそれぞれのグラフで行ったことを「記憶」させる場合に使用します。

    オプション4: Dynamo プレーヤの図面に保存する

    このオプションで最初に注意する点は、メインの Dynamo インタフェースでグラフを実行する場合に、グラフと図面の相互作用に影響を与えないことです。このオプションは、Dynamo プレーヤを使用してグラフを実行する場合に のみ 適用されます。

    Dynamo プレーヤを初めて使用する場合は、「 Dynamo プレーヤ 」セクションを参照してください。

    メインの Dynamo インタフェースを使用してグラフを実行し、その後閉じて、次に Dynamo プレーヤを使用して同じグラフを実行すると、以前に作成したオブジェクトの上に新しいオブジェクトが作成されます。ただし、Dynamo プレーヤでグラフを一度実行すると、図面内のオブジェクト バインド データがシリアル化されます。したがって、Dynamo プレーヤでグラフを複数回実行する場合、新しいオブジェクトを作成するのではなく、オブジェクトが更新されます。別の図面で Dynamo プレーヤを使用してグラフを実行した場合、バインド データはグラフではなく図面に保存されるため、元の図面で保持されます。

    使用する状況

    このオプションは、複数の図面で Dynamo プレーヤを使用してグラフを実行し、各グラフで行ったことを「記憶」させる場合に使用します。

    円を作成するための単純なグラフ
    Dynamo で半径の入力を変更する
    Civil 3DDynamo
    Computational Design for Civil Engineers | Autodesk Universitywww.autodesk.com
    Dynamo for Civil 3Dbooks.huiz.net
    Logo
    Dynamo in Civil 3D Introduction—Unlocking the Mystery of Scripting | Autodesk Universitywww.autodesk.com
    Getting Started with Dynamo for Civil 3D: A Beginner’s Guide | Autodesk Universitywww.autodesk.com
    Civil 3D and Dynamo—Dynamic Culvert Design and Analysis | Autodesk Universitywww.autodesk.com
    Helphelp.autodesk.com
    Logo
    Logo
    Generating, Transforming, and Analyzing Railway Design Data in Civil 3D and Dynamo | Autodesk Universitywww.autodesk.com
    Logo
    Optimize Road Design with Dynamo for Civil 3D and Generative Design | Autodesk Universitywww.autodesk.com
    Dynamo for Civil 3D: Automated Checks of Open-Format Road Design Made Easy | Autodesk Universitywww.autodesk.com
    Logo
    Logo
    Logo
    Logo
    Logo
    Mundane Civil 3D Tasks to Automate with Dynamo for Civil 3D | Autodesk Universitywww.autodesk.com
    Logo
    Underground Utility GIS Features to Civil 3D Pipe Networks with Dynamo | Autodesk Universitywww.autodesk.com
    Logo

    Python と Civil 3D

    Dynamo はビジュアル プログラミング ツールとして非常に強力ですが、ノードやワイヤを超えて、テキスト形式でコードを記述することもできます。これを行うには、次の 2 つの方法があります。

    1. Code Block ノードを使用して DesignScript を記述する

    2. 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 のこのセクションでは取り上げません。詳細については、上記のリンクを頻繁に参照することをお勧めします。

    コード テンプレート

    新しい Python ノードを初めて編集すると、開始するためのテンプレート コードがあらかじめ入力されます。ここでは、テンプレートの概要と各ブロックに関する説明を示します。

    1. sys モジュールおよび clr モジュールを読み込みます。どちらも Python インタプリタが正しく機能するために必要なモジュールです。特に、clr モジュールを使用すると、.NET 名前空間を基本的に Python パッケージとして扱うことができます。

    2. AutoCAD および Civil 3D のマネージド .NET API を使用するための標準アセンブリ(DLL)をロードします。

    3. 標準の AutoCAD および Civil 3D 名前空間に参照設定を追加します。これらは、それぞれ、C# または VB.NET の

    カスタマイズする場合 既定の Python テンプレートは、C:\ProgramData\Autodesk\C3D <version>\Dynamo 内の PythonTemplate.py ファイルを編集することで修正できます。

    例

    Dynamo for Civil 3D で Python スクリプトを作成する場合の基本的な概念について、例を見ていきましょう。

    目標

    🎯 図面内のすべての集水域の境界ジオメトリを取得します。

    データセット

    この演習で参照できるサンプル ファイルを次に示します。

    対処法の概要

    このグラフのロジックの概要を次に示します。

    1. Civil 3D API のドキュメントを確認する

    2. レイヤ名でドキュメント内のすべての集水域を選択する

    3. Dynamo オブジェクトを「アンラップ」して、内部の Civil 3D API メンバーにアクセスする

    4. AutoCAD の点から Dynamo の点を作成する

    以上です。

    API ドキュメントを確認する

    グラフの作成とコードの作成を開始する前に、Civil 3D API のドキュメントを参照して、API が提供する機能を理解することをお勧めします。この場合、集水域の境界点を返すに存在します。このプロパティは、Dynamo が処理する必要があるオブジェクトとは異なる Point3dCollection オブジェクトを返すことに注意してください。つまり、Point3dCollection からポリカーブを作成することはできないため、最終的にはすべてを Dynamo の点に変換する必要があります。詳細については、後で説明します。

    すべての集水域を取得する

    これで、グラフ ロジックの作成を開始することができます。最初に、ドキュメント内のすべての集水域のリストを取得します。これに使用できるノードがあるため、Python スクリプトに含める必要はありません。ノードを使用すると、(Python スクリプトに多くのコードを埋め込むんだ場合に比べて)、他のユーザはグラフを読みやすくなり、Python スクリプトは集水域の境界点を返すという 1 つの事柄にも対処できます。

    All Objects on Layer ノードからの出力は、CivilObjects のリストであることに注意してください。これは、Dynamo for Civil 3D には現在、集水域を操作するためのノードが存在しないためです。これが、Python を使用して API にアクセスする必要がある理由です。

    オブジェクトをアンラップする

    先に進む前に、重要な概念について簡単に説明する必要があります。「」セクションで、オブジェクトと CivilObjects の関係について説明しました。これをもう少し詳しく説明すると、Dynamo オブジェクト は AutoCAD 図形 のラッパーです。同様に、Dynamo CivilObject は、Civil 3D 図形のラッパーです。InternalDBObject プロパティまたは InternalObjectId プロパティにアクセスすることで、オブジェクトを「アンラップ」することができます。

    Dynamo タイプ
    ラップ

    経験則として、InternalObjectId プロパティを使用してオブジェクト ID を取得し、トランザクションでラップされたオブジェクトにアクセスする方が一般的に安全です。これは、InternalDBObject プロパティは書き込み可能な状態でない AutoCAD DBObject を返すためです。

    Python スクリプト

    内部の集水域オブジェクトにアクセスして境界点を取得する作業を行う完全な Python スクリプトを以下に示します。ハイライト表示された行は、既定のテンプレート コードから修正または追加された行を表します。

    スクリプト内の下線付きのテキストをクリックすると、その行の説明が表示されます。

    経験則として、スクリプト ロジックの大部分をトランザクション内に含めることをお勧めします。これにより、スクリプトが読み取り/書き込みを行うオブジェクトに安全にアクセスできるようになります。多くの場合、トランザクションを省略すると致命的なエラーが発生する可能性があります。

    ポリカーブを作成する

    この段階では、Python スクリプトは、背景プレビューで確認できるように Dynamo の点のリストを出力する必要があります。最後の手順は、点から単純にポリカーブを作成します。これは Python スクリプトで直接行うこともできますが、より見やすくするために、ノードのスクリプトの外側に意図的に配置しています。最終的なグラフは次のようなものになります。

    結果

    最終的な Dynamo ジオメトリは次のとおりです。

    🎉 ミッションが達成されました。

    IronPython と CPython

    最後に、注意事項を簡単に説明します。使用している Civil 3D のバージョンに応じて、Python ノードの設定が異なる場合があります。Civil 3D 2020 および 2021 では、Dynamo は IronPython というツールを使用して .NET オブジェクトと Python スクリプトの間でデータを移動しました。Civil 3D 2022 では、Dynamo は Python 3 を使用するのではなく、標準のネイティブ Python インタプリタ(CPython とも呼ばれる)を使用するように移行しました。この移行には、人気のある最新ライブラリや新しいプラットフォーム機能、基本的なメンテナンス、セキュリティ パッチへのアクセスなどのメリットがあります。

    この移行の詳細と、従来のスクリプトのアップグレード方法については、 を参照してください。IronPython を今後も使用する場合は、Dynamo Package Manager を使用して DynamoIronPython2.7 パッケージをインストールする必要があります。

    using
    ディレクティブまたは
    Imports
    ディレクティブに相当します。
  • ノードの入力ポートには、IN と呼ばれる定義済みのリストを使用してアクセスできます。特定のポートのデータには、そのインデックス番号を使用してアクセスできます(例: dataInFirstPort = IN[0])。

  • アクティブなドキュメントおよびエディタを取得します。

  • ドキュメントをロックし、データベース トランザクションを開始します。

  • ここに、スクリプトのロジックの大部分を配置する必要があります。

  • メインの作業が完了した後にトランザクションをコミットするには、この行のコメントを解除します。

  • ノードからデータを出力する場合は、スクリプトの最後にある変数 OUT に出力するデータを割り当てます。

  • 点からポリカーブを作成する

  • オブジェクト Autodesk.AutoCAD.DynamoNodes.Object

    図形 Autodesk.AutoCAD.DatabaseServices.Entity

    CivilObject Autodesk.Civil.DynamoNodes.CivilObject

    図形 Autodesk.Civil.DatabaseServices.Entity

    Python
    AutoCAD .NET API 開発者用ガイド
    AutoCAD .NET API リファレンス ガイド
    Civil 3D .NET API 開発者用ガイド
    Civil 3D .NET API リファレンス ガイド
    15KB
    Python_Catchments.dyn
    Open
    961KB
    Python_Catchments.dwg
    Open
    プロパティが Catchment クラス
    ノード ライブラリ
    Dynamo Blog
    Civil 3D の既定の Python テンプレート
    ドキュメント内のすべての集水域をレイヤごとに取得する
    最終的なグラフ
    集水域境界の、結果として生じた Dynamo ポリカーブ
    # Python 標準ライブラリと DesignScript ライブラリをロードします
    import sys
    import clr
    
    # AutoCAD および Civil3D のアセンブリを追加します
    clr.AddReference('AcMgd')
    clr.AddReference('AcCoreMgd')
    clr.AddReference('AcDbMgd')
    clr.AddReference('AecBaseMgd')
    clr.AddReference('AecPropDataMgd')
    clr.AddReference('AeccDbMgd')
    
    clr.AddReference('ProtoGeometry')
    
    # AutoCAD から参照設定をインポートします
    from Autodesk.AutoCAD.Runtime import *
    from Autodesk.AutoCAD.ApplicationServices import *
    from Autodesk.AutoCAD.EditorInput import *
    from Autodesk.AutoCAD.DatabaseServices import *
    from Autodesk.AutoCAD.Geometry import *
    
    # Civil3D から参照設定をインポートします
    from Autodesk.Civil.ApplicationServices import *
    from Autodesk.Civil.DatabaseServices import *
    
    from Autodesk.DesignScript.Geometry import Point as DynPoint
    
    # このノードへの入力は、IN 変数にリストとして保存されます。
    objs = IN[0]
    
    output = []
    
    if objs is None:
        sys.exit("The input is null or empty.")
    
    if not isinstance(objs, list):
        objs = [objs]
       
    adoc = Application.DocumentManager.MdiActiveDocument
    editor = adoc.Editor
    
    with adoc.LockDocument():
        with adoc.Database as db:
            
            with db.TransactionManager.StartTransaction() as t:
                for obj in objs:             
                    id = obj.InternalObjectId
                    aeccObj = t.GetObject(id, OpenMode.ForRead)               
                    if isinstance(aeccObj, Catchment):
                        catchment = aeccObj
                        acPnts = catchment.BoundaryPolyline3d                   
                        dynPnts = []
                        for acPnt in acPnts:
                            pnt = DynPoint.ByCoordinates(acPnt.X, acPnt.Y, acPnt.Z)
                            dynPnts.append(pnt)
                        output.append(dynPnts)
               
                # トランザクション終了前にコミットする
                t.Commit()
                pass
                
    # OUT 変数に出力をアサインします。
    OUT = output
    Logo
    Logo
    Logo
    Logo