概要
Revitのアドイン開発に役に立つサイトやページをまとめました。
私はRevitアドイン開発の初心者で、プログラムを通じて図面に直接触れた経験はほとんどありません。また、アドイン開発を通じてでも直接Revitの図面の仕様に関わるようなコアな部分に触れることはあまりありません。それでも時々Revit APIの仕様の把握が必要な場面があり、その際にRevit関連の情報収集に少し苦労しています。
そこで、自分を含めこれからRevitアドイン開発を始める人や少し関わる可能性のある人にとって、抑えていて損はなさそうな有用な情報が記載されているサイトをまとめてみました。
※掲載しているURLのページには少し古い情報もありますが、初学者にとってはとても役に立つと思うので掲載しています。
目次
Revit APIに関して解説しているページ
- Revitアドイン基礎
- Revitアドイン応用~具体例
- AutoCAD アドオン開発者のためのRevit API入門~概説
- AutoCAD アドオン開発者のためのRevit API入門~アドイン
- AutoCAD アドオン開発者のためのRevit API入門~アクセス
- Revitアドイン入門① – 環境構築+Revit起動時にメッセージ
Revit APIの仕様に関するドキュメント関連
アドイン開発に役立ちそうなツール
押さえておいたほうが良さそうな知識
- .addinファイルの配置場所
- .addinファイルの読み込み順
- Revit APIの呼出し方法
- ジャーナルファイル
- 拡張ストレージ
- Revit起動時、終了時の処理の実装
- ユーザーの操作に合わせて特定の処理を実行
- ポストコマンド
- 外部コマンド、外部アプリケーション
- 外部アプリケーションを実行するためのボタンの種類
- 外部イベント
その他
別記事にまとめたもの
役に立つサイト
Revit APIに関して解説しているページ
Revitアドイン基礎
Revitの歴史や開発環境がまとめられています。
また、開発を進めるにあたって必要な「外部コマンド」「外部アプリケーション」「アドインファイル」についてもまとめられています。
Revitアドイン応用~具体例
一つ前のURLの応用編です。
「スレッド」や「トランザクション」等、こちらも開発を進めるにあたって必要となる情報がまとめられています。
AutoCAD アドオン開発者のためのRevit API入門~概説
「AutoCAD アドオン開発者のための」とありますが、AutoCAD アドオンの開発経験がなくても役に立つ情報が沢山記載されているので、こちらも目を通しておくことをオススメします。
AutoCAD アドオン開発者のためのRevit API入門~アドイン
一つ上のページの続きです。
「外部コマンド」や「外部アプリケーション」等、アドインに関する情報が記載されています。
AutoCAD アドオン開発者のためのRevit API入門~アクセス
Revit APIを使用して、Revitのデータにアクセスする方法が記載されています。
Revitアドイン入門① – 環境構築+Revit起動時にメッセージ
RevitAPIを利用したアドインプログラムの作成方法を公開しています。
Revit APIの仕様に関するドキュメント関連
Revit API 開発者用ガイド
Revit APIの概要や、使用方法について説明しているページです。
Revit API Docs
RevitAPIのオンラインドキュメントです。
RevitAPI内のクラス名やメソッド名で検索すると、それに関する仕様が表示されます。
RevitAPIで気になるクラス名やメソッド名があった場合、このドキュメントを使用して仕様を確認することができます。
アドイン開発に役立ちそうなツール
Revit Lookup
このツールを使用すると、Revitのプロジェクトファイルやファミリ ファイルにある色々な要素の情報を確認できます。
後述する「拡張ストレージ」の構成や保存内容も、このツールを使用して確認できます。
こちらからダウンロードできます。
押さえておいたほうが良さそうな知識
基本的に Revit APIに関して解説しているページに記載されている知識が多いです。
.addinファイルの配置場所
.addinファイルは、次のいずれかに配置するのが一般的です。
-
全てのユーザー向けのアドイン
C:\ProgramData\Autodesk\Revit\Addins<Revitのバージョン>\ -
現在のユーザー向けのアドイン
-
C:\Users<ユーザー名>\AppData\Roaming\Autodesk\Revit\Addins<Revitのバージョン>\
※Revitのバージョンは「2019」「2021」等が入ります
参考URL
- Revit Addin file locations for production Release and Test/Debug
- Revit Add-In Locations and BIM360 EU
.addinファイルの読み込み順
Revitの起動時に.addinファイルの配置場所で記載したパスの.addinファイルが読み込まれれますが、その読み込み順はアルファベット順になります。
参考URL
Revit APIの呼出し方法
Revit API は、単一スレッドのアクセスのみサポートしています。
なので、Revit APIの処理を呼び出す際は、メイン スレッドで実行する必要があります。
参考URL
ジャーナルファイル
Revitの起動から終了したタイミングまでのRevit上の操作を記録したファイルです。Revit自体のログファイルみたいな認識で大丈夫だと思います。
Delta VM (恐らく仮想メモリ) や、RAM (物理メモリ) やGDI (Graphic Device Interface) のことなど、PC自体の情報の推移も記載されています。
例えばDelta VM: Avail +10 -> 123456789 MB
で、使用可能な仮想メモリが123,456,789 MBで+10MB増加した、という感じに読み取れると思います。
以下がよく記載されています。
- Avail:使用可能な容量
- Used:現在使用中の容量
- Peak:最大使用量
参考URL
- Revit 開発者用ガイド ジャーナルファイルについて
- Autodesk Support Revit ジャーナル ファイルの場所
- Revitのジャーナルファイルを利用する_説明編
- ジャーナルファイル?
- ジャーナルファイルを説明しました!!
拡張ストレージ
Revitのファイルにアドイン関連のデータなどを保存したい場合に使用します。
参考URL
Revit起動時、終了時の処理の実装
インターフェース「IExternalApplication」を実装して使用します。
「IExternalApplication」には2つの抽象メソッド「OnStartup」「OnShutdown」があります。
Revit起動時にはOnStartup()が、終了時にはOnShutdown()が呼び出されます。
OnStartup()では設定ファイルの読み込みのような、最初に最初に行っておきたい初期処理を書くと便利です。
また私の所属していたプロジェクトでは、アドインを起動するためのボタンの作成処理も、このOnstartup()の中で行っていました。
参考URL
ユーザーの操作に合わせて特定の処理を実行
ユーザーが特定の操作を実行しようとするときや、実行された直後に特定の処理を行いたい場合のため、Revit APIには様々なイベントが定義されています。
どのようなイベントがあるか、イベントの登録、キャンセル方法は下記の参考URLから確認できます。
リボンのタブアクティブ化イベントの検出
Revit上部のタブが選択状態になった際や、未選択状態になったタイミングのイベントも接続できます。
参考URL
ポストコマンド
PostCommand()を使用することで、ユーザーがアドインのボタンを押したのと同じように、
外部アドインをコードからも実行できます。
また、Revitのネイティブなコマンドも実行できます。
CommandIDを引数に指定してポストします。
ポストした後に実際に実行されるタイミングは、Revitの制御がAPIから戻ったときです。
参考URL
-
AutoCAD DevBlog Revit 2014 API の新機能 ※ページ真ん中あたりのPostCommand記載部分
補足
ポストコマンドの終了を検出して、ポストコマンド後に後続処理を実行したい場合は、下記のURLを参考にしてください。
外部コマンド、外部アプリケーション
アドインを用いて作成できるコマンドのことです。
このコマンドをユーザーが実行することにより、アドインの処理を走らせることができます。
参考URL
外部アプリケーションを実行するためのボタンの種類
外部アプリケーションを実行するためのボタンには種類が色々とあります。
「Button」「PulldownButton」「SplitButton」等…
色々な種類のボタンを知っておくと、UIの幅も広がります。
参考URL
外部イベント
外部のスレッドとRevit APIの間の通信はすべて、アイドリングイベントもしくは外部イベントのハンドラ内で行われる必要があります。
外部イベントを使用すると、Revitが入力を受け入れる準備ができたときにRevit APIに関する処理の実行できます。
インターフェース「IExternalEventHandler」を実装したクラスを用意し、
Execute()にコールバックメソッド (Revit APIに関する処理) を渡す形になります。
ExternalEvent.Raise()を呼び出すと、その後Revitが入力を受け入れる準備ができたときに、 IExternalEventHandler.Execute()メソッドが呼び出されます。
参考URL
その他
異なるアドインのモジュールが共通のdllを使用している際に気を付けること
異なるアドインが共通のdllを使用している際に、読み込むdllのバージョンが異なる場合にRevitが例外をスローする場合があります。
この件については以下にまとめられています。
プログラム自体に悪い箇所は見当たらない状態で、ジャーナルファイルなどに「メソッドが見つかりません」とえ出力される場合は、もしかしたら2つ以上のアドインでバージョン違いの同じdllを使っている可能性があるかもしれません。
C#の場合ですが、以下のようにして起動中のアプリが読み込んでいるアセンブリを取得できますので、アセンブリ名等で特定して、そのアセンブリバージョンを確認できます。
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
想定しているバージョンと異なれば、読み込んでほしいアセンブリと、実際にRevitが読み込んでいるアセンブリのバージョンが異なるかもしれません。
dll地獄は参照されている一つのdllのバージョンが上がった際に旧バージョンとの互換性がなく不具合を起こしてしまうことですが、これと少し似ているかと思います。
詳しいことは分かりませんが、バージョン違いのdllが複数あっても、Revitが読み込むdllは一つだけのyなので、バージョンごとに互換性がないと恐らくこういったエラーが発生してしまうのではないかと予想しています。
別記事にまとめたもの
- アドインから外部アプリを10分ほど実行させ終了すると、Revitが強制終了してしまう件の解消
- AdWindows.dllとは何か
- アドイン開発時にRevitのバージョンをアップする際の作業について
- Revitのメインウィンドウハンドルの取得方法
- DockablePaneとは
- Revit起動時、addinファイルで指定したアドインのロードが失敗してしまう際の解消方法
- Revitの「リボンタブ」「リボンパネル」「ボタン」の作成方法
- Revit2019、2021、2024でRevitLookupを使用して拡張ストレージの中身を確認する方法
- 拡張ストレージ周辺の基本的な操作 (値の保存、復元など)
- 「License Managerが機能してないか、正しくインストールされていません。」というエラーが出て、Revitが起動しないときの対処法
- Revitのダウンロード方法
役に立つサイト
The Building Coder
Autodeskのエンジニアのブログです。
RevitAPIに関する情報の記事が多く載せられています。
RevitAPI屋さん コピペで使えるコード集
Revitアドイン開発者がRevit APIのコード集を掲載しているサイトです。
Technology Perspective from Japan
オートデスク株式会社のブログです。
Revitに関する情報も掲載されています。
Revit Lab
Revitに関するいろいろな知識を記載されています。
以下によく読んでいたページをピックアップしてみました。
AUGI:Revit
オートデスク製品ユーザのためのコミュニティであるAUGI (Autodesk User Group International) のRevitのページです。