図形名、ハンドル、オブジェクト ID を VLA オブジェクトに変換するには(AutoLISP/ActiveX)

AutoLISP で ActiveX 関数を使用する場合、図形名、ハンドル、オブジェクト ID を VLA オブジェクトに変換する必要があることがあります。

注: AutoLISP での ActiveX のサポートは Windows のみに制限されています。

図形名を VLA オブジェクトに変換する

vlax-ename->vla-object 関数を使用すると、entgetssname などの関数を使用して取得した図形名(ename)を、ActiveX サポート関数で使用できる VLA オブジェクトに変換することができます。

  1. AutoCAD の作図領域で、円を描きます。
  2. コマンド プロンプトに対して (vl-load-com) と入力し、[Enter]を押します。
  3. (setq ename-circle (car (entsel "¥n円をクリック:"))) と入力し、[Enter]を押します。
    <Entity name: 27f0538>
  4. (setq vlaobject-circle (vlax-ename->vla-object ename-circle)) と入力し、[Enter]を押します。
    #<VLA-OBJECT IAcadCircle 03642c24>
  5. (setq new-ename-circle (vlax-vla-object->ename vlaobject-circle)) と入力し、[Enter]を押します。
    <Entity name: 27f0538>

ハンドルを VLA オブジェクトに変換する

handent 関数は、指定されたハンドルに基づいて図形名(ename)を返します。その後、図形名を ActiveX サポート関数で使用できる VLA オブジェクトに変換することができます。

  1. AutoCAD の作図領域で、円を描きます。
  2. コマンド プロンプトに対して (vl-load-com) と入力し、[Enter]を押します。
  3. (setq ename-circle (handent (cdr (assoc 5 (entget (car (entsel "¥n円をクリック:"))))))) と入力し、[Enter]を押します。
    <Entity name: 27f0538>
  4. (setq vlaobject-circle (vlax-ename->vla-object ename-circle)) と入力し、[Enter]を押します。
    #<VLA-OBJECT IAcadCircle 03642c24>
  5. (setq new-ename-circle (vlax-vla-object->ename vlaobject-circle)) と入力し、[Enter]を押します。
    <Entity name: 27f0538>

オブジェクト ID を VLA オブジェクトに変換する

vla-get-ObjectID 関数は、関数に渡されたオブジェクト ID に対応する VLA オブジェクトを返します。指定した VLA オブジェクトのオブジェクト ID を取得するには、vla-ObjectIDtoObject を使用します。

  1. AutoCAD の作図領域で、円を描きます。
  2. コマンド プロンプトに対して (vl-load-com) と入力し、[Enter]を押します。
  3. (setq aDoc (vlax-get-property (vlax-get-acad-object) 'ActiveDocument)) と入力し、[Enter]を押します。
    #<VLA-OBJECT IAcadDocument 0000000029430508>
  4. (setq aMSpace (vlax-get-property aDoc 'ModelSpace)) と入力し、[Enter]を押します。
    #<VLA-OBJECT IAcadModelSpace 00000000304d7308>
  5. (setq aObjId (vla-get-ObjectID aMSpace)) と入力し、[Enter]を押します。
    48
  6. (setq aObj (vla-ObjectIDToObject aDoc aObjId)) と入力し、[Enter]を押します。
    #<VLA-OBJECT IAcadModelSpace 00000000304d7308>