+CADLabo.comCAD / LISP / AUTOMATION
AutoLISP初心者講座

梁を描くLISP 4|入力と設定を管理して繰り返す

AutoLISPの基本・図形操作のTips一覧
要点

initgetで不正な入力を抑え、作図を繰り返します。変更するシステム変数を保存し、処理後に戻す考え方も確認します。

始める前に

先に確認すると読み進めやすい記事:

確認の手順

  1. 掲載例が変更するシステム変数と、現在値を控えます。
  2. 入力制約を設定し、幅に想定外の値が入らないか確認します。
  3. 練習図面で複数の梁を続けて描きます。
  4. 正常終了と中断をそれぞれ確認し、変更した設定を照合します。

スナップとブリップを制御する

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実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。