ObjectARX

提供:GizmoLabs - だいたい CAD LISP なサイト

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 ・・・ 一般的な線形代数オブジェクトやジオメトリ オブジェクト用のユーティリティ クラス
  • ADS ・・・ AutoCAD アプリケーションを作成するための C ライブラリ。ARX アプリケーションは通常エンティティの選択などの操作にこのライブラリを使用して、選択セット操作やデータを取得する。

ObjectARXの開発環境

AutoCAD BricsCAD 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/2017/2018/2019 Visual Studio 2010 VC10
2015/2016 V16/V17/V18 - Visual Studio 2012 / 2013 VC11
2017/2018 - - Visual Studio 2015 VC14
2019/2020 V19/V20/V21 2020/2021/2022/2023 Visual Studio 2017 Update 2 VC14.1
2021/2022/2023 V22/V23 - Visual Studio 2019 VC16

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 のプログラムの移植は、軽微な修正+コンパイルのしなおしだけで移植して利用できるというレベルの幅も広がってきており、移植の敷居は年々下がってきている。移植可能な範囲もよく使われる範囲は問題なくなっている状態。(2023 年現在)
  • Bricsys Teigha eXtension (TX) SDK … BricsCAD用に調整された Teigha_Extension。 基本 Teigha Extension と同じだけど局所的にちょっと違う。
  • BRX … BricsCAD の API
  • DRX … ODA の API(Teigha Extension の前身)
  • GRX … IJCAD の API
  • IRX … IntelliCAD の API
  • NRX … NanoCAD の API
  • Teigha_Extension … TX。ODA の API
    • TX はグラフィカルな部分はサポートされていないので、ARX 相当の APIとするにはその辺りを補う必要がある。互換CADでは、大概 TX + CAD独自の Runtime Extension で ARX 相当の機能提供をしている。
  • ZRX … ZWCAD の API