梁を描くLISP 4|入力と設定を管理して繰り返す
要点
initgetで不正な入力を抑え、作図を繰り返します。変更するシステム変数を保存し、処理後に戻す考え方も確認します。
始める前に
先に確認すると読み進めやすい記事:
確認の手順
- 掲載例が変更するシステム変数と、現在値を控えます。
- 入力制約を設定し、幅に想定外の値が入らないか確認します。
- 練習図面で複数の梁を続けて描きます。
- 正常終了と中断をそれぞれ確認し、変更した設定を照合します。
スナップとブリップを制御する
AutoCADのスナップ(osmode)やブリップ(blipmode)は、AutoLISPルーチンに予期せぬ影響を与えることがあります。そこで、ルーチンの冒頭でこれらをオフにし、終了時に元に戻すようにしましょう。
(setq oldsnap (getvar "osmode")) ; 元のスナップ設定を保存
(setq oldblipmode (getvar "blipmode")) ; 元のブリップ設定を保存
(setvar "osmode" 0) ; スナップをオフ
(setvar "blipmode" 0) ; ブリップをオフ終了時には以下で復元:
(setvar "osmode" oldsnap)
(setvar "blipmode" oldblipmode)不正な入力を防ぐ(initget)
ユーザーが「0」や「マイナスの値」を入力すると、図形が崩れる原因になります。これを防ぐには (initget) 関数を使います。
(initget (+ 1 2 4)) ; Enter,0,マイナスの値
(setq lb (getdist "\nLength of Beam : "))この設定により、ユーザーは有効な数値しか入力できなくなります。
同じビームを何度も描くには?
同じ寸法のビームを複数描きたいとき、毎回入力するのは面倒ですよね。そこで (while) ループを使って、挿入点を繰り返し取得し、何度でも描けるようにします。
(while
(setq ip (getpoint "\nInsertion Point : "))
;; 座標計算と描画処理をここに
)Enterキーを押すと nil が返り、ルーチンが終了します。
最終的な構造
このパートでは、以下の3つを追加しました:
- システム設定の保存・復元
- 不正入力の防止
- 挿入点を繰り返し取得するループ処理
これで、より堅牢で使いやすいAutoLISPルーチンが完成です!
結果の確認
正常終了時の復元と、Escやエラーで中断した場合の復元は別に確認します。業務用へ発展させる際は、エラー処理による設定の復元を追加してください。
参照資料
対象環境・動作確認
AutoLISP対応環境(関数・OSごとの対応は要確認)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。