👋

Revit Python Shell - 入門編 -

2020/12/24に公開

1. インストール

Revit Python Shell

Revit Python Shellはこちらからインストールすることができます。使用しているRevitのバージョンに合わせてインストールしてください。

RevitLookup

RevitLookupはこちらからインストールすることができます。Revitのデータ構造を理解するうえで非常に役に立ちます!!こちらもバージョンに合わせてインストールしてください。

Revit Python Wrapper(オススメ)

Revit Python WrapperはPythonでRevitデータを扱うときに扱いやすいようにしてくれるライブラリになります。Githubを使ったことがある方はこちらからcloneすることができます。使ったことがない方もダウンロードすることができますのでこちらからCodeのドロップダウンの中にあるDownload ZIPからダウンロードしてみてください。
ダウンロードした後は設定が必要となりますのでこちらを参照してみてください。

Revitron for Revit Python Shell(オススメ)

RevitronもRevit Python Wrapper同様Revitのデータを扱いやすくしてくれます。先ほど同様こちらからclone、またはダウンロードしてみてください。
設定も同様になりますのでこちらを参考にしてみてください。

これで設定完了です。

2. そもそもRevitPythonShellって何?

2.1 Shellとは

ユーザーがキーボードからコマンドラインに入力したコマンドを解釈してその実行を制御するプログラムを,コマンド・インタプリタと言います。Shell(シェル)は,LinuxなどUNIX系OSで使われるコマンド・インタプリタです。
 シェルの役割は,ユーザーが入力したコマンドを解釈して,正しいコマンドであればそれを実行します。正しくないコマンドの場合はそのようにユーザーに知らせます(図1)。正しいコマンドの場合は,シェル自身が処理したり,コマンドを処理するプログラムを起動したりします。
 シェルには,上で述べた(1)ユーザーが入力したコマンドの解釈と実行を対話的に行うモードのほかに,(2)シェル・スクリプトと呼ばれるプログラムを非対話的に解釈して実行するモードがあります。 (日経クロステック)

2.2 Revit Python Shellの概要

RevitPythonShellはDaren Thomas氏が作成したRevitアドインで、 Revit API をプログラミング言語 Python にて触ることができるようにしたものです。また、Python の精神を継承した REPL (Read Evaluate Print Loop) が含まれており、実行中の Autodesk Revit の中で短いコードの断片を試すことができる対話型のシェルです。これにより、より実践的に Revit 用のアドオン等を作成する方法を提供します。

機能紹介

  • Python 言語スクリプト (IronPython)
  • シンタックスハイライト
  • Revit API へのフルアクセス
  • RevitPythonShell スクリプトを standalone-addins としてエクスポート可能
  • Python標準ライブラリおよび.NETフレームワークのライブラリが使用可能
  • Revit を再起動せずにスクリプトを編集 + 実行可能

3. 使用可能な定数

定数 説明
__revit__ プラグインに渡されるExternalCommandDataから取得したAutodesk.Revit.Applicationインスタンスを参照します。
__commandData__ ExternalCommandDataは、"Open Python Shell "をクリックした時やリボンからスクリプトを起動した時にRevitPythonShellプラグインに渡されます。対話型シェルウィンドウを閉じると、__message__の内容が代入され、Revitがアクセスできるようになります。
__elements__ "Open Python Shell" をクリックしたときや、リボンからスクリプトを起動したときにRevitPythonShellに渡されるElementSetです。
__result__ これは IExternalCommand.Result.Succeeded に設定されていますが、必要に応じて変更することができます。対話型シェルが終了するか、スクリプトが終了すると、RevitPythonShell は IExternalCommand.Execute メソッドの結果としてこの変数の値を返します。
__vars__ これは、設定ファイルで定義されているユーザ定義変数の IDictionary<string, string> です。
__uiControlledApplication__ (StartupScript のみ) UIControlledApplicationinstance への参照。
__window__ 現在の出力ウィンドウへの参照。基本的には __window__.Close() のみが動作することが保証されています。
__file__ 外部スクリプトと RpsAddin でデプロイされたスクリプトは __file__ ビルトインをサポートしています - 変数には、実行されるソース ファイルへのフル パスが含まれます。

4. 使用可能な変数・関数

変数 定義
uidoc __revit__.ActiveUIDocument
doc __revit__.ActiveUIDocument.Document
selection __revit__.ActiveUIDocument.Selection.Elements
alert(msg) UI.TaskDialog.Show('RevitPythonShell', msg)
quit() or exit() __window__.Close()

5. Hello RPS!!

5.1 Hello World

まずは print("Hello World") と打ってみましょう!!
以下のように表示されていれば成功です。

Hello World

5.2 Hello alert()

まずは alertと打ってみましょう!!

<function alert at 0x0000000000000382>

これは alert が変数ではなく、関数であることをさしています。
関数では必ず () が必要になります。
次は alert()と打ってみましょう!!

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: alert() takes exactly 1 argument (0 given)

タイプエラーが発生しました。内容は1つの引数が必要ですが0個しか与えられてませんとなっています。alert() 関数は引数として表示したい文字列が必要です。
今回は先ほど同様Hello Worldと表示したいので、 alert("Hello World")と打ってみましょう!!

このように表示されたら成功です。

Discussion