開発者は、外部アプリケーションと外部コマンドを使用して機能を追加することができます。リボン タブとリボン パネルは外部アプリケーションを使用してカスタマイズできます。リボン パネルのボタンは外部コマンドに結合されます。
外部アプリケーションを Revit に追加するには、IExternalApplication インタフェースを実装するオブジェクトを作成します。
IExternalApplication インタフェースには、外部アプリケーションで優先される 2 つの抽象メソッド OnStartup()と OnShutdown()があります。Revit は起動時に OnStartup()を、終了時に OnShutdown()を呼び出します。
これは次のような OnStartup()と OnShutdown()抽象定義です。
コード領域 3-6: OnShutdown()と OnStartup() |
public interface IExternalApplication { public Autodesk.Revit.UI.Result OnStartup(UIControlledApplication application); public Autodesk.Revit.UI.Result OnShutdown(UIControlledApplication application); } |
UIControlledApplication パラメータを使用すると特定の Revit イベントにアクセスできるようになり、リボン パネルとコントロールのカスタマイズやリボン タブの追加も可能になります。たとえば、UIControlledApplication のパブリック イベント DialogBoxShowing を使用すれば、表示されるダイアログのイベントをキャプチャできます。次のコード スニペットは、ダイアログの表示直後に呼び出される処理関数を登録します。
コード領域 3-7: DialogBoxShowing イベント |
application.DialogBoxShowing += new EventHandler<Autodesk.Revit.Events.DialogBoxShowingEventArgs>(AppDialogShowing); |
次のコード例は、UIControlledApplication タイプを使用してイベント ハンドラを登録し、発生時にイベントを処理する方法を表しています。
コード領域 3-8: ControlledApplication を使用 |
public class Application_DialogBoxShowing : IExternalApplication { // Implement the OnStartup method to register events when Revit starts. public Result OnStartup(UIControlledApplication application) { // Register related events application.DialogBoxShowing += new EventHandler<Autodesk.Revit.UI.Events.DialogBoxShowingEventArgs>(AppDialogShowing); return Result.Succeeded; } // Implement this method to unregister the subscribed events when Revit exits. public Result OnShutdown(UIControlledApplication application) { // unregister events application.DialogBoxShowing -= new EventHandler<Autodesk.Revit.UI.Events.DialogBoxShowingEventArgs>(AppDialogShowing); return Result.Succeeded; } // The DialogBoxShowing event handler, which allow you to // do some work before the dialog shows void AppDialogShowing(object sender, DialogBoxShowingEventArgs args) { // Get the help id of the showing dialog int dialogId = args.HelpId; // Format the prompt information string String promptInfo = "A Revit dialog will be opened.\n"; promptInfo += "The help id of this dialog is " + dialogId.ToString() + "\n"; promptInfo += "If you don't want the dialog to open, please press cancel button"; // Show the prompt message, and allow the user to close the dialog directly. TaskDialog taskDialog = new TaskDialog("Revit"); taskDialog.MainContent = promptInfo; TaskDialogCommonButtons buttons = TaskDialogCommonButtons.Ok | TaskDialogCommonButtons.Cancel; taskDialog.CommonButtons = buttons; TaskDialogResult result = taskDialog.Show(); if (TaskDialogResult.Cancel == result) { // Do not show the Revit dialog args.OverrideResult(1); } else { // Continue to show the Revit dialog args.OverrideResult(0); } } } |