ActiveX サポート関数とコアの AutoLISP 関数を使用するときは、データ タイプ間で変換を行う必要があります。
AddCircle メソッドを使用して図面に円を追加するには、円の中心点と半径を指定する必要があります。これらの引数は、Center および Radius と呼ばれています。Center は バリアント型(3 要素の倍精度浮動小数点数型配列)として定義され、Radius は倍精度浮動小数点数型として定義されています。
(setq RetVal (vla-AddCircle aMSpace Center Radius))
オブジェクト; 出力のみ。AddCircle メソッドで作成される円オブジェクト。
オブジェクト; 入力のみ。AddCircle メソッドの対象となるオブジェクト。
バリアント型(3 要素の倍精度浮動小数点数型配列)。入力のみ。円の中心を指定する 3D WCS 座標。
バリアント型は基本的に、自己定義構造体で、異なるタイプのデータを含めることができます。たとえば、文字列、整数、配列はすべてバリアント型で表現できます。バリアント型には、データと一緒にデータのタイプを識別する情報が格納されます。この自己定義機能により、バリアント型は ActiveX サーバにパラメータを渡すときに役に立ちます。それは、バリアント型により、任意の言語に基づくサーバがデータの値を解釈できるようになるからです。
倍精度浮動小数点数型。入力のみ。円の半径。正の数値でなければなりません。
ActiveX では AutoLISP でサポートされているデータ タイプと類似する多数のデータ タイプがサポートされていますが、一部の ActiveX 固有のデータ タイプは AutoLISP でサポートされているデータ タイプに直接マッピングできません。次に、データ タイプを変換する方法を説明します。
ActiveX のデータ タイプの代わりに受け入れられる AutoLISP のデータ タイプ |
||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
整数 |
実数 |
文字列 |
図形名 |
VLA オブジェクト |
バリアント |
リスト |
:Safe-array |
ブール型 |
:vlax-true :vlax-false |
nil |
:vlax-null |
|
バイト |
X |
|||||||||||
ブール型 |
X |
X |
||||||||||
整数 |
X |
|||||||||||
長整数 |
X |
|||||||||||
単精度浮動小数点数 |
X |
|||||||||||
倍精度浮動小数点数型 |
X |
X |
||||||||||
オブジェクト |
X |
|||||||||||
文字列 |
X |
|||||||||||
バリアント |
X |
|||||||||||
配列 |
X |
|||||||||||
なし |
X |
|||||||||||
空 |
X |
ActiveX の配列データ タイプは AutoLISP のリストと似ています。これらには、さまざまなデータ構造を表す複数の要素が含まれています。配列は、一般的には座標値を表すために使用します。vlax-safearray->list 関数を使用して、配列をリストに変換することができます。リストを配列に変換するには、vlax-make-safearray 関数で配列に含めるデータのタイプと要素の数を定義し、vlax-safearray-fill 関数を使用してリストの値を配列の要素に割り当てる必要があります。
バリアント型データ タイプは、メソッドが複数のタイプのデータを返すまたはメソッドで複数のタイプのデータが使用される可能性がある場合に使用されます。vlax-make-variant 関数を使用して、バリアント型を作成することができます。バリアント型を作成するときは、格納するデータのタイプと値を指定します。メソッドまたはプロパティによってバリアント型が返される場合は、vlax-variant-type 関数と vlax-variant-value 関数を使用することができます。
AutoLISP で AutoCAD 図面オブジェクトを参照する方法は多数あります。次の方法を使用できます。
ActiveX 関数によって返されます。vlax-vla-object->ename 関数を使用して、データ タイプを VLA オブ ェクトから ename (図形名)に変換します。
(setq MSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))) #<VLA-OBJECT IAcadModelSpace 0000000030434638> (setq circObj (vla-AddCircle MSpace (vlax-3d-point '(5.0 5.0 0.0)) 3)) #<VLA-OBJECT IAcadCircle 00000000303b2698> (vlax-vla-object->ename circObj) <Entity name: 7ffffb05de0>
handent、entget、entsel 関数によって返され、開いた図面内のオブジェクトを識別します。vlax-ename->vla-object 関数を使用して、データ タイプを ename (図形名)から VLA オブジェクトに変換します。
(setq en (handent handle-circle)) <Entity name: 27f0538> (setq en (car (entsel "\nSelect circle: "))) <Entity name: 27f0538> (vlax-ename->vla-object en) #<VLA-OBJECT IAcadCircle 00000000303b3718>
vla-get-handle 関数によってまたは図形名の連想リストから DXF グループコード 5 を取得することにより返されます。図形は AutoCAD セッション全体で保持されます。vla‑handleToObject 関数を使用して、ハンドルに関連付けられている VLA オブジェクトを返します。
(vla-get-handle vla-circle) "4F" (setq handle-circle (cdr (assoc 5 (entget ename-circle)))) "4F" (setq vla-circle (vla-handleToObject acadDocument handle-circle)) #<VLA-OBJECT IAcadCircle 03642c24>
ActiveX、ObjectARX、Manage .NET プログラムによって、オブジェクトを識別するために使用されます。vla-ObjectIDToObject 関数を使用してオブジェクト ID を VLA オブジェクトに変換するか、 vla-get-ObjectID 関数を使用して VLA オブジェクトをオブジェクト ID に変換します。
(setq objid-Circle (vla-get-objectid vla-circle)) 41878840 (vla-ObjectIDtoObject acadDocument objid-circle) #<VLA-OBJECT IAcadCircle 03642c24>