Dynamoが真価を発揮!Python Script活用シーン3つ

これからご紹介する「Python Script」は、Autodesk Dynamoに標準搭載されているPythonコーディング環境兼実行環境です[1]

Python Script はビジュアルプログラミングを補完する用途で使用されることが想定され、標準ノードとして用意されています。Dynamo Sandbox、Dynamo Revitを問わず利用可能です。

「Autodesk Dynamo」は、汎用BIMオーサリングツール「Autodesk Revit」に代表される様々なAutodeskアプリケーションで使用できるビジュアルプログラミングプラットフォームです。詳しくはこちらの記事をご覧ください。
BIM Manager's Garage | BIMを加速させる!Autodesk Dynamoとは?

Python Scriptは組込関数と標準モジュールのインポートをサポートする他、Dynamo Revitでは、Revit APIへのアクセスによりDynamo標準ノードにはない機能をDynamoスクリプトに実装することができます。

Revitがアップグレードされる度にバンドルされているDynamo Revitのバージョンも新しくなり、Dynamo Revitに標準搭載されているノードの数も増えています。

それでも、Dynamo標準ノードのラインナップはRevit APIが提供するクラスライブラリのほんの一部に当たるノードしか提供されていないので、Python Scriptを使用するかどうかでDynamoにより実装できる処理の選択肢数に圧倒的な差があります。

Python Scriptの利用により、DynamoはBIMに強みを発揮するビジュアルプログラミング言語としての本領を発揮すると言えるでしょう。

Revit APIへのアクセス以外にも、Python ScriptにはDynamoを補完する素晴らしい特徴があります。

Dynamoユーザーの中にもPython Scriptには苦手意識があって使用を躊躇する人がしばしば見られますが、もったいない!と思っています。

そこで本稿では、Python Scriptの概略と活用シーンをご紹介します。

記事を書いている人とこのサイトで大切にしていることは下記ページをご覧ください。
BIM Manager's Garage | このサイトについて
Pythonの概要や基本的使用方法、クラスやインスタンスといったオブジェクト指向プログラミングに関連する用語の説明については、Web上に多数の記事が存在しますので本稿では割愛します。代表的なPythonの解説記事として、下記の公式ドキュメントをご紹介します。
Python 3.10.0b2 ドキュメント

TL;DR

  • Autodesk Dynamoの標準ノード「Python Script」は他のノードと同じように入力ポートと出力ポートを持つ。コーディングを支援するエディタを使ってPythonの文法によりDynamoスクリプトを拡張することができる。
  • Python Scriptの活用シーンは大きく3つあり、①Revit APIクラスライブラリを利用する場合、②条件分岐を記述する場合、③反復処理を記述する場合に使用する。
  • Python Scriptの記述ではDynamo標準ノードが不得手とする条件分岐や反復処理を複雑に組合わせて使用することが多いが、Dynamo標準ノードで可能かつ容易な処理であっても、慣れてくればPython Scriptを使用する方が早い。

どういうユーザーインターフェース?

そもそも「Python」は、近年世界で最も使用されている高水準汎用プログラミング言語の1つです。インタープリタ型、動的型付け、オブジェクト指向、マルチプラットフォームという特徴の他、インデントにより処理の区切を示す外観上の特徴を持ちます。

近年のAIブームで学習者が増加したプログラミング言語の1つで、初心者にとっても理解しやすい簡易な構文と豊富なライブラリにより学習のコストパフォーマンスが高いため、プログラミング教育において最初に学ぶテキストプログラミング言語に選ばれることが多いと言われています。

他のノードと同様に、Python Scriptノードにも入力ポート(IN[0])と出力ポート(OUT)があり、入力したデータはPython Script上でオブジェクトとして使用可能です。「+」「-」をクリックすることで入力ポートを増やすこともできます。

右クリックから「編集…」でエディタが開きます。Python Scriptノードの余白をダブルクリックしても同じです。

エディタ上にはDynamo上でPythonを使用するために必要な最小限のコードは最初から記載され、Pythonの文法に沿ってコードを記載することで自動で着色や強調がされます。これによりコーディングがしやすくなっています。

Python Scriptノードの入力ポートに接続したデータは「IN」というList型変数に代入されており、 インデックスを指定することでリストのアイテムを取得することができます。

エディタ上で処理を終えた変数は「OUT」変数に代入することでPython Scriptの「OUT」から出力されます。

いつ使用する?

Python Scriptを使用することにより、ビジュアルプログラミングであるDynamoの短所を補うことができます。具体的には、Dynamo上で次の処理を行う場合に使用するのがおすすめです。

  1. Revit APIクラスライブラリを利用する場合
  2. 条件分岐を記述する場合
  3. 反復処理を記述する場合
Python Scriptを含めたDynamoスクリプト作成のガイドラインについては下記ページが参考になります。
Dynamo Primer | スクリプト作成のガイドライン

順に説明します。

Revit APIクラスライブラリを利用する場合

既に述べたようにDynamo RevitではPython Scriptを使用することでRevit APIに簡単にアクセスすることができ、クラスライブラリの膨大なメソッド、プロパティをプログラミング時の選択肢に加えてDynamoスクリプトを作成することができます。

条件分岐を記述する場合

Python Scriptにより大量のデータを条件分岐させ、条件に応じた処理を正確に適用することができます。

ビジュアルプログラミングであるDynamoにも「If」ノードが用意されているため、簡単な条件分岐は可能ですが、テキストプログラミングであるPython Scriptの方が簡易な記述で複雑な処理を実施できます。例えば、if文をネストして条件分岐を重ねる処理をDynamoで実装しようとすると、非常に冗長なグラフとなります。

反復処理を記述する場合

前述の条件分岐は、反復処理(繰り返し処理)を担うfor文、while文と組合わせて実装することが非常に多いです。これは通常のPythonプログラミングと同じです。

反復処理も条件分岐と同様に、Dynamoで実装しようとすると複雑で冗長なグラフとなりやすいですが、Python Scriptでは非常にスマートかつ正確に記述できます。


Dynamo標準ノードでできることは標準ノードで行えばよく、Python Scriptで行う必要はありませんが、以上でご紹介した条件分岐と反復処理の途中でDynamo標準ノードの処理を挟み込むことができないため、Python ScriptはRevit APIへのアクセスと組合わせて使用することが非常に多いです。

Python Scriptの方が少ないクリック数で処理を記述できるので、慣れてくればあらゆる処理を実装する方法として、優先してPython Scriptの利用を検討することになるでしょう。

脚注

  1. Dynamo Primer | 10.4. Python Script

関連記事

コメント