ActiveXをCADのLISPで使用する

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

ActiveX を CADのLISP で使用する

ActiveX オートメーションは、図面や ActiveX 法をサポートしている他の Windows アプリケーションの内容をプログラムで処理する手段。

メモ

  • AutoCAD の AutoLISP での ActiveX のサポートは Windows のみに制限されている。
  • BricsCADでは、Fast-COM によって Mac/Linux でも一部 Windowsと同様に使える関数がある。


AutoCADの場合、CAD 図面のオブジェクトを操作するときに ActiveX は従来の AutoLISP 関数よりも高速に動作する。

ActiveX プログラミング インタフェースは、多くの言語や環境から使用できる。

AutoLISP で ActiveX オブジェクトを扱うときは、同じオブジェクト モデル、プロパティ、および他のプログラミング環境から操作できるメソッドを使用する。

オブジェクトは、ActiveX アプリケーションの主要な構成要素である。たとえば、線分、円弧、ポリライン、円のような CAD 図面の要素は、長い間オブジェクトと呼ばれいるが、ActiveX の手法では、次の AutoCAD 構成要素もオブジェクトと呼ばれる。

  • 線種や寸法スタイルなどのスタイル設定。
  • 画層、グループ、ブロックなどの組織構造。
  • ビューやビューポートなどの図面表示。
  • 図面のモデル空間とペーパー空間。
  • 図面や AutoCAD アプリケーション自体も、オブジェクトとみなされる。


ActiveX には、entget、entmod、setvar のような標準の AutoLISP 関数によって提供されている多くの機能がある。 これらの関数に比べて、ActiveX はより高速に実行し、オブジェクトのプロパティにより簡単にアクセスできる。 たとえば、標準の AutoLISP 関数を使用して円の半径を取得するには、entget 関数を使用して図形のリストを取得してから、assoc 関数を使用して希望のプロパティを検索する必要があり、次の例に示すように、assoc 関数を使用してプロパティを取得するには、そのプロパティに関連付けられているコード番号(DXF グループ値)も分かっている必要がある。(まぁ大概シンプルに処理できるように関数化したりしてるけど。)

(setq radius (cdr (assoc 40 (entget circle-entity))))

ActiveX 関数を使用すると、次のように簡単に円の半径を取得できる。

(setq radius (vla-get-radius circle-object))



関連記事