14.

Revit API 概要|Autodesk.Revit.DB/UI・Application/Document/Element・IExternalCommand・内部単位フィート

編集
Revit API · 14

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」と覚えると整理しやすいです。

Autodesk.Revit.DBRevitAPI.dll / データベース層
  • Element・Wall・Parameter
  • FilteredElementCollector
  • Transaction など、モデル本体を扱うクラス群
Autodesk.Revit.UIRevitAPIUI.dll / UI 層
  • IExternalCommand
  • UIApplication・UIDocument
  • TaskDialog・RibbonPanel など、対話を扱うクラス群

2Application / Document / Element の階層

API の主要オブジェクトは、大きいものから小さいものへと階層構造になっています。

1Application
2Document
3Element
Application

Revit セッション全体を表す(Autodesk.Revit.ApplicationServices.Application)。UI 側の入口は UIApplication

Document

開いている 1 つのモデル(.rvt)。要素の追加・編集・取得はすべて Document を起点に行う。UI 側は UIDocument

Element

壁・床・ファミリインスタンスなど個々の要素。すべての要素は ElementId で一意に識別される。

外部コマンドでは、引数の ExternalCommandData から UIApplicationUIDocumentDocument とたどって、対象モデルにアクセスします。

3IExternalCommand と IExternalApplication

アドインのエントリポイントは、用途に応じて次の 2 つのインターフェースを実装します。詳しい使い分けは 外部コマンド/アプリ を参照してください。

IExternalCommandボタン実行型
  • ボタンクリックなどで 1 回実行される処理
  • Execute メソッドを実装
  • 戻り値に Result.Succeeded / Failed / Cancelled を返す
IExternalApplication起動時常駐型
  • 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 つを理解しておくと「変更できない」「数値が異常」といった典型的なハマりを避けられます。

トランザクション必須
要素作成・パラメータ設定・削除などモデルを変更する操作は、必ず TransactionStartCommit で囲む。トランザクション外で変更しようとすると例外になる。詳細は トランザクションと要素編集 を参照
内部単位はフィート
長さの内部値は表示単位(mm など)に関わらず常に「フィート」。座標や寸法を入出力する際は UnitUtils.ConvertToInternalUnits / ConvertFromInternalUnits で変換する

全体像でつかむ Revit API

Revit API は一見クラスが膨大ですが、構造はシンプルです。DB と UI の 2 名前空間に分かれ、Application → Document → Element の階層でモデルにたどり着き、IExternalCommand / IExternalApplication という 2 つの入口から処理が始まる——この骨格さえ掴めば、個々のクラスは「どの層・どの段階のものか」で位置づけられます。

次は実際に要素を集めてみましょう。要素の取得とフィルタFilteredElementCollector の使い方を学ぶと、API でできることが具体的に見えてきます。

主要オブジェクトの階層と、変更を囲む Transaction Application(セッション全体) Document(1つのモデル) Element:壁 Element:床 Element:ドア …各 ElementId で識別 Transaction Start 要素を作成・編集 Commit モデル変更は必ず この枠の中で行う
図: Revit API の骨格 — Application → Document → Element の階層でモデルにたどり着く。要素の作成・編集はすべて Transaction(Start〜Commit)の中で行うのがルール。

次に読む

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Revitとは
  2. ファミリ(システム/ロード/インプレイス)
  3. カテゴリ・タイプ・インスタンス
  4. パラメータ(プロジェクト/共有/グローバル/ファミリ)
  5. レベルと通り芯
  6. ビューとビューテンプレート
  7. シートと図面化
  8. スケジュール表(集計表)
  9. ワークシェアリングと中心ファイル
  10. フェーズとデザインオプション
  11. リンクと座標連携
  12. Dynamo入門
  13. 開発環境構築(Visual Studio + .addin マニフェスト)
  14. Revit API 概要
  15. Revit API:要素の取得とフィルタ
  16. Revit API:トランザクションと要素編集
  17. Revit API:外部コマンド/アプリ

最近更新/作成されたページ