読者です 読者をやめる 読者になる 読者になる

図描きの備忘録

日々の業務の時間短縮。残業しないで帰る事を目指し、悪戦苦闘中。AutoCAD、Lisp、効率化、自動化、合理的、プログラミング、資産運用勉強中

AutoCAD Lisp 入門 - 7 - 繰り返し処理

何度でも繰り返す

こんにちは!

エカキオです!

今回はプログラム言語の醍醐味でもあります「繰り返し処理」です。
当然ながら、AutoCAD Lispでも存在します!

繰り返し処理をすることにより、

複数のオブジェクトに同じ処理を繰り返したり、

繰り返す度に数値を増やしたり、

繰り返す度にカウントしていったり、

様々な処理に応用できます。


そんな便利な繰り返し処理には、
(while)関数を使用します。

使い方としては、(if)関数に非常に近いです。

ekakio.hatenablog.jp


では早速紹介していきます。

条件に合うまで繰り返し

繰り返し処理というものは単純に言うと、

「条件が違う場合」
「条件が合うまで処理を繰り返す」

ということです。

なので、書き方は(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の様に・・・

それでは、この辺で。

エカキオ

Related Posts Plugin for WordPress, Blogger...