AutoCAD Lisp 入門 - 7 - 繰り返し処理
何度でも繰り返す
こんにちは!
エカキオです!
今回はプログラム言語の醍醐味でもあります「繰り返し処理」です。
当然ながら、AutoCAD Lispでも存在します!
繰り返し処理をすることにより、
複数のオブジェクトに同じ処理を繰り返したり、
繰り返す度に数値を増やしたり、
繰り返す度にカウントしていったり、
様々な処理に応用できます。
そんな便利な繰り返し処理には、
(while)関数を使用します。
使い方としては、(if)関数に非常に近いです。
では早速紹介していきます。
条件に合うまで繰り返し
繰り返し処理というものは単純に言うと、
「条件が違う場合」
「条件が合うまで処理を繰り返す」
ということです。
なので、書き方は(if)関数に似ているのです。
(while (○) (△) )
○:条件式を書く
△:○部分がnilになるまで繰り返す実行
例をあげます。
(setq n1 1);n1に「1」をセット (while (< n1 10);n1が10未満でtになり、10になるとnilになる (princ "\n");改行「\n」を入れます。 (princ n1);今のn1の数値を表示 (setq n1 (+ n1 1));n1に1を足したものをn1にセット )
こんな使い方ができます。
実用的な例ではありませんね…笑
まずは、(while)関数の動作と書き方を覚えてもらえれば良いと思います。
実用的に使うには、変数の部分をデータの中から作り出す必要があります。
オブジェクトの選択セット
上記の例に示した(while)関数は、選択オブジェクト全体に処理をするときなどに利用できます。
オブジェクトの選択セットに関連する関数をご紹介します。
(ssget)関数
この関数を使うと、選択セットを作れます。
(setq ss1 (ssget))
これで、オブジェクトの選択セットを変数「ss1」にセットできます。
(sslength)関数
次に、選択セットに入っているオブジェクトの個数を示す関数です。
こう書きます。
(setq sn1 (sslength ss1))
上記は、ss1の中にセットされたオブジェクトの個数をsn1にセットしました。
(ssname)関数
続いて、オブジェクト一つ一つを選択する方法として、こちらの関数を。
(ssname ○ △)
○:ベースにする変数
△:何番目かを示す数値(「0(ゼロ」が1つ目、「1」は2つ目になります。)
(setq sl1 (ssname ss1 count))
これを使うことにより、選択セットの中の1つを選び、また、その選択したオブジェクトの名称を取得しています。
後ほどの例題で変数「count」は登場しますので、一旦説明は省きます。
これらを使うことで、(while)関数に応用できるということにお気づきでしょうか。
書いてみます。
(setq ss1 (ssget)) (setq sn1 (sslength ss1)) (setq count 0) (while (< count sn1);sn1にオブジェクト全数の個数、countがsn1の数値になるまで繰り返します。 (princ "\n");改行「\n」を入れます。 (setq sl1 (ssname ss1 count));countには1番目を示す0が初めに入ります。 (setq n1 (cdr (assoc 8 (entget sl1)))) (princ n1);現在の選択セットの画層を表示 (setq count (+ count 1));ここでcountに+1です。 )
どうでしょうか。
(while)関数の使い方がなんとなくわかってきましたか?
今回もたくさんの新しい関数が登場したので、
理解できない方は、何度でも読み直してくださいね。
繰り返し繰り返し、そうWhileの様に・・・
それでは、この辺で。
エカキオ