示された手順を使用して Hello World プログラムを作成するには、Revit プラットフォーム API および C# を使用します。VB.NET を使用したアドイン アプリケーションの作成方法については、「VB.NET の Hello World」を参照してください。
Hello World ウォークスルーは、次のトピックを取り扱います。
このセクションのすべての操作およびコードは、Visual Studio 2012 を使用して作成されました。
Visual Studio で C# プログラムを作成するには、まずプロジェクト タイプを選択し、新しいクラス ライブラリを作成します。
図 1: 新規プロジェクトを追加
[OK]をクリックして .dll を選択して、ダイアログ ボックスを閉じます。RevitAPI が[ソリューション エクスプローラ]の参照ツリーに表示されます。
RevitAPIUI.dll に対して上記の手順を繰り返します。
アドインを作成するには、次のコードを追加します。
コード領域 2-1: スタートアップ |
using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; namespace HelloWorld [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] public class Class1 : IExternalCommand { { public Autodesk.Revit.UI.Result Execute(ExternalCommandData revit, ref string message, ElementSet elements) { TaskDialog.Show("Revit", "Hello World"); return Autodesk.Revit.UI.Result.Succeeded; } } } |
図 2: Intellisense を使用してインタフェースを実装
すべての Revit アドイン アプリケーションには、IExternalCommand インタフェースを実装するエントリ ポイント クラスが必要です。 また、Execute()メソッドを実装する必要があります。Execute()メソッドは、他のプログラムの Main()メソッドに似たアドイン アプリケーションのエントリ ポイントです。アドイン エントリ ポイントクラス定義がアセンブリに含まれています。詳細は、「アドインの統合」を参照してください。
コードを作成した後、ファイルをビルドする必要があります。[ビルド]メニューから、[ソリューションのビルド]をクリックします。ビルドの出力が出力ウィンドウに表示され、エラーなしでプロジェクトがコンパイルされたことを表します。
HelloWorld.dll プロジェクトの出力ディレクトリに表示されます。Revit でアプリケーションを呼び出す場合は、Revit に登録するマニフェスト ファイルを作成します。
コード領域 2-2: 外部コマンドの .addin マニフェスト ファイルを作成 |
<?xml version="1.0" encoding="utf-8" standalone="no"?> <RevitAddIns> <AddIn Type="Command"> <Assembly>D:\Sample\HelloWorld\bin\Debug\HelloWorld.dll</Assembly> <AddInId>239BD853-36E4-461f-9171-C5ACEDA4E721</AddInId> <FullClassName>HelloWorld.Class1</FullClassName> <Text>HelloWorld</Text> <VendorId>ADSK</VendorId> <VendorDescription>Autodesk, www.autodesk.com</VendorDescription> </AddIn> </RevitAddIns> |
<runtime> <generatePublisherEvidence enabled="false" /> <loadFromRemoteSources enabled="true"/> </runtime>
マニフェスト ファイルの使用の詳細は、「アドインの統合」を参照してください。
デバッグ モードでプログラムを実行する場合、変数やオブジェクトの状態を調べるためにプログラムを一時停止するには、ブレークポイントを使用します。エラーがある場合は、プログラムを実行して変数を確認することで、予期しない値が発生する原因を推定することができます。
図 3: デバッグ環境を設定
TaskDialog.Show("Revit", "Hello World");
テスト デバッグ:
図 4: HelloWorld 外部ツール コマンド
図 5: TaskDialog メッセージ
Q: 自分のアドイン アプリケーションがコンパイルできません。
A: サンプル コードをコンパイルするとエラーが表示される場合は、アドインのコンパイルに使用された RevitAPI のバージョンが問題である場合があります。古い RevitAPI 参照を削除して、新しい RevitAPI 参照をロードします。詳細は、「参照の追加」を参照してください。
Q: [アドイン]タブがない、または自分のアドイン アプリケーションが[外部ツール]の下に表示されないのはなぜですか?
A: 多くの場合、アドイン アプリケーションのロードに失敗すると、Revit はエラーについての情報に関するエラー ダイアログを起動時に表示します。たとえば、マニフェスト ファイルの指定した場所にアドイン DLL が見つからない場合は、次のようなメッセージが表示されます。
図 6: 外部ツール エラー メッセージ
FullClassName で指定されたクラス名が見つからない、または IExternalCommand から継承されない場合も、エラー メッセージが表示されます。
ただし、場合によっては、アドイン アプリケーションがメッセージなしでロードに失敗する場合があります。考えられる原因には、次が含まれます。
Q: 自分のアドイン アプリケーションが動作しないのはなぜですか?
A: アドイン アプリケーションが外部ツールの下にある場合でも、動作しない場合があります。多くの場合、コードの例外が原因です。
次に例を示します。
コード領域 2-3: Execute()の例外 |
Command: IExternalCommand { A a = new A();//line x public IExternalCommand.Result Execute () { //… } } Class A { //… } |
次の 2 つの例外が、明確に問題を識別します。
Revit は、コマンドが失敗したときに捕捉されなかった例外についての情報を含むエラー ダイアログを表示します。
図 7: 外部コマンドで処理できない例外
これはコマンドのデバッグの支援を目的としており、ユーザに展開されたコマンドは、例のエントリ メソッドで Try Catch Finally を使用して、Revit によって例外が捕捉されるのを防ぐ必要があります。次に例を示します。
コード領域 2-4: 実行文で Try Catch を使用: |
public IExternalCommand.Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { ExternalCommandData cdata = commandData; Autodesk.Revit.ApplicationServices.Application app = cdata.Application; try { // Do some stuff } catch (Exception ex) { message = ex.Message; return Autodesk.Revit.UI.Result.Failed; } return Autodesk.Revit.UI.Result.Succeeded; } |