ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
テンプレート
テンプレートがありません。
外部コマンド/アプリ
アドインの「入口」と「UI」を作るのが外部コマンドと外部アプリです。リボンに自分のボタンを並べ、ダイアログから安全にモデルを操作する。本格的な拡張ツールに欠かせない仕組みを解説します。
この記事の要点
IExternalCommandはボタン実行型。Executeを実装し、結果をResultで返すIExternalApplicationは起動時常駐型。OnStartupで初期化、OnShutdownで後始末する- リボン UI は
OnStartup内でRibbonPanelを作り、PushButtonを追加して構築する - モードレスダイアログから安全にモデルを操作するには
ExternalEvent(外部イベント)を使う
この記事は Revit カテゴリの一部です。開発の前提は 開発環境構築、API の全体像は Revit API 概要 を参照してください。
1外部コマンド(IExternalCommand)
IExternalCommand は、リボンのボタンなどから 1 回実行される処理を表すインターフェースです。実装するのは Execute メソッドだけで、処理の成否を戻り値で返します。
ref string message にエラー文を入れると Revit が表示する戻り値が Cancelled / Failed の場合、自動トランザクションモードでは変更がロールバックされる点を覚えておきましょう。
2外部アプリ(IExternalApplication)
IExternalApplication は Revit 起動時にロードされ、セッション中ずっと常駐するアドインです。リボンの構築やイベント購読など「最初に一度だけ行う初期化」を担います。
- 起動時に呼ばれる
- リボンタブ/パネル/ボタンの作成
- ドキュメントイベントの購読
- 終了時に呼ばれる
- イベントの購読解除など後始末
どちらも成功時は Result.Succeeded を返します。.addin マニフェストでは Type="Application" として登録します。
3リボン UI(RibbonPanel と PushButton)
独自のボタンは OnStartup の中で構築します。タブ → パネル → ボタンの順に組み立て、ボタンに外部コマンドのクラスを紐づけます。
using Autodesk.Revit.UI;
public Result OnStartup(UIControlledApplication app)
{
string tab = "MyTools";
app.CreateRibbonTab(tab);
RibbonPanel panel = app.CreateRibbonPanel(tab, "ユーティリティ");
string asm = System.Reflection.Assembly
.GetExecutingAssembly().Location;
PushButtonData data = new PushButtonData(
"btnHello", "Hello",
asm, "MyAddin.HelloWorldCommand");
panel.AddItem(data);
return Result.Succeeded;
}
PushButtonData の第 3 引数にアセンブリのパス、第 4 引数に呼び出すコマンドの完全修飾クラス名を渡します。アイコン画像やツールチップは PushButton のプロパティで設定できます。
4外部イベント(ExternalEvent)とモードレス
Revit API には「API はトランザクション可能なコンテキスト(Revit の操作中)からしか呼べない」という制約があります。モーダルダイアログ(操作をブロックするウィンドウ)なら問題ありませんが、画面を見ながら操作できる「モードレス」ダイアログから直接 API を呼ぶと例外になります。
これを解決するのが ExternalEvent(外部イベント)です。IExternalEventHandler を実装したハンドラを登録し、モードレス UI 側からは ExternalEvent.Raise() を呼ぶだけにします。すると Revit が安全なタイミングでハンドラの Execute を実行し、その中でトランザクションを伴うモデル操作ができます。
| 要素 | 役割 |
|---|---|
| IExternalEventHandler | Execute(UIApplication app) と GetName() を実装する。実際のモデル操作はここに書く |
| ExternalEvent.Create(handler) | ハンドラからイベントを生成(通常 OnStartup 時) |
| Raise() | モードレス UI のボタン等から呼ぶ。実行要求をキューに積む |
常駐パネルやドッキングウィンドウを持つ本格的なツールでは、この外部イベントの仕組みが必須になります。逆に言えば、単純なボタン 1 つで完結する処理ならモーダルダイアログで十分で、外部イベントを持ち出す必要はありません。常駐ウィンドウから選択や入力を受け取りながらモデルを書き換える、といった対話的なツールに進む段階で初めて、ExternalEvent の出番になると考えておくとよいでしょう。
入口を整えて「ツール」にする
処理ロジックができても、それを呼び出す入口がなければツールになりません。1 回実行なら IExternalCommand、常駐&UI 構築なら IExternalApplication。リボンに PushButton を並べれば操作性が一気に上がり、モードレス対応が必要なら ExternalEvent でトランザクション制約を回避します。これらを組み合わせることで、配布できる完成度のアドインに仕上がります。
UI まで作れれば、Revit API の基本サイクルは一通り押さえたことになります。要素の集め方や編集を振り返るなら 要素の取得とフィルタ や トランザクションと要素編集 へ。
→次に読む
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
テンプレート
テンプレートがありません。
子ページはありません
- Revitとは
- ファミリ(システム/ロード/インプレイス)
- カテゴリ・タイプ・インスタンス
- パラメータ(プロジェクト/共有/グローバル/ファミリ)
- レベルと通り芯
- ビューとビューテンプレート
- シートと図面化
- スケジュール表(集計表)
- ワークシェアリングと中心ファイル
- フェーズとデザインオプション
- リンクと座標連携
- Dynamo入門
- 開発環境構築(Visual Studio + .addin マニフェスト)
- Revit API 概要
- Revit API:要素の取得とフィルタ
- Revit API:トランザクションと要素編集
- Revit API:外部コマンド/アプリ
- 共有パラメータの作り方と使い方
- ファミリの作り方(ロード可能ファミリ入門)
- パラメータの種類と分類(総まとめ)
人気ページ
- 1 建築図面の縮尺と寸法表記 — 1/100・1/50 の使い分けと mm 基準・面積をやさしく解説
- 2 Revit ファミリの作り方|テンプレート・参照面・パラメータ化・タイプ作成の手順
- 3 Revit ワークシェアリング徹底解説|ワークセット・セントラルファイル・同期(SWC)・クラウド共同作業
- 4 建築とは — 建築物の定義・建築と土木の違い・ライフサイクルをわかりやすく解説
- 5 Revit パラメータの種類まとめ|共有・プロジェクト・ファミリ・グローバル・組込みの使い分け
- 6 建築・BIM 総合Wiki — 建築の基礎からBIM・Revit・Speckleまで体系的に解説
- 7 通り芯・GL・FL・SL・階高・天井高 — Revit の通り芯/レベルの土台をやさしく理解する
- 8 Revit 共有パラメータとは|作り方・GUID・タグ/スケジュール連携をわかりやすく解説
- 9 Revitのパラメータ — 共有(GUID)/プロジェクト/グローバル/組込み(BuiltInParameter)の違いと連携
- 10 BIM座標系の基礎|内部原点・基準点・測量点・共有座標と真北/プロジェクト北
最近更新/作成されたページ
- Revit 共有パラメータとは|作り方・GUID・タグ/スケジュール連携をわかりやすく解説 2026-07-02 01:01:35
- Revit パラメータの種類まとめ|共有・プロジェクト・ファミリ・グローバル・組込みの使い分け 2026-07-02 00:55:31
- Revit ファミリの作り方|テンプレート・参照面・パラメータ化・タイプ作成の手順 2026-07-02 00:55:30
- Dynamo入門|Revitビジュアルプログラミング・ノードとワイヤ・Pythonノード・Dynamo Player 2026-06-29 15:23:47
- 建築図面の縮尺と寸法表記 — 1/100・1/50 の使い分けと mm 基準・面積をやさしく解説 2026-06-29 15:23:47
- 建築の3分野とは|意匠・構造・設備(MEP)の役割分担とBIMの分野別モデル 2026-06-29 15:23:47
- specklepy入門|Python SDKでSpeckleClient認証・operations.send/receive 2026-06-29 15:23:47
- Speckle .NET SDK入門|NuGet導入・認証・Base作成・send/receiveとRevitアドイン連携 2026-06-29 15:05:23
- Speckle Viewerとは|Web3D表示・プロパティ確認・iframe埋め込みと@speckle/viewer 2026-06-29 15:05:23
- 日本のBIM動向 — 国交省BIM/CIM・建築BIM推進会議・ガイドラインをわかりやすく整理 2026-06-29 15:05:23
- Speckleデータ連携の実務パターン|数量集計・Power BI・QA・他DB連携のパイプライン 2026-06-29 15:03:33
- Speckle Serverセルフホスト|docker-compose構成とデータ主権・運用設計 2026-06-29 15:03:33
- Speckle Automateとは|Version公開トリガーで自動QA・命名規約チェックを走らせる仕組み 2026-06-29 15:03:33
- SpeckleとIFCの違い|標準ファイル交換とライブ連携の比較表と併用の現実解 2026-06-29 15:03:33
- Speckleとは|OSSのAECデータプラットフォームをやさしく解説 2026-06-29 15:03:32
コメントを削除してもよろしいでしょうか?