AutoCAD API でアドオン アプリケーションを開発している段階では、主に APPLOAD[アプリケーション ロード] コマンド や NETLOAD[.NET アプリケーション ロード] コマンド、VBALOAD コマンド、あるいは、Visual Studio や Visual LISP などの開発環境からデバッグ機能を利用して、アドオン アプリケーションが正しく動作するか確認するのが一般的かと思います。
ただ、開発済のアドオン アプリケーションを設計者のコンピュータ上で設計者自身が利用する場合には、APPLOAD コマンドなどをいちいち実行してアプリケーションをロードさせるのは非現実的です。設計環境の生産性や効率を高めるために使用する AutoCAD API の効果が薄れてしまい、本末転倒です。
そこで、AutoCAD には、開発したアドオン アプリケーションを自動的にロードさせるいくつかの方法が用意されています。
スタートアップ 登録の利用
APPLOAD コマンドにボタンのある [スタートアップ登録] 機能を使って、AutoCAD の起動時に自動ロードするアドオン アプリケーションを登録する方法です。AutoLISP/Visual LISP、VBA、ObjectARX アプリケーションを指定することが出来ます。詳細は、こちら に記載されています。
acad.lsp、acaddoc.lsp の利用
AutoLISP には、AutoCAD の起動時に1回自動的にロードされる acad.lsp と、図面を開くたびに自動的にロードされる acaddoc.lsp が用意されています。特に、acad.lsp は AutoLISP の登場当初から利用されている最も古いアプリケーションのロード方法です。ロードされた acad.lsp や acaddoc.lsp では、(S::STARTUP) 関数を使って処理を自動的に実行させるのが一般的です。このときに、AutoLISP の (load) 関数で AutLISP アプリケーションを、(arxload) 関数で ObjectARX アプリケーションをロードさせることができます。また、(command) 関数で NETLOAD コマンドや VBALOAD コマンドを実行させることで、アプリケーションをロードすることもできます。ただし、この場合は、システム変数 FILEDIA を 0 にして、ファイル選択ダイアログ ボックスの表示を抑止する必要があります。最近では、コマンド実行時にロードをさせるための (autoload) 関数や (autoarxload) 関数も用意されています。acad.lsp や acaddoc.lsp を利用した自動ロードの方法は、こちら に記載されています。コンパイル済の acad.fas、acaddoc.fas、acad.vlx、acaddoc.vlx でも同様の処理が可能です。
なお、絶対パスを指定してアプリケーションの位置を指定しない場合も含め、acad.lsp や acaddoc.lsp と、それら内部でロード指定するアドオン アプリケーション ファイルは、AutoCAD のサポート検索パスのいずれかのフォルダに配置されている必要があります。
最近では、ウィルスの温床になる懸念から、あまり利用されていません。
acad.dvb を利用
AutoCAD が起動するたびに同動的にロードされる VBA プロジェクトです。acad.dvb 内に を AutoCAD のサポート検索パスのいずれかに配置して、AcadStartup マクロを登録しておけば、AutoCAD の起動時に記述した処理を自動的に実行させることができます。ただし、acad.lsp などを利用して VBA を制御している acadvba.arx ファイルをロードしなければなりません。詳細は、こちら に記述されています。
最近では、ウィルスの温床になる懸念から、あまり利用されていません。
acad.rx を利用
acad.rx ファイル内に自動ロードしたい ObjectARX プリケーション名記述してサポート検索パスに配置しておけば、AutoCAD の起動時に列挙された ObjectARX アプリケーションを自動ロードしてくれます。acad.rx については、こちら で紹介されています。
システム レジストリを使ったディマンド ロードを利用
ディマンド ロードは、システム レジストリを利用して AutoCAD にロードされていない ObjectARX アプリケーションや .NET API アプリケーションを自動的にロードする AutoCAD の機能です。システム レジストリを利用するため、通常はインストーラを作成して、インストーラによってレジストリ書き込みなどさせる必要があるため、比較的高度な知識を必要とします。ただし、ここまで紹介したロード機能よりも、多様なロード タイミングを選択することができます。
- ロードされていないアプリケーションによって作成されたカスタム オブジェクトを含む図面ファイルが読み込まれたとき
- ユーザまたは他のアプリケーションが、非常駐アプリケーションのコマンドを呼び出したとき
- AutoCAD を起動したとき
Autodesk では、AutoCAD のディマンド ロード機能を利用する ObjectARX アプリケーションの開発を推奨しています。ディマンド ロードには、次のような利点があります。
- プロキシ オブジェクト(プロキシ オブジェクトを参照)の作成を制限します。
- ObjectARX アプリケーションのロードに、より一層の柔軟性を提供します。
- 機能が必要になった場合にのみアプリケーションがロードされ、メモリが節約されます。
ディマンド ロード可能なアプリケーションにするには、アプリケーションの情報が正しくシステム レジストリ上に記入されていて、かつ、DEMANDLOAD システム変数が、ディマンド ロードに適した値に設定する必要があります。
ディマンド ロードの詳細は、こちら からダウンロード可能な ObjectARX Developers Guide(日本語) の ディマンド ロード セクションを参照してください。
バンドル パッケージを使った自動ロードを利用
バンドルと呼ばれる XML パッケージ(PackageContents.xml)を利用した自動ロードメカニズムで AutoCAD 2012 で導入された比較的新しいロード方法です。AutoCAD 2014以降では、セキュア ロード メカニズム による警告ダイアログを唯一、既定で防止することが可能です。
これからアドオン アプリケーションを開発してロード方法を模索されている方には、ウィルス対策を考慮したこちらの方法をお勧めします。ただし、AutoCAD 2014 では VBA プロジェクトや JavaScript API モジュールを XML パッケージで利用することは出来ません。
バンドル パッケージを用いたロード方法は、Autodesk Exchange Apps ストアに記載するアドオン アプリケーション用にも推奨されています。
バンドル パッケージの詳細は、こちら に記載されています。
アドオン アプリケーションのロード方法が多過ぎるように感じるかも知れませんが、AutoCAD の歴史を考えれば極めて妥当です。つまり、API の登場時期や当時のテクノロジにあわせて拡張されてきたことがわかります。
可能であれば、最後に紹介した バンドル パッケージによる自動ロード を採用していただくことをお勧めします。
By Toshiaki Isezaki
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。