Jagaimo
オブジェクトスナップに邪魔されないAutoLISP作成の問題の解答編です。
解答
一時オブジェクトスナップを使った場合
(defun c:test ()
(command-s "._MOVE" pause "" "NON" "0,0" "NON" "150,50")
(princ))
一時オブジェクトスナップでオブジェクトスナップをオフにするのは、”NON”です。
コマンド操作で点の指定をする直前に”NON”を追加することで、オブジェクトスナップの影響を受けなくなります。
システム変数を変更する場合
(defun c:test ( / Old_Os)
(setq Old_Os (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command-s "._MOVE" pause "" "0,0" "150,50")
(setvar "OSMODE" Old_Os)
(princ))
(setq Old_Os (getvar “OSMODE”))
まず、getvarでシステム変数OSMODEの値を得て、変数 Old_Osに入れておきます。
(setvar “OSMODE” 0)
setvarを使い、OSMODEの値を0にします。
これでオブジェクトスナップはオフになりました。
(setvar “OSMODE” Old_Os)
移動コマンドの実行後、setvarでOSMODEの値を、最初に変数 Old_Osに入れた値に戻します。
システム変数を変更するコマンドを作った場合、途中でキャンセルして最後の (setvar “OSMODE” Old_Os) が実行されないとオブジェクトスナップの設定がオフのままになってしまいますので、エラー処理を加えることをおススメします。
システム変数を元の値に戻す、エラー処理の練習問題はこちらです。
Comments