AutoLISPってなに?という方はまずこちらの記事をご覧ください。
AutoCADユーザーがAutoLISPを覚えるべきメリット3選
今回の記事では図形名関数について解説していきます。
突然ですが、CADの使用でこんなお悩みをお持ちではないでしょうか。
- コマンドを使って図形を操作するのが面倒
- 手作業を減らして自動化したい
そんなときは図形名関数を活用しましょう!
図形の移動や削除、サイズの変更など図形に関する手間で面倒な作業を自動化することができます。AutoCADの作業を効率化して楽になりたい方はぜひご覧ください。
図形編集を自動化しよう!AutoLISPの図形名関数を解説
図形名関数とは
図形名関数とは図形名を取得する、または図形名を用いて図形を操作する関数です。図面内の図形それぞれにはラベルが割り当てられており、これを図形名と呼びます。
後述するentgetでは図形名から図形定義データを取得することができます。図形に対して細かな操作が行えるので非常に便利です。
図形定義データとは
図形定義データとは簡単にいうと図形を定義するデータです。画層や線種、座標など図形を定義するために必要なパラメータが対応するグループコードとセットになっています。
また、パラメータの書き換えによって図形を操作することが可能です。
ちなみに、後述するentmodで図形定義データの書き換えができます。
説明のために要素を一部省略していますが、図形定義データは次のようなリストで表現されます。
((-1 . 図形名) (0 . "CIRCLE") (10 . 100.0 150.0 0.0))
各要素の左側にある数字(-1、0、10)がグループコードで、右側がパラメータを表しています。グループコードとは各パラメータに割り当てられた数字のことです。例えば図形種なら"0"、座標なら"10"など多数存在します。
その他のグループコードについて知りたい方は公式のヘルプをご覧ください。
AutoCAD 2011 ヘルプ - グループ コード(番号順)
グループコードとパラメータはドットで間を区切る「ドット対」という特殊なリスト形式になっています。また、ドット対を要素にもつリストは連想リストと呼ばれます。
図形名に関する関数6種
今回ご紹介する図形名に関する関数は次の6つです。
- 図形名と選択した座標を取得entsel
- 図形定義データを取得entget
- 次に作成した図形名を取得entnext
- 最後に作成した図形名を取得entlast
- 図形定義データを書き換えるentmod
- 図形を削除/復元するentdel
図形名と選択した座標を取得 entsel
entselはユーザーに図形の選択を求めます。そして、選択した図形から図形名を取得し、図形名と選択した座標のリストを返します。
図形名を取得したい図形を図面上から選択する場合はentselを使用するのがおすすめです。図形名が要素の1番目、選択した座標が2番目なのでcarを使って図形名を取得できます。
carってなに?という方はこちらの記事をご覧ください。
関連記事:リストの中身を取り出す!AutoLISPのリスト要素取得関数を解説
entselの書式
(entsel [文字列]) ※[]内は省略可能
引数 | 内容 |
---|---|
文字列 | ユーザーへ向けたメッセージ。コマンドラインに表示できる。 |
返り値 | 内容 |
---|---|
リスト | 図形名と選択した座標のリスト。1番目の要素は図形名、2番目が選択した座標。 |
entselの使用例
(command "circle" (list 0 0) "D" 10)
(setq lst (entsel "円を選択してください。"))
(setq figname (car lst))
作成した円を選択しその図形名を取得する例です。entselの返り値は変数lstに格納しています。そして、carを使って変数lstから図形名だけを取得して変数fignameに格納します。
図形定義データを取得 entget
entgetは図形名から図形定義データを取得する関数です。存在しない図形名の場合はnilを返します。
私が知るかぎり、図形定義データの連想リストを取得できるのはentgetだけです。取得した連想リストがないと図形定義データの編集ができないため使用頻度が高い関数といえます。
entgetの書式
(entget 図形名)
引数 | 内容 |
---|---|
図形名 | 図形定義データを取得したい図形名。 |
返り値 | 内容 |
---|---|
連想リスト | 引数に指定した図形名の図形定義データ(連想リスト)を返す。 |
nil | 指定した図形名が存在しない場合はnilが返る。 |
entgetの使用例
(command "circle" (list 0 0) "D" 10)
(setq ent (entget (car (entsel "作成した円を選択してください。"))))
前述したentselとcarを使用して図形名を取得し、その図形名から得られた図形定義データを変数entに格納する例です。
図形名を別の変数へ格納せずにそのままentgetの引数とすることで、プログラムを1文にまとめることができます。
次に作成した図形名を取得 entnext
entnextは指定した図形名の次に作成した図形の図形名を返す関数です。引数を省略することも可能で、この場合は最初に作成した図形の図形名を返します。
返す図形名が図面上に存在しない場合はnilが返ります。また、引数がnilだとエラーになるので注意してください。
entnextの書式
(entnext [図形名]) ※[]内は省略可能
引数 | 内容 |
---|---|
図形名 | 図面上に存在する図形の図形名。nilを指定した場合はエラーとなる。 |
返り値 | 内容 |
---|---|
図形名 | 指定した図形名の次に作成した図形名が返る。 引数を省略した場合は図面上で最初に作成した図形名を返す。 |
nil | 返す図形名が存在しない場合はnilが返る。 |
entnextの使用例
(command "circle" (list 0 0) "D" 10)
(command "circle" (list 1 1) "D" 15)
(setq ss (ssget))
(entnext (ssname ss 0))
最初に作成した円の図形名を引数として、2番目に作成した円の図形名を取得する例です。図形の選択にはssget、1番目の図形名を取得するためにssnameを使用しています。
ssgetとssnameについて知りたい方はこちらの記事をご覧ください。
関連記事:【ssget】選択作業を効率化!AutoLISPの選択セットを解説
最後に作成した図形名を取得 entlast
entlastは最後に作成した図形の図形名を取得する関数です。他の関数と異なり、引数を必要としません。図形を作成した直後に図形定義データを取得したいときに便利です。
entlastの書式
(entlast)
返り値 | 内容 |
---|---|
図形名 | 最後に作成した図形の図形名を返す。 |
entlastの使用例
(command "circle" (list 0 0) "D" 10)
(command "circle" (list 1 1) "D" 15)
(setq ent (entget (entlast)))
最後に作成した円(2番目に作成した円)の図形定義データを取得する例です。entlastとentgetで取得した図形定義データを変数entに格納しています。
図形定義データを書き換える entmod
entmodは既存の図形定義データを新しい図形定義データに書き換える関数です。図形定義データの書き換えができると、画層変更や座標移動など様々な変更を一度に実行することが可能になります。
entmodの書式
(entmod 図形定義データ)
引数 | 内容 |
---|---|
図形定義データ | 書き換え後の図形定義データ。 |
返り値 | 内容 |
---|---|
図形定義データ | 書き換えた図形定義データ(引数の図形定義データ)が返る。 |
nil | 書き換えに失敗した場合はnilを返す。 |
entmodの使用例
(command "circle" (list 0 0) "D" 10)
(setq ent (entget (entlast)))
(setq new-ent (subst (cons 10 (list 5 5)) (assoc 10 ent) ent))
(entmod new-ent)
作成した円の図形定義データを書き換えて中心を移動させる例です。まず、entlastとentgetで図形定義データを取得します。
次にsubstを使って中心座標を(0,0)から(5,5)に置換し、新しい図形定義データを変数new-entに格納しています。そして、変数new-entでentmodを実行することにより円の中心が変更されます。
図形を削除 / 復元する entdel
entdelは指定した図形名の図形を削除する関数です。削除済みの図形名を引数に指定した場合は図形を復元することができます。
削除された図形は図面を閉じると完全に除去されるため、図面を閉じた後は図形の復元ができないことに注意してください。
entdelの書式
(entdel 図形名)
引数 | 内容 |
---|---|
図形名 | 削除または復元する図形の図形名。 |
返り値 | 内容 |
---|---|
図形名 | 引数の図形名が返る。 |
entdelの使用例
(command "circle" (list 0 0) "D" 10)
(entdel (entlast))
作成した円を削除する例です。entdelの引数として必要になる図形名はentlastで取得しています。
まとめ
- 図形名とは図形それぞれに割り当てられたラベル
- 図形定義データは図形を定義するパラメータをまとめた連想リスト
- 図形名および図形定義データを用いることで図形を操作できる
構文 | 内容 |
---|---|
(entsel [文字列]) | 図形名と選択した座標のリストを返す。 |
(entget 図形名) | 図形名から図形定義データを取得する。 |
(entnext [図形名]) | 次に作成した図形の図形名を返す。 |
(entlast) | 最後に作成した図形の図形名を取得する。 |
(entmod 図形定義データ) | 図形定義データを書き換える。 |
(entdel 図形名) | 図形を削除または復元する。 |