今回は、アドイン に続いて、Revit API を使うもう一つのカスタマイズ形態である マクロ についてご紹介します。マクロは Revit 製品に組み込まれてインストールされる SharpDevelop を開発環境として利用します。マクロの開発環境は、Revit 2012 まで Microsoft 社の VSTA(Visual Studio Tools For Applications)を利用していましたが、Revit 自身が利用する .NET Framework に追従するために、Revit 2013 から SharpDevelop に変更されました。どちらの開発環境も、.NET Framework をベースにした開発プラットフォームで、アプリケーション埋め込みのマクロを作成する機能を提供します。
マクロを開発するには、Revit の [管理] タブにある [マクロ] リボンパネル にある [マクロ マネージャ] ボタンから SharpDevelop にアクセスします。[マクロ] リボンパネルには、この他にも [マクロ セキュリティ] ボタンが用意されています。
SharpDevelop の開発画面を表示するには、作成しようとするマクロを、どのレベルで利用するものとするか決定しなければなりません。選択肢は、アプリケーション レベル マクロ と ドキュメント レベル マクロ の 2 つです。マクロ タイプについては、後で説明することにします。SharpDevelop の画面ですが、残念ながら英語版での提供になります。SharpDevelop 自体はオープン ソースであるため、有志の方々によって日本語化されていますが、Revit 上での使用は製品と一緒にインストールされた英語版のみとなりますので、注意が必要です。
SharpDevelop の画面構成は Visual Studio に似ているので、Visual Studio の使用経験をお持ちであれば、さほど迷うことはないように思えます。
さて、マクロというと VBA と勘違いされる方もいらっしゃると思いますので、念のため違いもご紹介しておきましょう。VBA は Microsoft 社がオートデスクにライセンスて提供して、AutoCAD や Inventor に組み込んで提供しています。VBA が利用するテクノロジは COM なので、Revit API がベースとしている .NET Framework とは自ずと異なります。簡単にまとめると、次のようになります。
最も大きな違いは、SharpDevelop で作成したマクロの実行前には、事前にプログラムをビルド(コンパイル)しておく必要がある、という点です。Revit API が .NET Framework ベースであることに起因するものですが、ビルド時に表示されるエラーはすべて修正しておく必要があるので、VBA に比べるとあまり「気軽」ではないかも知れません。 VBA の場合には、インタプリタ言語の特性から、実行時にプログラムを解釈するため、事前ビルドの必要性がありません。
ドキュメント レベル マクロ
ドキュメント レベル マクロは、Revit プロジェクト(.rvt)ファイルや ファミリ ドキュメント ファイル(.rfa)ファイル内でのみ利用できるマクロで、保存場所は各ドキュメント ファイルとなります。つまり、作成したマクロは、ドキュメントに埋め込まれるようになります。マクロが実行できるのは、マクロが埋め込まれたドキュメントを Revit で開いているときのみです。逆に、ドキュメントを関連業者などに渡すことで、相手先の Revit でドキュメントを開いて、埋め込まれたマクロを実行することが出来ます。
Revit 上でマクロが埋め込まれたドキュメント ファイルを 開こうとすると、次のような警告メッセージが表示されます。悪意のある不正なマクロ プログラムが実行されないように、マクロの存在を事前に把握していない場合には、マクロを無効にすることも出来ます。
ドキュメント レベル マクロを作成すると、次のようなスケルトン コードが自動的に生成されます。あとは、指定したマクロ箇所に、処理したい内容のプログラムを書き込んでデバッグ、ビルドをしていくことになります。
namespace CSharp_Doc_Macro |
アプリケーション レベル マクロ
アプリケーション レベル マクロは、Revit がインストールされたコンピュータでドキュメントに依存せるに利用できるマクロです。作成したマクロは、C:\ProgramData\Autodesk\Revit\Macros\2014\Revit\AppHookup フォルダ直下に、作成したマクロ モジュール名ごとにフォルダが用意されて保存されています。 この場所にマクロが保存されていれば、Revit がマクロを認識して [マクロ マネージャ] ダイアログに表示されます。
アプリケーション レベル マクロを作成した場合も、ドキュメント レベル マクロようなにスケルトン コードが自動的に生成されます。 次の例は、HelloWorld マクロ名を指定して生成されたスケルトン コードです。
namespace CSharp_App_Macro |
開発手順
具体的な開発の手順と画面遷移は、次のとおりです。
1. [管理] タブの [マクロ マネージャ] を起動します。
2. アプリケーション レベル マクロ と ドキュメント レベル マクロのいずれかを選択します。
3. [マクロ マネージャ] ダイアログ上で開発言語を選択してモジュールを作成します。
4. [マクロ マネージャ] ダイアログ上でモジュール内にマクロを定義します。
5. プログラム コードの編集画面へ移動します(SharpDevelop 画面の表示)。
7. プログラムをビルドして、表示されるエラーを順次修正していきます。
8. Revit 画面に戻り、[マクロ マネージャ] ダイアログ上で [実行] ボタンからマクロを実行します。
マクロ タイプの違いによる留意点
ドキュメント レベル マクロやアプリケーション レベル マクロには、物理的なプログラム上にも留意すべき差があります。クラス定義された主体となるオブジェクトの違いで、Revit API を利用する際に重要となる Application、UIApplication、Document、UIDocument オブジェクトの取得方法が変わってくる点です。コード上では、ThisDocument クラス名と ThisApplication のクラス名で、クラスが表しているオブジェクトを判断できます。
マクロ セキュリティ
ドキュメント レベル マクロやアプリケーション レベル マクロも、Revit のセキュリティ設定で振る舞いを指定しておくことが出来ます。
マクロとアドインの違い
アドインもマクロも .NET Framework ベース の Revit API を利用するので、プログラム上の内容差はあまりありません。ただ、差別化はされています。次の図は、それらを比較して説明するものです。
アドイン マニフェストを作成する手間が省けるので、マクロは簡単に Revit API を評価したり、設計上の反復操作を自動化するのには適していると言えます。ただし、リボン インタフェースへのボタン登録には対応できないので、毎回、マクロ マネージャを起動して実行する必要があります。
また、マクロで有用なツールを作成しても、Autodesk Exchange Apps ストアへのアプリケーション提出・公開が出来ません。
By Toshiaki Isezaki
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。