この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
ページ更新者:atom
更新日時:2026-06-29 12:05:00

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

この記事の要点
  • Revit API は2つの名前空間に大別される。モデル操作の Autodesk.Revit.DB と、UI 操作の Autodesk.Revit.UI
  • 主要オブジェクトは Application(アプリ全体)・Document(開いているモデル)・Element(モデル内の各要素)の階層。
  • 処理の入口は IExternalCommand(ボタン実行型)と IExternalApplication(起動時常駐型)の2インターフェース。
  • モデルを変更する操作は必ずトランザクション内で行う必要がある。
  • API の内部単位は「フィート」固定。表示単位と異なるため、入出力時に単位変換が必要。

Revit API は、Revit のモデルを .NET から操作するためのオブジェクト指向 API です。本記事では全体像と、開発時に必ず押さえる勘所を整理します。環境準備は 開発環境構築、要素の取り出しは 要素取得 を参照してください。

2つの名前空間: DB と UI

Revit API は大きく2つの名前空間に分かれます。

  • Autodesk.Revit.DB(RevitAPI.dll): データベース層。Element、Wall、Parameter、FilteredElementCollector、Transaction などモデル本体を扱うクラス群。
  • Autodesk.Revit.UI(RevitAPIUI.dll): ユーザーインターフェース層。IExternalCommand、UIApplication、UIDocument、TaskDialog、RibbonPanel などUI・対話を扱うクラス群。

「モデルそのものを触るなら DB、ユーザーや画面に関わるなら UI」と覚えると整理しやすいです。

Application / Document / Element の階層

API の主要オブジェクトは階層構造になっています。

  • Application(Autodesk.Revit.ApplicationServices.Application): Revit セッション全体を表す。UI 側の入口は UIApplication
  • Document: 開いている1つのモデル(.rvt)。要素の追加・編集・取得はすべて Document を起点に行う。UI 側は UIDocument で、選択中の要素やアクティブビューを扱う。
  • Element: 壁・床・ファミリインスタンスなど、モデル内の個々の要素。すべての要素は ElementId で一意に識別される。

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

IExternalCommand と 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)] 属性は必須で、モデル変更時のトランザクション管理方式を宣言します。

トランザクション必須と内部単位

API を使ううえで初学者が必ずつまずく2点を押さえておきます。

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

この2点を最初に理解しておくと、「変更できない」「数値が異常」といった典型的なハマりを避けられます。

関連記事