foreach はリストにした値を使って繰り返し処理したい時に便利な関数です。
予備知識
foreachでは、リストを使います。
AutoLISP関数 foreach
関数 foreach は、値だけを変えて繰り返し処理をしたいときに使います。
例えば、数値 1 2 3 4 のリストを作り、それぞれの値をprinc で表示させるコードは
(foreach n (list 1 2 3 4) (princ n) (princ) )
です。
コマンドラインに入力してみてください。リストの各値が 1234 と表示されます。
(最後の(princ)は、余分な戻り値の表示をさせないために入れています。詳しくはコチラの記事を)
foreach の引数は、リストの各要素を入れる変数名、値のリスト、その値を使ってしたい処理です。
この例では、
リストの各要素を入れる変数名 n
リスト (list 1 2 3 4)
処理 (princ n)
です。リストの各値が変数nに入り、処理がリストの値の数だけ繰り返されます。
使用例
指定した点から、X値はそのままでY値10づつ変更して半径5の円を描きます。
つまり、1つの点を選ぶだけで5段団子を作図できます。
AutoLISPプログラム
(defun c:test ( / Pt1 Pt2)
(setq Pt1 (getpoint)) ; 基準点をユーザー入力
(foreach n (list 0 10 20 30 40) ; 変数n 値のリスト
(setq Pt2 (list (car Pt1) (+ n (cadr Pt1)))) ;X値はそのままY値にはnを足して点Pt2を作成
(command-s "._CIRCLE" Pt2 5 ) ;Pt2を中心に半径5の円を描く
); foreach リストの値の数繰り返したら終わり
(princ))
AutoLISPの説明
(setq Pt1 (getpoint))
関数getpoint を使って、クリックした場所の点座標を変数Pt1に代入します。
(foreach n (list 0 10 20 30 40)
関数 foreach に引数として、リストの値を1つづつ入れて行く変数をnに設定し、5つの数字の値をリストにしたものを渡します。
(setq Pt2 (list (car Pt1) (+ n (cadr Pt1)))) (command-s "._CIRCLE" Pt2 5 )
リストの各値が入った変数nを使ってする処理部分です。
(setq Pt2 (list (car Pt1) (+ n (cadr Pt1))))
では、新しい点Pt2の (X値 Y値)リストを作ります。
X値はPt1と同じなので、car を使ってPt1のX値を取り出すのみ。
Y値にはnに代入されたリストの値を足します。
(command-s “._CIRCLE” Pt2 5 )
Pt2を中心に半径5の円を描きます。
リスト (0 10 20 30 40) の各値が順番にnに入りながら、円を描き、リストの要素の数、5回繰り返されて終わります。
オブジェクトスナップが影響するので、変なところに円が作図される場合は、オブジェクトスナップをオフにして試してください。
まとめ
- foreachは、値を変更しながら同じ処理を繰り返す時に使う。
関連記事
foreach を使って、全てのレイアウトタブで同じ処理を繰り返す方法です。
Comments