AutoCAD LT の販売が終了したことで、 AutoCAD LT → AutoCAD (R版)や互換 CAD への移行を検討せざるを得なくなった人達がいるわけですが、そこで結構な割合で問題になるのが AutoCAD LT でカスタマイズしたメニューの移行問題です。
仕事で図面描くために AutoCAD LT を素の状態のままで使うっていうのは結構な苦行なので、DIESEL マクロをいじり倒してなにがしかの効率化をしている事が多いと思います。
で、そんなカスタマイズでまず間違いなく使われているのが GETENV、SETENV のコマンド。環境変数に一時的な値の保存と取得を行うために使われるものですが、このコマンド、実は AutoCAD LTにしかないコマンドで、AutoCAD R版にはありません。(youtuber ならここでドドンとか効果音入れる感じ。)
R 版は API があるのでそもそもメニューでちまちま信頼性の低い処理をする事が不毛っていうのもありますが、多くの互換 CAD にもなぜかないので、AutoCAD LT のメニュー環境から他の CAD に移行しようとするとメニューマクロの移植の開発がまず間違いなく発生します。
ということで、超簡単に LISP でGETENV、SETENV のコマンドを実装すると以下のようになります。
(defun c:setenv() (setenv (getstring "\n変数名を入力:") (getstring "値:")) (princ))
(defun c:getenv() (getenv (getstring "\n変数を名入力:")))
はい、この2行でとりあえず getenv、setenv のコマンドが登録されます。
エラー処理とか入力値のチェックとかなにもない適当タイプですが、とりあえず使うだけならこれでもいいでしょう。
常用したい場合は、プログラムを 上記の 2行を .lsp のテキストファイルに保存して CAD で自動ロードさせるようにしてしまえばいいです。
appload コマンドのスタートアップ登録とかで調べると大体のCADでやり方が見つかると思います。 自動ロードファイルの設定はこちらにも書いてます。
setenv で保存された値を既定値として使いたいとか、マクロで計算したりしたい場合はもうちょっと処理を加えないといけませんが、とりあえずは使えます。ちなみに、GizmoTools にすでに搭載されている、 GZ:setenv、GZ:getenv のコマンドを getenv、setenv として登録することで AutoCAD LT に近い形で使えます。
エイリアスで登録しちゃう方法と、以下のLISPコードでコマンド登録する方法いずれか。
(defun C:getenv () (c:gz:getenv))
(defun C:setenv () (c:gz:setenv))
AutoCAD と BricsCAD だと上記の方法の他に、以下のコードで登録する方法だとネイティブコマンドのような感じで登録されます。(IJCAD にも関数あるのですが、この方法使うと CAD が死ぬので上の方法にしておきましょう。)
(vlax-add-cmd "getenv" 'C:gz:getenv)
(vlax-add-cmd "setenv" 'C:gz:setenv)
vlax-add-cmd で登録したコマンドは、vlax-remove-cmd で登録解除できます。
(vlax-remove-cmd "getenv")
(vlax-remove-cmd "setenv")
といった感じで、GETENV、SETENV は LISP 使ってコマンド登録しちゃえば、AutoCAD や互換 CAD で簡単に対処できちゃうよっていう話でした。
元ネタ記事:なし