Dynamo
Primer for v2.0
日本語
日本語
  • この Web サイトについて
  • はじめに
    • Dynamo とは、その動作の仕組みとは
    • Primer ユーザ ガイド、Dynamo コミュニティ、プラットフォーム
  • Dynamo のセットアップ
  • ユーザ インタフェース
    • ワークスペース
    • ライブラリ
  • ノードとワイヤ
  • 基本ノードと概念
    • ノードの索引
    • 計算設計用のジオメトリ
      • ジオメトリの概要
      • ベクトル、平面、座標系
      • 点群
      • 曲線
      • サーフェス
      • 立体
      • メッシュ
    • プログラムの構成要素
      • データ
      • 数学的方法
      • ロジック
      • 文字列
      • 色
    • リストを使用した設計
      • リストの概要
      • リストの操作
      • リストのリスト
      • N 次元のリスト
    • Dynamo のディクショナリ
      • ディクショナリとは
      • [Dictionary]カテゴリのノード
      • コード ブロックにおけるディクショナリ
      • Revit での使用例
  • カスタム ノードとパッケージ
    • カスタム ノード
      • カスタム ノードの概要
      • カスタム ノードを作成する
      • ライブラリへのパブリッシュ
    • パッケージ
      • パッケージの概要
      • パッケージのケース スタディ - Mesh Toolkit
      • パッケージを開発する
      • パッケージをパブリッシュする
      • Zero-Touch Importing
  • Revit 用の Dynamo
    • Revit との連携
    • 選択
    • 編集
    • 作成
    • カスタマイズ
    • 設計図書の作成
  • Dynamo for Civil 3D
    • Civil 3D の接続
    • スタートアップ
    • ノード ライブラリ
    • サンプル ワークフロー
      • 道路
        • 照明柱の配置
      • 土地
        • サービスの配置
      • ユーティリティ
        • 構造物の名前を変更する
      • 軌道
        • クリアランスのエンベロープ
      • 測量
        • ポイント グループ管理
    • 高度なトピック
      • オブジェクト バインド
      • Python と Civil 3D
    • Dynamo プレーヤ
    • 便利なパッケージ
    • リソース
  • Dynamo in Forma Beta
    • Forma で Dynamo Player を設定する
    • Dynamo Player でグラフを追加、共有する
    • Dynamo Player でグラフを実行する
    • Dynamo コンピューティング サービスとデスクトップ版 Dynamo の違い
  • Dynamo でのコーディング
    • コード ブロックと DesignScript
      • コード ブロックとは
      • DesignScript 構文
      • 省略表記
      • 関数
    • DesignScript を使用するジオメトリ
      • DesignScript ジオメトリの基本
      • ジオメトリ プリミティブ
      • ベクトル計算
      • 曲線: 補間および制御点
      • 移動、回転、およびその他の変換
      • サーフェス: 補間、制御点、ロフト、回転
      • ジオメトリのパラメータ化
      • 交差およびトリム
      • ジオメトリのブール演算
      • Python 点ジェネレータ
    • Python
      • Python Script ノード
      • Python と Revit
      • 独自の Python テンプレートを設定する
    • 言語の変更
  • ベスト プラクティス
    • 見やすいプログラムを作成するためのガイドライン
    • スクリプト作成のガイドライン
    • スクリプト リファレンス
    • プログラムを管理する
    • Dynamo で大規模なデータ セットを効率的に操作する
  • サンプル ワークフロー
    • スタートアップ ワークフロー
      • パラメータを使用する花瓶
      • アトラクタ ポイント
    • 概念インデックス
  • 開発者向け Primer
    • ソースから Dynamo をビルドする
      • ソースから DynamoRevit をビルドする
      • Dynamo での依存関係の管理と更新
    • Dynamo 向けの開発
      • スタートアップ
      • Zero-Touch ケース スタディ - グリッド ノード
      • Zero-Touch ノードで Python スクリプトを実行する(C#)
      • Zero-Touch の詳細を確認する
      • Dynamo ノードの高度なカスタマイズ
      • Dynamo パッケージで COM (相互運用)タイプを使用する
      • NodeModel ケース スタディ - カスタム UI
      • Dynamo 2.x 用のパッケージと Dynamo ライブラリを更新する
      • Dynamo 3.x 用のパッケージと Dynamo ライブラリを更新する
      • 拡張機能
      • Dynamo 2.0+ のカスタム パッケージ編成を定義する
      • Dynamo コマンド ライン インタフェース
      • Dynamo の統合
      • Dynamo for Revit 向けの開発
      • パッケージをパブリッシュする
      • Visual Studio からパッケージをビルドする
      • パッケージとしての拡張機能
    • プル リクエスト
    • テストによる期待
    • サンプル
  • 付録
    • よくある質問(FAQ)
    • ビジュアル プログラミングと Dynamo
    • リソース
    • リリース ノート
    • 便利なパッケージ
    • サンプル ファイル
    • ホスト統合マップ
    • PDF をダウンロード
    • Dynamo のキーボード ショートカット
Powered by GitBook
On this page
  • API ドキュメント
  • コード テンプレート
  • 例
  • 目標
  • データセット
  • 対処法の概要
  • API ドキュメントを確認する
  • すべての集水域を取得する
  • オブジェクトをアンラップする
  • Python スクリプト
  • ポリカーブを作成する
  • 結果
  • IronPython と CPython
Edit on GitHub
Export as PDF
  1. Dynamo for Civil 3D
  2. 高度なトピック

Python と Civil 3D

Previousオブジェクト バインドNextDynamo プレーヤ

Last updated 2 months ago

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

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

  2. Python ノードを使用して Python を記述する

このセクションでは、Civil 3D 環境で Python を活用して、AutoCAD および Civil 3D .NET API を利用する方法について説明します。

Dynamo での Python の使用に関する一般情報については、「 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 の using ディレクティブまたは Imports ディレクティブに相当します。

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

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

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

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

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

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

カスタマイズする場合 既定の 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 の点を作成する

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

以上です。

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

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

これで、グラフ ロジックの作成を開始することができます。最初に、ドキュメント内のすべての集水域のリストを取得します。これに使用できるノードがあるため、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 タイプ
ラップ

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

図形 Autodesk.AutoCAD.DatabaseServices.Entity

CivilObject Autodesk.Civil.DynamoNodes.CivilObject

図形 Autodesk.Civil.DatabaseServices.Entity

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

Python スクリプト

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

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

# 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')



# 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 *



# このノードへの入力は、IN 変数にリストとして保存されます。
 = 




    


    
   
adoc = Application.DocumentManager.MdiActiveDocument
editor = adoc.Editor

with adoc.LockDocument():
    with adoc.Database as db:
        
        with db.TransactionManager.StartTransaction() as t:
                         
                
                               
                
                    
                                       
                    
                    
                        
                        
                    
           
            # トランザクション終了前にコミットする
            
            pass
            
# OUT 変数に出力をアサインします。

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

ポリカーブを作成する

この段階では、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 とも呼ばれる)を使用するように移行しました。この移行には、人気のある最新ライブラリや新しいプラットフォーム機能、基本的なメンテナンス、セキュリティ パッチへのアクセスなどのメリットがあります。

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

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

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

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

🎯
🎉
プロパティが Catchment クラス
Dynamo Blog
ビジュアル プログラミング
AutoCAD .NET API 開発者用ガイド
AutoCAD .NET API リファレンス ガイド
Civil 3D .NET API 開発者用ガイド
Civil 3D .NET API リファレンス ガイド
15KB
Python_Catchments.dyn
961KB
Python_Catchments.dwg
Civil 3D の既定の Python テンプレート
ドキュメント内のすべての集水域をレイヤごとに取得する
最終的なグラフ
集水域境界の、結果として生じた Dynamo ポリカーブ