改訂番号をユーザー入力して、改訂番号ごとに画層(無ければ作成)に雲マークを入れます。
予備知識
この記事では、if 条件式を使います。
コマンドの内容
現在の画層、図形の画層関係なく、長方形などの図形をクリックするだけで、円弧の長さ5の雲マークを作成することができます。
まず改訂番号を入力するプロンプトが出ます。
入力した改訂番号の前に Jaga_Rev- が画層名となり、図面に無ければ、緑 (3) 線種 continuous で画層が作成されます。
そして、図形を選択するようにプロンプトが出て、選択した図形が雲マークになり、Jaga_Rev-#画層に入ります。
AutoLISPプログラム
コマンド名は test です。
(defun c:test (/ Nm)
(setq Nm (strcat "Jaga_Rev-"(getstring "改訂番号:")))
(if (null (tblsearch "layer" Nm)) ; もし画層Nmが無いなら
(command-s "._-LAYER" ; 画層管理コマンド
"_N" Nm ; 新規作成
"_L" "continuous" Nm ; 線種設定 continuous
"_C" 3 Nm ; 色設定 3 緑
"_P" "P" Nm ; 印刷設定 P印刷
"") ;
);if
(command-s "._REVCLOUD" "_A" 5 5 "_O" pause "_N")
(command-s "._CHANGE" (entlast) "" "_P" "_LA" Nm "")
(princ));defun
AutoLISPの説明
(setq Nm (strcat "Jaga_Rev-"(getstring "改訂番号:")))
関数 getstring を使い、文字列をユーザー入力します。
そして、関数 strucat で、”Jaga_Rev-” とユーザー入力文字列をつなげて、変数 Nm に入れます。これが雲マークを入れる画層名になります、
(if (null (tblsearch "layer" Nm )) ; もし画層Nmが無いなら (command-s "._-LAYER" "_N" Nm "_L" "continuous" Nm "_C" 3 Nm "_P" "P" Nm "") ; );if
画層管理コマンドを使って、
”雲マーク用の画層が無ければ、作成する”
部分です。
画層を作成するコードについてはこちらの記事を参考にしてください。
(command-s "._REVCLOUD" "_A" 5 5 "_O" pause "_N")
コマンドREVCLOUD を使って、図形を雲マークにします。
(command-s "._CHANGE" (entlast) "" "_P" "_LA" Nm "")
コマンドCHANGE を使って、先ほど作った雲マークの画層を変えます。
関数 (entlast) は最後に描いた図形になるので、上の_REVCLOUDで作成した雲マークが画層を変える図形として自動的に選択され、変数Nmに入った名前の画層に移ります。
(entlast)ついての記事はコチラ。
カスタマイズ例
改訂番号は一度の作業でいくつも使わないと思うので、グローバル変数にし、改訂番号が一度でも入力されていたら、後は入力を省略。にしてもいいと思います。
画層が既に存在していて、フリーズや非表示になっている場合の対策もあるといいと思います。
いろいろカスタマイズしたサンプルコマンドがこちらです。
まとめ
- getstringで文字列をユーザー入力。
- strcat は複数の文字列をつなげる。
- AutoLISP関数 entlast では最後に作図した要素を得ることができる。
- command-s でコマンド操作をするとき、図形選択部分に(entlast) と入れれば、最後に作った要素を選択することになる。
Comments