Revit Python Shell - 入門編 -
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