AutoLISP入門 関数紹介

【AutoLISP】条件を満たすかぎり繰り返す関数「while」

ループ

同じ作業を手動で繰り返すことに嫌気が差した経験はないでしょうか。そんなときにはプログラミングを活用して自動化してしまいましょう。

AutoLISPでは「while」という標準関数で繰り返し処理ができます。今回の記事ではwhileについて解説していきます。めんどくさい作業から解放されたい方にとって有益な内容となっていますのでぜひご覧ください。

ちなみに、while以外にも「repeat」という指定の回数だけ繰り返し処理を続ける関数があります。こちらの記事ではrepeatについて解説していますのでご覧いただけると幸いです。
【AutoLISP】指定の回数だけ繰り返す関数「repeat」

【AutoLISP】条件を満たすかぎり繰り返す関数「while」

circle

whileの動作

whileは条件を満たすかぎり同じ処理を繰り返す関数です。条件には<、>=などの比較関数を使用して必要な条件式を指定します。条件式がnilを返す(条件を満たさない)と繰り返しは終了です。逆にいうと条件式がnilを返さないと繰り返しを続けてしまい、無限ループとなってしまうので必ずnilを返す条件式を指定してください。

使用例① 横並びの円を5つ作成する

(setq x 0)
(while (<= x 40)
  (setq center (list x 0))
  (command "circle" center "D" 5)
  (setq x (+ x 10))
)

whileで円を作成する処理を繰り返して、横並びの円を5つ作成する例です。while内では次の動作が繰り返されます。

  1. whileで変数xが40以下か判定
  2. 作成する円の中心座標を変数centerに格納
  3. コマンドcircleを呼び出して円を作成
  4. 次に作成する円のX座標を算出

X座標の初期値は0であるため最初に作成される円の中心座標は(0,0)です。次に作成する円の中心はX座標が10だけ加算されるので2番目の円は(10,0)に作成されます。ちなみに円の直径は5です。

whileの条件式が「<= x 40」となっているため変数xが40を超えたら繰り返しが終了します。そのため、変数xが50になった時点、すなわち円を5つ作成したら繰り返しは終了です。出力の結果は次のようになります。

while_example_1

ちなみに上図では「ZWCAD」という互換CADを使用しています。互換CADとはAutoCADと互換性を持ち、低価格でコスパを優先したCADのことです。

ZWCADは互換CAD業界でなんと世界シェアNo1。興味をお持ちの方はこちらの記事をご覧ください。
関連記事:世界シェアNo1!AutoCAD互換ソフト「ZWCAD」のメリット5選

使用例② 中心を指定して複数の円を作成する

(while (setq center (getpoint "\n円の中心を選択してください。"))
  (command "circle" center "D" 5)
)

getpointで円の中心を取得して複数の円を作成する例です。この例では次のような動作を繰り返します。

  1. getpointで取得した座標を変数centerに格納
  2. whileで変数centerがnilか判定
  3. コマンド「circle」を呼び出して円を作成

getpointでは画面上から任意の点をクリックすることで、その座標を取得することができます。直接キーボードから入力してもかまいません。取得した座標は変数centerに格納されます。

変数centerがnilにならないかぎり円の作成が繰り返されます。getpointを実行しているときにEnterまたはEscキーを押すと変数centerにnilが格納されるので繰り返しは終了となります。

while_example_2

whileの書式

whileの構文と引数および返り値は次のようになります。

(while testexpr [expr]...)

引数内容
testexpr繰り返しの継続を判定する条件式。
exprtestexprがnilを返すまで繰り返す処理。複数記述できる。
返り値内容
最後の評価結果最後のexprの結果

まとめ

  • whileは条件を満たすかぎり同じ処理を繰り返す
  • 条件式がnilを返すと繰り返しを終了する
  • nilを返さない条件式では無限ループとなる

-AutoLISP入門, 関数紹介

独学おすすめ書籍はコチラ
独学おすすめ書籍はコチラ