AutoLISP関数 関数解説

図形編集を自動化しよう!AutoLISPの図形名関数8選

fignamefunc_eyecatch
  • 手動で図形を編集するのはめんどくさい
  • 図形編集のコマンドが多すぎて覚えられない
  • 図形名ってなに?

手動で図形の修正を繰り返すことにストレスを感じていないでしょうか。AutoCADのコマンドを上手に活用すれば作業が楽になりそうだけど、コマンドの数が多すぎて使いこなせずにお困りの方も多いはず。

私はAutoLISPを独学し、業務の自動化・効率化に役立つプログラムを5年以上作成しています。数行で書けるような簡単なプログラムから、1000行以上の少し複雑なプログラムまで様々なツールを作成してきました。

そもそもAutoLISPってなに?という方はこちらの記事をご覧ください。
>>AutoCADユーザー必見!【AutoLISPを覚えるべきメリット5選】デメリットも解説

当記事ではAutoLISPの図形名関数について解説します。図形のさまざまな項目を一度に変更できたり、新規作成や削除もできたり、幅広い場面で役立ちます。コマンドを使わずに図形の編集ができるので、覚えるコマンドが最小限で済みます。

図形の編集を今よりも効率化して、作業を楽にしたい方はぜひ最後までお読みください。

図形名とは図形ごとに割り当てられた個別の名前

fignamefunc_caption1

図面内の各図形には図形名と呼ばれる個別の名前が割り当てられています。図形名はAutoLISPで図形を操作するときに欠かせない情報の1つです。

図形名が重要である主な理由は以下のとおり。

  • 多数ある図形の中から目的の図形を特定できる
  • 作図の効率化につながる

図形を操作するためには目的の図形を特定する必要があります。しかし、図面内にはさまざまな図形が多数存在するため、手作業で図形を特定するのは非常に困難。図形名がわかると目的の図形をすぐに特定できるため、図形を探す手間が省けます。

さらに専用のAutoLISP関数に図形名を与えると、図形の定義データを取得できます。図形の定義データとは配置されている画層や頂点の座標など、図形を構成するために必要な情報がまとめられたデータのこと。

図形の定義データは連想リストと呼ばれるリストの形式で整理されており、各要素はグループコードと図形情報のドット対になっています。

ドット対
2つの値がドットをはさんでペアになっているデータ構造。(リンゴ . 赤色)のようにドットが2つの値をつなぐ役割をするためドット対と呼ばれる。
連想リスト
キーと値のペア(ドット対)を要素に持つリスト。((リンゴ . 赤色) (ぶどう . 紫色) (バナナ . 黄色))のように各要素の左側がキー、右側が対応する値を表し、複数の情報がまとめられている。

ドット対と連想リストの詳細についてはこちらをご覧ください。
>>LISPの基本データ構造(コンスセル,連結リスト,連想リスト,属性リスト)

定義データは後述するAutoLISP関数で書き換えられるため、図形編集の効率化につながります。図形名はAutoCADの作業を楽にしたい人にとって重要な情報です。

AutoLISPの図形名関数8選

fignamefunc_caption2

今回ご紹介するAutoLISPの図形名関数は以下の7つです。どれも図形編集の自動化・効率化に役立つ重要な関数なので、しっかり覚えておくことをおすすめします。

  • entsel
  • entget
  • entnext
  • entlast
  • entmake
  • entmod
  • entdel
はこさん。
はこさん。

順番に1つずつ解説していきます。

entsel

fignamefunc_entsel

entselとはユーザーに図形の選択を求めて、選択した図形の図形名とクリックした座標を返すAutoLISP関数です。entselには次のような特徴があります。

  • 返り値は図形名と座標のドット対(リスト)
  • 実行中は現在のオブジェクトスナップが無視される
  • 実行中にメッセージを表示できる
  • initgetでキーワードを設定しておくと文字列入力ができる

entselで図形を選択すると、下記のような図形名とクリックした座標のドット対を返します。何もない場所をクリックしたときの返り値はnilです。

fignamefunc_entsel_image1

ドット対から値を取得するにはcarまたはcdrというAutoLISP関数を使用します。carとcdrについてはこちらの記事をご覧ください。
>>【AutoLISP】car部とcdr部を取得する関数「car」「cdr」

はこさん。
はこさん。

図形名はcar部に、クリックした座標はcdr部に格納されています。

entselの実行中はオブジェクトスナップが無視されるので、任意の座標をクリックできます。メッセージが表示できるため、ユーザーの行動をサポートすることも可能。

fignamefunc_entsel_image2

下記のようにinitgetでキーワードを設定しておくと、特定の文字列が入力されたときに設定したキーワード(文字列)を返します。

(initget "Apple Orange Banana")
(entsel "図形を選択またはキーワードを入力してください。")

ちなみにキーワードの頭文字だけ大文字にしておくと、頭文字の1文字を入力するだけで対応するキーワードを表示できます。

fignamefunc_entsel_image3

initgetについてもっと知りたい方はこちらの記事を参考にしてください。
>>AutoCADに情報を取り込もう!AutoLISPのユーザー入力関数8種を解説

はこさん。
はこさん。

entselは図形名を取得する基本的な関数です。

entget

fignamefunc_entget

entgetは図形名を与えることで、対象図形の定義データが取得できるAutoLISP関数です。図形の座標、線種、色などを詳しく調べたい場合に使います。entgetの特徴は以下のとおり。

  • 返り値はグループコードと図形情報の連想リスト
  • 削除済みの図形には使用できない
  • 図形名以外の値を与えるとエラーになる

entgetは指定した図形の定義データを連想リストで返します。リストの各要素はグループコードをキーとして、対応する図形情報とペアになっています。

グループコード

グループコードとは図形を構成する各情報に割り当てられた数値のこと。画層は8、座標は10など、さまざまなグループコードが用意されている。
>>図形に共通のグループ コード(DXF)

連想リスト(図形の定義データ)はキー(グループコード)を指定することで、対応する値を取得できます。たとえば、選択した図形の画層を取得したい場合は次のように記述してください。

(setq figname (car (entsel)))
(setq ent (entget figname))
(setq layer (cdr (assoc 8 ent)))

entselで取得した図形名から図形の定義データを取得し、変数entに格納しています。画層のグループコードは8なので、assocに数値の8と変数entを与えることで選択した図形の画層を取得できます。

carとcdrはドット対から要素を取得できるAutoLISP関数です。使い方は下記の記事が参考になります。
>>【AutoLISP】car部とcdr部を取得する関数「car」「cdr」

assocはリストから指定したキーの要素を検索するAutoLISP関数です。詳細はこちらの記事をご覧ください。
>>【AutoLISP】リストの要素を取得する関数「nth」「last」「assoc」

また、値がByLayerの場合は要素自体が省略されています。assocで対象のグループコードを検索しても、要素が見つからない場合もあるので注意してください。

entgetは登録されているアプリケーションにひもづく、拡張データを返すこともできます。登録アプリケーションと拡張データについてはAutoCADのヘルプを参考にしてください。
>>概要 - 拡張データ - Xdata (AutoLISP)|AutoCAD 2025 ヘルプ

はこさん。
はこさん。

entgetは図形情報の詳細がわかる非常に便利な関数です。

entnext

fignamefunc_entnext

entnextは図面内に存在する図形の図形名を返すAutoLISP関数です。図面内の図形を作成順で取得するときに使います。entnextの特徴は以下のとおり。

  • 引数を省略した場合、図面内で最初に作成された図形の図形名を返す
  • 図形名を与えたときは、その図形名の直後に作成された図形の図形名を返す
  • 図面内で最後に作成された図形の図形名を与えた場合はnilを返す

次のように引数を省略すると、entnextは図面内に存在する(削除されていない)図形の中で最初に作成された図形の図形名を返します。

fignamefunc_entnext_image1

図形名を与えた場合は、その図形名の直後に作成された図形の図形名が返り値になります。たとえば、entnextに引数を省略したentnextを与えると、2番目に作成した図形の図形名を取得できます。

fignamefunc_entnext_image2

最後に作成された図形の図形名を与えたときはnilを返すので、繰り返し関数のwhileとは相性バツグン。下記の例では最初の図形から最後の図形まで、順番に配置画層の表示を繰り返すことができます。

(setq figname (entnext))
(while figname
  (setq ent (entget figname))
  (setq layer (cdr (assoc 8 ent)))
  (print layer)
  (setq figname (entnext figname))
)

AutoLISPの繰り返し関数については、こちらの記事で解説していますのでぜひご覧ください。
>>AutoCADで楽をしたい人必見【繰り返しを自動化するAutoLISP関数3選】

はこさん。
はこさん。

関数名のとおり、次の図形を取得する関数です。

entlast

fignamefunc_entlast

entlastは図面内で最後に作成された図形の図形名を返すAutoLISP関数です。entlastの特徴は次のとおりです。

  • 図面内に図形が存在しない場合はnilを返す
  • フリーズしている画層の図形から図形名を取得できる

削除されていない図形の中から、最後に作成した図形の図形名を取得できます。図面内に図形が存在しないときは、取得できる図形名がないためnilを返します。フリーズしている画層の図形も対象なので、entlastを実行する前に画層のフリーズを解除する必要はありません。

プログラム中では作成直後の図形から図形名を取得するときによく使います。たとえば、作成直後の円から図形名を取得し、定義データの取得まで行いたい場合は次のように記述してください。

(command ”circle” (list 0 0) 10)
(setq figname (entlast))
(setq ent (entget figname))

定義データを取得できれば、作成直後の図形に対して画層の移動や線種の変更など、さまざまな操作ができます。

はこさん。
はこさん。

使える場面の多い便利な関数です。

entmake

fignamefunc_entmake

entmakeは図形の定義データをもとに新規の図形を作成するAutoLISP関数です。entmakeの特徴は以下のとおりです。

  • 定義データは最低限の情報が含まれていれば図形を作成できる
  • 定義データが正しくない場合は作図せずにnilを返す

図形の定義データにはさまざまな情報が含まれていますが、entmakeに与える図形の定義データには最小限の情報が含まれていれば図形を作成できます。情報が不足している場合など定義データが正しくないときはnilを返し、作図は行いません。

たとえば、コマンドで作成した円からentgetで図形の定義データを取得した場合、以下のように多くの情報が表示されます。

fignamefunc_entmake_image1

entmakeで同じ円を作成する場合、上図に表示されているすべての情報を与える必要はありません。次のように最小限の定義データを与えるだけで同じ円を作成できます。

fignamefunc_entmake_image2

各グループコードの内容は下表を参考にしてください。

グループコード内容
0図形の種類
10円の中心座標
8配置画層
40円の半径

与えた定義データの画層が存在しないときは、図形と一緒に画層も作成してくれます。entmakeで図形と画層を作成するサンプルコードを下記の記事で解説していますので、興味のある方はご覧ください。
>>【サンプルコード】AutoLISPで200個の円を一度に作成しよう!初心者向けに解説

はこさん。
はこさん。

作図を楽にしてくれる重要な関数です。

entmod

fignamefunc_entmod

entmodは図形の定義データを修正(書き換え)するAutoLISP関数です。entmodには以下のような特徴があります。

  • 一度に複数の情報を修正できる
  • 図形定義データを修正できなかった場合はnilを返す

図形の定義データに対して、entmodは一度に複数の情報を修正できます。たとえば、円の画層、中心、半径を下表のように修正したい場合、プログラムは次のように記述します。

項目修正前修正後
画層0test
中心0,020,20
半径510
(setq figname (car (entsel)))
(setq ent (entget figname))

(setq ent (subst (cons 8 ”test”) (assoc 8 ent) ent))
(setq ent (subst (cons 10 (list 20 20)) (assoc 10 ent) ent))
(setq ent (subst (cons 40 10) (assoc 40 ent) ent))

(entmod ent)

substとはリストの要素を置換するAutoLISP関数です。assocと組み合わせることで、連想リストのキーに対応する値を簡単に変更できます。

substについてもっと知りたい方はこちらの記事をご覧ください。
>>【AutoLISP】リストの要素を置換する関数「subst」

assocは以下の記事で解説しています。興味のある方はこちらも参考にしてください。
>>【AutoLISP】リストの要素を取得する関数「nth」「last」「assoc」

上記のプログラムでは修正したい項目をsubstで1つずつ置換して、新しい定義データを作成しています。作成した定義データをentmodに与えることで、各項目を一度に修正できます。

図面内に存在しない図形だったり、定義データの内容が正しくなかったり、定義データを正常に修正できなかった場合はnilを返すので注意してください。

はこさん。
はこさん。

endmodを使いこなすためには、定義データの内容を理解しておくことが大切です

entdel

fignamefunc_entdel

entdelは図形名の図形を削除または復元するAutoLISP関数です。entdelの特徴は次のとおり。

  • 図面内に指定された図形が存在する場合、対象の図形は削除される
  • 図面内に指定された図形が存在しない場合、対象の図形は復元される
  • 図面から取り除かれた図形は復元できない

entdelは指定された図形名の図形を図面内から削除します。削除された図形は一旦見えなくなるだけでデータ自体は図面に残っているため、entdelは削除した図形を復元することもできます。

たとえば、ユーザーが選択した図形を削除する場合は次のように記述してください。プログラムの処理が終わるとentselで選択した図形は削除されます。

(setq figname (car (entsel)))
(entdel figname)

上記のプログラムで削除した図形の図形名(変数figname)を与えると、図形が復元されます。

(entdel figname)

ただし、図面を閉じると削除された図形は図面から完全に取り除かれます。復元できるのは、図面を閉じる前に削除された図形だけなので注意してください。

はこさん。
はこさん。

削除してはいけない図形を誤って削除しないように気を付けましょう。

図形名関数を使いこなして図形編集を楽にしよう

fignamefunc_caption3
entsel
ユーザーに図形の選択を求めて、選択した図形の図形名とクリックした座標をドット対で返す。図形名を取得する基本的なAutoLISP関数。
entget
図形名を与えると対象図形の定義データを返す。返り値はグループコードと対応する図形情報のドット対を要素とする連想リスト。
entnext
図面内に存在する図形の図形名を返す。図形を作成順で取得するときに使用する。
entlast
図面内で最後に作成された図形の図形名を返す。削除された図形は対象外。
entmake
図形の定義データをもとに新規の図形を作成する。定義データが正しくない場合は作図せずにnilを返す。
entmod
図形の定義データを修正(書き換え)するAutoLISP関数。一度に複数の情報を修正できる。
entdel
図形名の図形を削除または復元する。図面内にデータが残っていない図形は復元できない。

図形名関数は図形の作成や編集を自動化してくれる強力なツールです。上手に活用してAutoCADの作業を楽にしましょう。

あなたに代わってAutoLISPプログラムを作成します

AutoLISPで作業を自動化したいけど、プログラミングに詳しくないのでツールが作れずにお悩みの方へ。5年以上のAutoLISP経験を活かしてAutoCADを自動化するツールを作成します。既にお持ちのAutoLISPプログラム修正も対応可能です。

AutoCADの面倒くさい作業から解放されたい方は、下記リンク先の「ココナラ」からお気軽にご相談ください。
>>AutoCADが楽になるプログラムを作成します|ココナラ

AutoCADが楽になるプログラムを作成します AutoCADを効率化して面倒な作業から解放されましょう!

-AutoLISP関数, 関数解説