Sponsored links

【AutoLISP 図形選択】図形名を取り出して変数に入れる (setq Obj (car (entsel)))

Sponsored links
図形選択
Sponsored links

(setq Obj (car(entsel)))
で図形を選択、その図形の名前を変数Objに入れることができます。

関数、変数って何?と言う方はまずは↓の記事から

  

Sponsored links

図形(オブジェクト)情報を取得

関数 entsel

関数entsel は、ユーザーに図形(オブジェクト)を選択するように促し、選択された図形の情報を戻り値で教えてくれる機能があります。

AutoCADのコマンドラインに、(entsel) と入力してください。

(entsel) すべて半角英数字になっているかチェックしてね。

正しく入力すれば、
オブジェクトを選択:
とメッセージがコマンドラインに現れます。

そして、図形を選択すると下記のようにその図形の情報をコマンドラインに表示してくれます。

(<Entity name: x1xx2xx3xx> (13.4 15.4 0) )

文字列はオブジェクトによって違うので、上記の例と全く同じにはなりません。
似たような感じで、ランダムに文字と数字が並んでいれば成功です。
この戻り値はリストと呼ばれる形になっていて、2つの情報が含まれています。
1つ目の情報が図形名、2つ目の情報が図形座標です。

  • <Entity name: x1xx2xx3xx>  図形名
  • (13.4 15.4 0) 図形選択時にクリックした座標

リストは、複数の情報をひとまとめできる便利なものです。

リストについて詳しく知りたい方はこちらのページをどうぞ。

関数 car

関数car には、リストから一番の情報を取り出す機能があります。
car を使い、先ほどのentselで取り出したリストになっている情報から、図形名だけを取り出してみましょう。

(car (<Entity name: x1xx2xx3xx> (13.4 15.4 0))

これで、リストの1つ目の情報、図形名 <Entity name: x1xx2xx3xx> を取り出すことができます。

(car (entsel))

今回は図形名だけが欲しいので、(entsel)で情報を得るのと同時に、car を使って図形名だけ取り出します
リストから1番目の情報を取り出すcarと、図形名と座標をリストにして取り出すentselをひとまとめにすると、下記のようになります。

(car (entsel))

今度はこれをコマンドラインに入力して、オブジェクトを選択:というメッセージに従って図形を選択して試してみてください。

図形名だけが戻ってきましたね。
entselとcar、それぞれの関数の役割が理解できたでしょうか?

Jagaimo
Jagaimo

(entsel)

図形情報をちょうだい!

(<Entity name: x1xx2xx3xx> (13.4 15.4 0))

(図形名  座標)

Jagaimo
Jagaimo

(car(entsel))

図形情報リストから最初の情報だけちょうだい!

<Entity name: x1xx2xx3xx>

図形名

図形名を変数に入れる (setq Obj (car(entsel)))

さて、戻り値として図形名を得ても、これではコマンドラインに表示されるだけです。

後からこの図形を編集するために、この情報を変数に入れるのが一般的です。
変数に情報を入れる関数はsetq でしたね。
変数名をObjにして、(car(entsel))の情報を入れるにはこう書きます。

(setq Obj (car(entsel)))

entsel で取り出したリストになっている情報から、car でリストの一つ目の情報だけ得て、setq で変数 Obj に入れています。

このコードをコマンドラインに入力して、図形をを選択すると、Objに選択した図形名の情報が入ります。
変数に入っている情報を確かめるには、!変数名でしたね。

!Obj

!Obj で図形名の情報が戻ってきたら、無事Objに図形名が入っています。

ちょっとややこしいなぁ。。。。と思った方は、とりあえずこの記事では

(setq Obj (car(entsel)))
このコードで、
選択した図形の図形名を変数Objに入れる。
ことだけ頭に入れておいて下さい。

変数にいれたObjをコマンドで使ってみましょう。
変数Objに図形名を入れた後、下記のコードをコマンドラインに入力してみてください。
図形がX方向に100移動します。

(command-s "._MOVE" Obj "" "_D" "100,0,0")

詳しくはコチラの記事で。

まとめ

  • entsel は図形の(図形名 座標)をリストで戻す機能がある。
  • リストは複数の情報をひとまとめにしたもの。
  • car はリストの1つ目の情報を戻す機能がある。
  • (entsel)で リスト(図形名 座標)が戻る。
  • (car (entsel))で、図形名が戻る。
  • (setq Obj (car(entsel)))で、変数Objに図形名が入る。

関連記事

複数の情報をひとまとめにするリストについて。

Comments