12.

Dynamo入門|Revitビジュアルプログラミング・ノードとワイヤ・Pythonノード・Dynamo Player

編集
Revit · 12

Dynamo入門

Revit に付属するビジュアルプログラミング環境。コードを書かずにノードを繋いで反復作業を自動化する考え方と、Revit API への橋渡しまでを解説します。

この記事の要点

  • Dynamo は Revit に付属するビジュアルプログラミング環境で、コードを書かずにノードを繋いで自動化を実現する
  • ノード(処理ブロック)ワイヤ(配線)で接続し、左から右へデータを流すデータフロー型の考え方
  • Revit 要素を一括取得・編集できるため、繰り返し作業やパラメータの一括設定に強い
  • 標準ノードで足りない処理はPython ノードでスクリプトを書いて拡張できる
  • 完成したスクリプトはDynamo Playerから、グラフを開かずワンクリックで実行できる

本記事は Revit カテゴリの一部です。Dynamo は Revit に同梱されるビジュアルプログラミング環境です。プログラミング未経験の設計者でも、ノードを繋ぐだけで反復作業を自動化できます。その考え方と、より本格的な開発である Revit API への橋渡しを解説します。

1ビジュアルプログラミングの考え方

Dynamo は「データフロー型」のプログラミングです。処理の単位である「ノード」を、データの流れを表す「ワイヤ」で繋ぎ、左から右へ値を加工していきます。テキストでコードを書く代わりに、画面上で部品を配線していく感覚です。

たとえば「すべての壁を取得」ノードの出力を「パラメータ値を取得」ノードの入力に繋ぐと、全壁のパラメータ値が一覧で得られます。変数・関数・繰り返しといったプログラミングの基本概念を、視覚的に学べる教材としても優れています。

1壁を取得
2値を取得
3加工・書き戻し

2ノードとワイヤ

Dynamo の画面は、主に 3 つの概念で成り立っています。

ノード

1 つの処理を表すブロック。入力ポート(左)と出力ポート(右)を持つ。Revit 要素を操作する専用ノードが多数用意されている。

ワイヤ

ノードの出力ポートと別ノードの入力ポートを繋ぐ配線。データの流れを表す。

リスト

値の集合(リスト)を一括で扱うのが得意。1 本のワイヤに複数要素が流れ、各ノードがまとめて処理する。

リストの階層(ネスト)の扱いと「レーシング(最長/最短/外積)」の理解が、Dynamo を使いこなす最初の壁です。

3Revit 要素の一括処理

Dynamo の最大の利点は、多数の Revit 要素を一度に処理できる点です。手作業では時間がかかる定型処理を、グラフ 1 本で再現可能にできます。代表的な用途を挙げます。

  • 全部屋の面積を集計してパラメータに書き戻す。
  • 図面枠のタイトルブロックに、図面番号を連番で一括入力する。
  • 外部 Excel から読み込んだ仕様値を、対応するファミリインスタンスへ一括反映する。
  • 勾配・座標などの計算結果に基づき、要素を自動配置する。

1 つ目の用途は、前章で扱った集計表(スケジュール表)に近い処理を、書き戻しまで含めて自動化する例です。

4Python ノードと API への橋渡し

標準ノードだけでは表現しにくい複雑な条件分岐やループは、「Python ノード」にスクリプトを書いて補えます。Python ノードの内部からは、Dynamo が提供する RevitServices(現在のドキュメント取得などのブリッジ)経由で Revit API(Autodesk.Revit.DB)を直接呼び出せるため、Dynamo は本格的な開発への入り口にもなります。

Dynamo から API 開発へ

「Dynamo でできることの限界」に達したとき、次のステップが Revit API による C# アドイン開発です。ノードで概念を掴んでから API に進むと、要素取得やトランザクションといった考え方がスムーズに理解できます。詳しくは Revit API 概要 を参照してください。

5Dynamo Player による実行

完成したグラフ(.dyn)は「Dynamo Player」から実行できます。Player は Revit のリボンから起動でき、グラフエディタを開かずに一覧から選んでワンクリックで走らせられます。入力値(対象ビューや数値)を Player 上で指定できるよう設計しておけば、作者以外のメンバーも安全に自動化を使えます。社内で再利用するツールは Player 前提で作るのが定石です。

6パッケージとノードライブラリ

Dynamo には標準ノードのほかに、コミュニティが公開する「パッケージ」をインストールして機能を拡張できる仕組みがあります。代表的なものに、要素操作を大幅に補強する汎用パッケージや、データ加工・形状処理に特化したものがあります。パッケージマネージャから検索してインストールすると、専用ノードがライブラリに追加されます。

パッケージ依存の注意

パッケージはバージョンや Revit の世代に依存することがあり、共有グラフが他 PC で動かない原因になりがちです。社内で配布するグラフは、依存パッケージとそのバージョンを明記し、できれば標準ノード中心で組むと保守が楽になります。

7つまずきやすいポイント

Dynamo を学び始めた人が陥りやすい点を押さえておくと、習得が早まります。

  • リストの階層:データがリストの中のリスト(ネスト)になると、ノードがどの階層に作用するかで結果が変わる。階層を意識し、必要に応じて「Flatten」や「List.Map」で整える。
  • レーシング:2 本の入力リストを組み合わせる際の対応規則(最短/最長/外積)を理解しないと、件数が想定外になる。
  • 変更はトランザクション扱い:Dynamo が Revit モデルを変更する処理は、内部的にトランザクションとして実行され Undo の対象になる。意図しない一括変更を流すと大量の要素が一度に書き換わるため、対象を限定してから実行する。
  • 実行前のバックアップ:破壊的な処理を流す前は、モデルを保存しておくと安全。

「データを流して加工する」という発想に慣れる

Dynamo のデータフロー型の考え方は、入力されたデータを次々と変換しながら出力へつなげていく、一連の加工パイプラインのイメージです。「全部の壁を取り出す → 必要なものだけ絞り込む → 値を計算する → 書き戻す」という流れは、リストを段階的に処理していく発想そのものです。この感覚に慣れると、リストの階層やレーシングといった最初の壁も「データの単位が合っているか」という観点で整理しやすくなります。ここで掴んだ感覚は、そのまま C# によるアドイン開発へ活きます。

取得要素を集める
加工絞り込み・計算
反映モデルへ書き戻す

ノードで概念を掴んだ次の一歩として、本格的なプログラムによる拡張は Revit API 概要 で扱います。

ノードをワイヤで繋ぎ、左から右へデータを流す(データフロー) ノード 壁を取得 入力 出力 ワイヤ ノード 値を加工 ノード 書き戻す Revit モデルへ反映(多数の要素を一括処理) 標準ノードで足りなければ Python ノードで拡張 Python ノード
図: Dynamo のデータフロー — 処理単位のノードをワイヤで繋ぎ、左から右へデータを流す。多数の Revit 要素を一括で取得・加工・書き戻しでき、標準ノードで足りなければ Python ノードで拡張する。

次に読む

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Revitとは
  2. ファミリ(システム/ロード/インプレイス)
  3. カテゴリ・タイプ・インスタンス
  4. パラメータ(プロジェクト/共有/グローバル/ファミリ)
  5. レベルと通り芯
  6. ビューとビューテンプレート
  7. シートと図面化
  8. スケジュール表(集計表)
  9. ワークシェアリングと中心ファイル
  10. フェーズとデザインオプション
  11. リンクと座標連携
  12. Dynamo入門
  13. 開発環境構築(Visual Studio + .addin マニフェスト)
  14. Revit API 概要
  15. Revit API:要素の取得とフィルタ
  16. Revit API:トランザクションと要素編集
  17. Revit API:外部コマンド/アプリ

最近更新/作成されたページ