ObjectARX
ObjectARX (AutoCAD Runtime Extension) は、ADS 開発環境の後継となる形で登場した C++による AutoCAD アプリケーション開発用のプログラム環境。
ObjectARX は、AutoCAD R14 から利用可能になり、多数のダイナミック リンク ライブラリ(DLL)を含むプログラミング環境で、DLL は AutoCAD と同じアドレス空間で実行され、コアとなる AutoCAD データ構造とコードを直接操作するようになっている。
これらのライブラリは、AutoCAD のオープン アーキテクチャを利用した形になっており、AutoCAD のデータベース構造や、グラフィックス システム、ジオメトリ エンジンに直接アクセスして、AutoCAD クラスと機能を実行時に拡張できる。
ObjectARX ライブラリを、AutoLISP や VBA のような他の AutoCAD プログラミング インタフェースと一緒に使用することができ、複数の API 間の統合も可能。
AutoCAD R13 以降にAutoCAD 自身の開発言語がC++ 言語に替わり、それ以降 C++ 言語によるオブジェクト指向 API を提供を開始していった経緯があり、ObjectARX が持つ C++ クラスライブラリは、AutoCAD 自身のクラスライブラリと一部を除いて同一であるため、API 中では最も強力なカスタマイズが可能になっている。
最終生成ファイルである .arx ファイルは、拡張子を変更したダイナミックリンクライブラリ(.dll )で、AutoCAD 上にロードすることで利用可能となり、AutoCAD とメモリを共有して同一プロセスで動作する。 従って、アプリケーションがクラッシュすると必然的に AutoCAD もクラッシュするので、高品質の開発技術が望まれる。
DLL を使用する事で、AutoCAD の組み込みコマンドとまったく同じように操作できる新しいコマンドを作成できる他、AutoCAD 上の操作をイベントとして取得して、イベントドリブンな処理を行うリアクタの実装や、LINE 、CIRCLE など、AutoCAD が持つオブジェクトと同じよう振舞う"カスタムオブジェクト"を定義することができる。(* 定義した"カスタムオブジェクト"の扱いには注意が必要。)
また、Visual C++ に添付されているクラスライブラリの MFC を利用して、ユーザインタフェーイス を実装したり、COM 拡張によってVBA のオブジェクトモデルを拡張できることも大きな強みとなっている。
ObjectARX の SDK は、Autodesk の Web サイト http://www.autodesk.com/objectarx から無償でダウンロード可能。
ObjectARX SDK の中身は、膨大でとても個人の片手間プロジェクトで書ききれる内容ではないので当サイトではつまみ食いレベルに留めます。
ObjectARX の構成
ObjectARX 環境の基本的なクラスと関数のグループ。
- AcRx ・・・ アプリケーションのバインドと、ラインタイム クラス登録およびランタイム クラス識別に使うクラス
- AcEd ・・・ ネイティブ AutoCAD コマンドの登録と AutoCAD イベント通知のためのクラス
- AcDb ・・・ AutoCAD データベース クラス
- AcGi ・・・ AutoCAD エンティティをレンダリングするためのグラフィックス クラス
- AcGe ・・・ 一般的な線形代数オブジェクトやジオメトリ オブジェクト用のユーティリティ クラス
ObjectARXの開発環境
AutoCAD IJCAD IDE コンパイラ 2000/2000i/2002 - Visual Studio 6 VC 6 2004/2005/2006 - Visual Studio 2003(.NET) VC7 2007/2008/2009 - Visual Studio 2005 VC8 2010/2011 8/2013 Visual Studio 2008 VC9 2012/2013/2014 2014/2015/2016 Visual Studio 2010 VC10 2015/2016/2017(?) - Visual Studio 2012 / 2013 VC11
AutoLISP からの ObjectARX アプリケーションの実行
ObjectARX アプリケーションは、AutoLISP が外部関数として認識している関数セットを、acedDefun() を使用して定義することができる。アプリケーションがロードされると、組み込みまたはユーザ定義の AutoLISP 関数の呼び出しとまったく同じように、外部関数を呼び出すことができる。
AutoLISP 変数は引数として外部関数に渡され、外部関数が結果を返す。外部関数は、キーボードから、またはポイント デバイスを使用してポイントやオブジェクトを指定して、データを入力するようにユーザに指示することもでき、さらに外部関数は、Windows ヘルプを設定することもできる。
外部関数は、対話形式に加えて、AutoLISP 関数を使用して呼び出すことができる。ObjectARX アプリケーションは、AutoLISP 関数を呼び出すことができない。ObjectARX アプリケーションは、AutoLISP シンボルの値を検索して設定できる (シンボルのデータ タイプは、C++ プログラムが認識できるものでなければならない)。
ObjectARX アプリケーションは、AutoLISP と同じ C:XXX 規則を使用して、新しい AutoCAD コマンドを定義できる。外部関数を呼び出すには、コマンド プロンプトで括弧を使わずに名前を入力する。
外部関数を定義すると、同じ名前の古い定義は新しい定義に置き換えられる。2 つの ObjectARX アプリケーションが同じ名前で関数を定義すると、最初にロードされるアプリケーションの関数は失われ、2 番目のアプリケーションをロード解除すると重複した関数は無くなるため呼び出せない。
互換CAD における ObjectARX互換
- 互換CAD において、AutoCAD用に開発された ObjectARX のプログラムを軽微な修正+コンパイルのしなおしだけで移植して利用できるというレベルのものはないが、ObjectARX ライクに開発できる API は整備されつつあり、移植の敷居は徐々に下がってきている。
- DRX … ODA の API(Teigha_Extension の前身)
- Teigha_Extension … TX。ODA の API