AutoCAD をカスタマイズするために、AutoCAD には、現在 4 つの API が用意されています。それぞれ、AutoLISP、COM(ActiveX オートメーション)、ObjectARX、.NET API がこれにあたります。各 API は、異なる AutoCAD バージョンで採用されたので、使用する AutoCAD によっては、利用できないものがあるかもしれません。年表のようにまとめてみると、次のようになります。
API の主な特徴は次のとおりです。
AutoLISP
AutoCAD のカスタマイズ API として最も 長い歴史を持ち、アプリケーションとしても多くの資産が利用されています。AutoLISP は、もともと人口知能の研究用に作られた CommonLISP 言語の特徴であるリスト操作を、CAD 上の図形データに適用させた AutoCAD 固有のプログラム言語です。AutoCAD 上では 、プログラムを実行時に順次解釈して実行してく インタプリタ言語 として動作します。インタプリタの利点は、ソースファイルを実行ファイルに変換するコンパイル作業が必要がない点です。反面、不具合が潜在しているプログラムがある場合には、実際に実行してみないとエラーが検出されないというマイナス点もあります。
AutoLISP を使用するには、テキストエディタでプログラムを編集して拡張子 .lsp ファイルとして保存し、そのファイルを AutoCAD 上にロードします。AutoLISP では、アプリケーション固有のコマンドを定義したり、再利用可能な AutoLISP 関数を作成することが可能です。過去の AutoCAD バージョンでは、一時期、DOS、Windows、UNIX、Macintosh の複数のプラットフォーム OS をサポートしていましたが、AutoLISP のソースコードはテキスト形式だったため、OS に依存ぜずにソースコードの互換性を維持できました。AutoCAD R12 からは、ダイアログ ボックスを制御するための DCL 言語も扱えるようになりました。
このように、長い歴史を持つ AutoLISP ですが、利用することができるのは AutoCAD 内部に限定されています。Windows 上の他のソフトウェアを AutoLISP でカスタマイズすることはできません。また、AutoCAD が標準で提供する AutoLISP 関数以外の機能を利用することはできません。例えば、オペレーティング システム(OS) の機能にアクセスしたり、Web にアクセスするなど、AutoCAD 外部との連携のために AutoLISP を 使用することはできません。
AutoLISP を拡張した Visual LISP になって、Windows で一般的な COM (Component Object Model) にアクセスできる機能が追加されました。COM は、VBA などが利用する ActiveX オートメーション の基盤技術で、多くのソフトウェアでも採用されています。Visual LISP から COM を使ったプログラムを作成することで、Microsoft Excel、Word といった、COM を使って機能を公開するアプリケーション(COM サーバー) と連携することができます。
Visual LISP は、AutoLISP と互換性を持つ開発環境です。Visual LISP は、VBA と同じように AutoLISP 言語を編集したり評価することができる IDE(統合開発環境) を備えています。この IDE では、従来のテキスト エディタでは不可能だったデバッグ作業や、DCL 言語で定義されたダイアログの評価も可能になりました。また、AutoLISP のソールファイル(.lsp) のコンパイル機能も追加され、単独でロード可能なソースファイル単位のバイナリファイル(.fas) 、DCL リソースファイルを含む複数のソースファイルを1つにまとめたバイナリファイル(.vlx) を作成することもできます。
※AutoLISP の学習リソースは、AutoCAD に同梱されるオンライン ヘルプの こちら から参照することができます。
COM(ActiveX オートメーション)
ActiveX オートメーションは、Mircrosoft の提供するコンポーネント テクノロジ COM (Component Object Model) を利用した開発環境です。COM には、ソフトウェアの持つさまざまな機能を公開する COM サーバー と、公開された機能を参照して再利用する COM クライアント の 2 つの機能があります。AutoCAD の場合、AutoCAD が COM サーバーの役割を持ち、COM クライアント機能を持った VBA や、Visual Studio (別売) などから AutoCAD の機能を利用するプログラムを開発することができます。
COM は、Windows プラットフォーム上では共通の仕様となるため、他のソフトウェアが COM サーバーとして情報を公開していれば、COM クライアントとして AutoCAD VBA から他のアプリケーションを制御することができます。例えば、Microsoft Office 製品は、自身の機能を COM サーバー として公開しているので、内部の VBA を COM クライアントとして簡単にプログラミングを行うことができます。
COM サーバーが持つ情報を公開しているのが、タイプ ライブラリ と呼ばれるファイルです。COM クライアントからタイプ ライブラリを参照することで、COM サーバーを参照する手続きが完了します。AutoCAD VBA 内の VBA プロジェクトは、すぐに AutoCAD のオブジェクトを扱えるように、AutoCAD のタイプ ライブラリが最初から参照された状態で作成されます。同じように、Excel VBA のプロジェクトは、Excel のタイプ ライブラリが自動的に参照設定されています。ただし、上図のように、異なるソフトウェアの COM サーバーを参照する場合は、明示的に相手のタイプ ライブラリを参照設定する必要があります。参照設定は、VBA エディタの [ツール] メニューから [参照設定] メニューを選択しておこないます。
AutoCAD は、簡単に ActiveX オートメーションを使ったプログラグの作成をおこなえるように、Micsoroft から提供を受けた VBA(Visual Basic for Applications) を IDE (統合開発環境) として搭載しています。なお、AutoCAD が VBA を正式に採用したのは、AutoCAD R14 の後期バージョンとなった AutoCAD R14.01 からです。
VBA では、AutoCAD のカスタム コマンドを直接作成するのではなく、いわゆる VBA マクロ を作成することになります。マクロを実行するためには、VBARUN コマンドを使う必要があります。また、マクロ内で AutoCAD のコマンドをそのまま利用するのではなく、”オブジェクト” に対する操作を処理していく “オブジェクト指向” なプログラミングをおこないます。オブジェクト指向プログラミングは、コマンドや DXF データを扱う従来の AutoLISP とは、構造的に まったく異なる考え方といえます。
AutoCAD 2010 から、VBA コンポーネントは http://www.autodesk.com/vba-download で無償でダウンロード提供されています。製品のインストール メディア(DVD-ROM や USB)には、VBA コンポーネントは含まれていないため、AutoCAD のインストールと同時に VBA をインストールすることはできません。なお、ダウンロードした VBA は個別インストーラでインストールすることができますが、インストール先の環境に AutoCAD 2010 以降の AutoCAD 製品があらかじめインストールされている必要があります。
ObjectARX
AutoCAD R13 から登場した C++ 言語によるオブジェクト指向 API です。AutoCAD R13 からは AutoCAD 自身の開発言語も C++ 言語に切り替わっています。当初、単に ARX (AutoCAD Runtime eXtension の略) と呼ばれていましたが、AutoCAD R14 から名称が変更されて ObjectARX になりました。
ObjectARX を利用するには、ObjectARX SDK を http://www.autodesk.com/objectarx からダウンロードして入手する必要があります。入手と利用は無償です。また、C++ 言語で記述したプログラムをコンパイルするために、Microsoft Visual Studio 2010 SP1 を別途購入して、含まれる Visual C++ 2010 を使用する必要があります(AutoCAD 2013 用のアドオン アプリケーション開発環境として)。
ObjectARX が持つ C++ クラスライブラリは、一部を除いて、AutoCAD 自身を構成するクラス ライブラリと同一です。このため、他の AutoCAD API 中でも最も強力に AutoCAD を強化、拡張することが可能です。最終生成ファイルである .arx ファイルは、拡張子を変更したダイナミック リンク ライブラリ(.dll) です。AutoCAD にロードされた ObjectARX アプリケーション(.arx ファイル) は、実行中の AutoCAD とメモリを共有し、同一プロセスで動作するので、実行スピードが高速になる利点がありますが、反面、ObjectARX アプリケーションの不具合によって、実行中の AutoCAD のメモリ空間を破壊してしまうリスクが伴います。この場合、即 AutoCAD のクラッシュを誘発するため、アプリケーションには高い品質が求められます。
ObjectARX クラス ライブラリは、より広範なカスタマイズができるように、図面アクセスから AutoCAD 固有の MFC UI クラス群まで大規模なものになっています。下図はその一部です。
ObjectARX は、アプリケーション固有のカスタム コマンド定義を主体としたカスタマイズも行えます。加えて、ユーザが行った操作をイベントとして取得して、アプリケーション固有の受動処理を実行させるリアクタの実装や、LINE や CIRCLE といった標準オブジェクトと同じように振る舞う カスタム オブジェクト を定義することもできます。また、同じく Visual C++ に添付されているクラス ライブラリである MFC を利用できる点も、ObjectARX の大きな強みとなっています。ObjectARX には、AutoCAD に特化した MFC からの派生クラスが用意されていので、VBA や AutoLISP で実現出来ないパレット形式のダイアログを作成することもできます。
ObjectARX アプリケーションで MFC を利用することができますが、使用できる MFC のバージョンは AutoCAD に依存してしまいます。AutoCAD と同じバージョンの MFC ランタイムを使用しないと、予期せぬ結果を招く危険性があります。例えば、AutoCAD 2013 が使用する MFC と同じバージョンの MFC を使用するためには、Visual Studio 2010 + Service Pack1 に含まれる Visual C++ 2010 SP1 を使用しなければなりません。このため、AutoCAD 2013 用の ObjectARX アプリケーション開発には、この Visual C++ 2010 SP1 のみサポートがされています。旧バージョンとなる Visual Studio .NET 2002、2003、Visual Studio 2005 や 2008、2012 は利用することはできません。
※ObjectARXの開発者用ガイドは、Autodesk Knowledge Network ObjectARX 2013 開発者用ガイド に記載しています。
※ObjectARX の学習リソースは、 Autodesk Knowledge Network ObjectARX 2013 のトレーニングリソース に記載しています。
.NET API
.NET Framework を利用する、AutoCAD 2005 から導入されはじめた新しい API です。Visual Studio を使ってビルドされたアプリケーションは、拡張子 .dll を持つ AutoCAD のロードモジュールとなります.NET API は、ObjectARX の機能を .NET ラッパーとして公開する形をとっているため、ObjectARX とほぼ同等の機能を持っていて、その操作方法も似ています。
開発者の視点から見た .NET API の利点は、ObjectARX と異なり、開発環境となる Visual Studio のバージョンに厳密に依存しなくなる点です。AutoCAD 2013 用の ObjectARX 開発では、Visual Studio 2010 SP1 内の Visual C++ しか使用できませんが、.NET API では AutoCAD 2013 が採用する.NET Framework 4 をサポートする Visual Studio 2012 でも開発を行うことができます(プロジェクトのターゲット フレームワーク設定の変更が必要)。また、利用できる開発言語も C++ だけではなく、C# や Visual Basic(VB.NET)、Managed C++ など、Visual Studio に含まれるすべての言語での開発が可能になります。さらに、アプリケーションは、マネージ コードとして実装される .dll ファイルとして動作します。AutoCAD は、.NET API を用いてビルドされた DLL ファイル(アセンブリ) をロードするために、NETLOAD コマンドを提供しています。
AutoCAD .NET API は、.NET Framework が持つ豊富な機能を利用できるほかに、いままで ObjectARX でしか実現できなかった高度な AutoCAD カスタマイズを、習得が容易な Visual Basic で実装することが可能なことになります。C++ でポインタを扱うような知識はもう必要ありません。
AutoCAD 2013 が提供する .NET API では、メモリ上に展開された図面データベースとオブジェクトへのアクセス、コマンドの登録、 リアクタと同じイベント処理機能など、ObjectARX が持つ機能のほとんどを .NET API でも実現できるようになっています。AutoCAD 2013 の .NET API で操作できないのは、カスタム オブジェクトの定義やデータリスト操作など、ObjectARX でも一部の機能のみです。
AutoCAD .NET API は、.NET Framework クラス ライブラリと同様、機能別に 名前空間 を使ってクラス群を公開しています。このクラス群は、ObjectARX の C++ クラスライブラリに類似した階層構造を持ち、非常に膨大なものです。このため、.NET API に関するドキュメントとサンプル プロジェクトは、現在、ObjectARX SDK に同梱する形で提供されています。ObjectARX SDK は、http://www.autodesk.com/objectarx から無償でダウンロードして利用することができます。
下記は、AutoCAD .NET API が提供する代表的な機能と名前空間です。
公開機能 |
名前空間 |
例外処理など基本機能関連 | Autodesk.AutoCAD.Runtime |
ドキュメント、ユーティリティ機能関連 | Autodesk.AutoCAD.ApplicationServices |
グラフィカル、非グラフィカル オブジェクト等図面データベース関連 |
Autodesk.AutoCAD.DatabaseServices |
幾何演算関連 | Autodesk.AutoCAD.Geometry |
選択、入力等ユーザ対話関連 | Autodesk.AutoCAD.EditorInput |
ユーザ インタフェース関連 |
Autodesk.AutoCAD.Windows |
印刷サービス関連 | Autodesk.AutoCAD.PlottingServices |
ベクトル描画機構関連 | Autodesk.AutoCAD.GraphicsInterface |
ActiveX オートメーションでタイプ ライブラリを使って COM サーバーを参照したように、.NET テクノロジでは、他のアプリケーションやソフトウェアへの機能公開と参照を アセンブリ ファイル を通しておこないます。AutoCAD .NET API を使用するアプリケーションは、使用する開発言語に関係なく、Visual Studio から AutoCAD が提供する 3 つのアセンブリ ファイル、acdbmgd.dll と acmgd.dll、accoremgd.dll を最低でも参照しなければなりません。これらのファイルは、AutoCAD インストール フォルダにインストールされています。AutoCAD 2013 の場合は、既定値で C:\Program Files\AutoCAD 2013 フォルダ直下にインストールされることになります。実際の開発には、32 ビット Windows と 64 ビット Windows のプラットフォーム差に依存しないアセンブリ参照が必要です。プラットフォーム非依存のアセンブリは、ObjectARX SDK に含まれています。
もちろん、これら系統化されたクラスの中に更に細分化されたクラスが含まれています。代表的なクラスには次のようなものがあります。それぞれのクラスには、VBA に代表される COM (Component Object Model) と同じように、メソッド、プロパティ、イベント が含まれているので、開発者はそれら適切に呼び出すことでプログラムを完成させることになります。
※AutoCAD .NET API の開発者用ガイドは、AutoCAD のオンライン ヘルプの こちら から参照することができます。
※AutoCAD .NET API の学習リソースは、Autodesk Knowledge Network AutoCAD 2013 .NET API のトレーニングリソース に記載しています。
By Toshiaki Isezaki
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。