AutoLISPでビームを描くルーチン、前回まででかなり完成度が高まりましたね。今回はさらに一歩進んで、AutoCADの設定を制御しながら、繰り返し描画できるようにルーチンを改良していきます。
スナップとブリップを制御する
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ルーチンが完成です!
次回は、さらに便利な機能やエラーハンドリングを加えていく予定です。AutoLISPでの自動化がどんどん楽しくなってきますね!
コメント