概要 - オブジェクトの図形名にアクセスする(AutoLISP)

AutoLISP ルーチンは、後で図形データや選択セット関数を呼び出すときに使用するオブジェクトの図形名を取得する必要があります。

entsel および nentsel 関数は、ユーザに作図領域で対話的にオブジェクトを選択するようプロンプトを表示し、選択されたオブジェクトの図形名だけでなく、ルーチンが使用する追加情報も返します。entsel 関数は、選択されたオブジェクトの図形名と、入力デバイスのポインタ ボタンがクリックされたときのピック ボックスの中心を返します。

一部の図形操作では、オブジェクトを選択したときに指定した点の座標が必要になります。たとえば AutoCAD の既存のコマンドでは、BREAK[部分削除]、TRIM[トリム]、EXTEND[延長]などがあります。nentsel 関数は、ポリラインやブロックなどの複合図形が選択された場合を除き、entsel 関数と同じ情報を返します。これら両方の関数とも、前に initget を呼び出しておくと、キーワードを受け入れることができます。

entnext 関数は、図形名を順次取得します。引数を指定しないで entnext を呼び出すと、この関数は図面データベース内の最初の図形の名前を返します。引数に現在の図面内の図形の名前を指定すると、entnext はその次の図形の名前を返します。

entlast 関数は、データベース内の最後の図形の名前を取得します。最後の図形は直前に作成された主図形であるため、entlast を呼び出すことにより、command を呼び出して直前に作成した図形の名前を取得できます。

entnext から返される図形名を、この関数に渡されたのと同じ変数に代入できます。次のサンプル コードに示すとおり、これはデータベース全体にわたって 1 つの図形名変数を「歩かせ」ます。

(setq one_ent (entnext))         ; Gets name of first entity.
(while one_ent
..
                                 ; Processes new entity.
.
(setq one_ent (entnext one_ent))
)                                ; Value of one_ent is now nil.

次のサンプル コードは、ssaddentnext を使用して選択セットを作成し、既存のセットにメンバーを追加する方法を示しています。

(setq e1 (entnext))
(if (not e1)                           ; Sets e1 to name of first entity.
  (princ "\nNo entities in drawing. ")
  (progn
    (setq ss (ssadd))                  ; Sets ss to a null selection set.
    (ssadd e1 ss)                      ; Returns selection set ss with e1 added.
    (setq e2 (entnext e1))             ; Gets entity following e1.
    (ssadd e2 ss)                      ; Adds e2 to selection set ss.
  )
)