AutoLISP で AutoCAD 図面オブジェクトを参照する方法は多数あります。
注: AutoLISP での ActiveX のサポートは Windows のみに制限されています。
次のような脅威があります。
- ActiveX 関数によって返される VLA オブジェクト。
- entget および entsel 関数によって返され、開いている図面内のオブジェクトを識別する図形名(enames)。
- handent 関数によって返され、AutoCAD セッション間で図形を保持するハンドル。
- ActiveX、ObjectARX、Manage .NET プログラムによって、オブジェクトを識別するために使用される Object ID。
注: ObjectARX および Managed .NET プログラムは、AutoCAD LT ではサポートされていません
AutoLISP は、あるタイプのオブジェクト識別子から別のタイプのオブジェクト識別子に変換する関数を提供しています。
ハンドル文字列、図形名、VLA オブジェクト、またはオブジェクト ID の整数のような異なる識別子やデータ タイプで表される同じ図面オブジェクトを見つけ出すことができます。プログラムで必要とするデータ タイプを持つ識別子を取得するには、次の方法を使用します。
- 図形名に関連付けられているハンドルを取得するには、図形名の連想リストの DXF グループ コード 5 を使用します。
(setq handle-circle (cdr (assoc 5 (entget ename-circle))))
"4F"
- ハンドルに関連付けられている図形名を取得するには、handent 関数を使用します。
(handent handle-circle)
<Entity name: 27f0538>
- ハンドルに関連付けられている VLA オブジェクトを取得するには、vla‑handleToObject 関数を使用します。
(setq vla-circle (vla-handleToObject acadDocument handle-circle))
#<VLA-OBJECT IAcadCircle 03642c24>
- VLA オブジェクトに関連付けられているハンドルを取得するには、vla-get-handle 関数を使用して Handle プロパティを取得します。
(vla-get-handle vla-circle)
"4F"
- VLA オブジェクトのオブジェクト ID を取得するには、vla-get-objectid 関数を使用して objectID プロパティを取得します。
(setq objid-Circle (vla-get-objectid vla-circle))
41878840
- オブジェクト ID によって識別される VLA オブジェクトを取得するには、AutoCAD の Document オブジェクトに対して ObjectIDtoObject メソッドを使用します。
(vla-ObjectIDtoObject acadDocument objid-circle)
#<VLA-OBJECT IAcadCircle 03642c24>