AutoLISP は図面ファイルを閉じれば変数の値も含めてすべて消えます。
しかし、変数の値をパソコンに保存することもできます。
後から図面を開いたときや、別図面ファイルでも、同じグローバル変数を使いたいときに便利です。
予備知識
コマンド/関数内だけで1回だけでなく、複数のコマンドや何度も使い回す変数をグローバル変数と言います。詳しくはコチラの記事で。
この記事内にある図形の色を変えるコマンドのグローバル変数を保存するコマンドを作って行きます。
AutoLISP プログラム
(defun c:test (/ Obj JagaPath)
;-------------------------------------------
(setq JagaPath "HKEY_CURRENT_USER\\Software\\JagaimoLisp")
(if (null g00Col) ;もしg00Colが空なら
(setq g00Col (vl-registry-read JagaPath "g00Col"));レジストリから読み込んでg00Colに代入
);if
;-------------------------------------------
(if (null g00Col) ;もし読み込んでもg00Col空なら
(setq g00Col (acad_colordlg g00Col)) ; 色選択ダイアログボックスを出して色をユーザ選択
)
(setq Obj (car(entsel))) ; 色を変える図形をユーザ選択
(command-s "._CHANGE" Obj "" "_P" "_C" g00Col "") ; コマンドで選択された図形を選択された色にする
;-------------------------------------------
(vl-registry-write JagaPath "g00Col" g00Col);レジストリに書き込む
;-------------------------------------------
(princ))
レジストリ
Windowsには、レジストリと呼ばれる、各種設定を保存しておける場所があり、変数もここに保存できます。
Mac OS ではプロパティ リストファイルというものになるらしいです。
基本的に、このブログはWindowsでAutoCADを使っている方向けになります。
AutoLISPの説明
(setq JagaPath “HKEY_CURRENT_USER\Software\JagaimoLisp”)
保存する場所の住所です。長いし、書き込み/読み込み×保存したい変数の数書くことになるので、変数 JagaPath に入れておきます。
vl-registry-read
(if (null g00Col)
(setq g00Col (vl-registry-read JagaPath “g00Col”))
)
もし、g00Col が空っぽなら、(vl-registry-read JagaPath “g00Col”) で読み込みます。
vl-registry-readは、レジストリに保管した値を読み込む関数です。
引数は、”レジストリパス” “レジストリ値名”で、値が戻ります。
(vl-registry-read JagaPath “g00Col”))で、JagaPathにある、g00Col の値を読み込んでいます。
“g00Col”はレジストリ値名で、ダブルクォーテーションマークを付けて文字列になるので注意してください。
レジストリにも値が無ければ、nil になるので、
(if (null g00Col)
(setq g00Col (acad_colordlg g00Col))
)
レジストリから読み込んだ後でもg00Colに情報が入らなければ、ユーザー選択するようになっています。
最初にコマンドを使う時はもちろんレジストリには情報がありません。
レジストリに情報が無いことも想定してプログラムを組んでください。
vl-registry-write
(vl-registry-write JagaPath “g00Col” g00Col)
vl-registry-writeは、レジストリに値を書き込む関数です。
引数は ”レジストリパス” “レジストリ値名” 保存したい値 です。
コマンドの最後では、変数g00Colの値をレジストリ値g00Colに書き込みします。
変数名とレジストリの値名、違う名前でもいいですが、同じ名前の方が管理が楽だと思います。
レジストリの中のg00Colは文字列で”g00Col” ここで渡す値は変数を使ってg00Colです。
慣れないうちはややこしいかもしれませんが、
パスの後に “変数名” 変数名
です。
レジストリエディター
どこに保存されたのか興味がある方向けです。
「Windows」キーを押しながら「R」キーを押すと、「ファイル名を指定して実行」ウィンドウが表示されるので、regeditと入力すると、レジストリエディターというウィンドウが出てきます。
保存した後にHKEY_CURRENT_USER\Softwareの中からJagaimoLispを探してみると、保存された変数の値を確認できます。
まとめ
- Windowsには、レジストリと呼ばれる、各種設定を保存しておける場所がある。
- レジストリに変数の値を保存できる。
- vl-registry-readはレジストリから値を読み込む関数
- vl-registry-writeはレジストリに値を書き込む関数
関連記事
変数の保存使用例。
Comments