Sponsored links

【AutoLISP ドリル】エラー対策/処理 2 問題編

Sponsored links
professional crop black technician working with hardware AutoLISP
Photo by Field Engineer on Pexels.com
Sponsored links
Jagaimo
Jagaimo

システム変数を変更しても、エラー/キャンセル時には元の値に戻す

エラー処理の問題です。

Sponsored links

課題

図形をクリックすると、その図形がX方向に150、Y方向に50移動するコマンドがあります。
MOVE[移動]コマンドで図形を移動させる前に、オブジェクトスナップのシステム変数OSMODEの値を0にし、最後に元の値に戻しています。

(defun c:test ( / Old_Os)

 (setq Old_Os (getvar "OSMODE")) ;Old_OsにOSMODEの値を入れる
   (setvar "OSMODE" 0) ;OSMODEの値を0にする
;--------------------------------------------------------
    (command-s "._MOVE" pause "" "0,0" "150,50")
;--------------------------------------------------------
   (setvar "OSMODE" Old_Os) ;OSMODEの値を元の値(Old_Os)にする

(princ))


このコマンドだと、 途中でESCキーを押してキャンセルした場合、最後の (setvar “OSMODE” Old_Os) が実行されずに元の値に戻りません。

途中でキャンセルしてもシステム変数が元にもどるようににコードを追加してください。

ヒント

エラー処理(エラー/キャンセル時に実行する処理)を加えます。

関連記事

コマンド実行

(command-s “._MOVE” pause “” “0,0” “150,50”) は、コマンドMOVE[移動]実行しています。
コマンド実行について詳しくはこちらの記事で。

解答

ドリル一覧

Comments