タイトル: Revit API 概要
SEOタイトル: Revit API 概要|Autodesk.Revit.DB/UI・Application/Document/Element・IExternalCommand・内部単位フィート
Revit API 概要
Revit API は、Revit のモデルをプログラムから操作するためのオブジェクト指向 API です。何ができて、どんな構造になっているのか。開発時に必ず押さえておきたい勘所を、全体像から整理します。
この記事の要点
- API は 2 つの名前空間に大別される。モデル操作の
Autodesk.Revit.DBと UI 操作のAutodesk.Revit.UI - 主要オブジェクトは Application・Document・Element の階層になっている
- 処理の入口は
IExternalCommand(ボタン実行型)とIExternalApplication(起動時常駐型) - モデル変更は必ずトランザクション内で行う。内部単位は「フィート」固定
この記事は Revit カテゴリの一部です。API の全体像を押さえると、個々の機能の位置づけが理解しやすくなります。環境準備は 開発環境構築、要素の取り出しは 要素の取得とフィルタ を参照してください。
12 つの名前空間:DB と UI
Revit API は大きく 2 つの名前空間に分かれます。「モデルそのものを触るなら DB、ユーザーや画面に関わるなら UI」と覚えると整理しやすいです。
- Element・Wall・Parameter
- FilteredElementCollector
- Transaction など、モデル本体を扱うクラス群
- IExternalCommand
- UIApplication・UIDocument
- TaskDialog・RibbonPanel など、対話を扱うクラス群
2Application / Document / Element の階層
API の主要オブジェクトは、大きいものから小さいものへと階層構造になっています。
Revit セッション全体を表す(Autodesk.Revit.ApplicationServices.Application)。UI 側の入口は UIApplication。
開いている 1 つのモデル(.rvt)。要素の追加・編集・取得はすべて Document を起点に行う。UI 側は UIDocument。
壁・床・ファミリインスタンスなど個々の要素。すべての要素は ElementId で一意に識別される。
外部コマンドでは、引数の ExternalCommandData から UIApplication → UIDocument → Document とたどって、対象モデルにアクセスします。
3IExternalCommand と IExternalApplication
アドインのエントリポイントは、用途に応じて次の 2 つのインターフェースを実装します。詳しい使い分けは 外部コマンド/アプリ を参照してください。
- ボタンクリックなどで 1 回実行される処理
Executeメソッドを実装- 戻り値に
Result.Succeeded/Failed/Cancelledを返す
- Revit 起動時にロードされ常駐
OnStartupでリボン UI 構築やイベント購読OnShutdownで後始末
最小限の外部コマンドは次のように書きます。
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
[Transaction(TransactionMode.Manual)]
public class HelloWorldCommand : IExternalCommand
{
public Result Execute(ExternalCommandData commandData,
ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
TaskDialog.Show("Hello", "ドキュメント: " + doc.Title);
return Result.Succeeded;
}
}
[Transaction(TransactionMode.Manual)] 属性は必須で、モデル変更時のトランザクション管理方式を宣言します。
4トランザクション必須と内部単位
API を使ううえで、初めて触れる人が必ずつまずく 2 点を先に押さえておきます。この 2 つを理解しておくと「変更できない」「数値が異常」といった典型的なハマりを避けられます。
要素作成・パラメータ設定・削除などモデルを変更する操作は、必ず
Transaction の Start〜Commit で囲む。トランザクション外で変更しようとすると例外になる。詳細は トランザクションと要素編集 を参照長さの内部値は表示単位(mm など)に関わらず常に「フィート」。座標や寸法を入出力する際は
UnitUtils.ConvertToInternalUnits / ConvertFromInternalUnits で変換する全体像でつかむ Revit API
Revit API は一見クラスが膨大ですが、構造はシンプルです。DB と UI の 2 名前空間に分かれ、Application → Document → Element の階層でモデルにたどり着き、IExternalCommand / IExternalApplication という 2 つの入口から処理が始まる——この骨格さえ掴めば、個々のクラスは「どの層・どの段階のものか」で位置づけられます。
次は実際に要素を集めてみましょう。要素の取得とフィルタ で FilteredElementCollector の使い方を学ぶと、API でできることが具体的に見えてきます。