画層を作成する自作関数を作ります。
コマンド作成時に、必要な画層が無い時に画層を作る。というプログラムを組み込みたいときに使えます。
予備知識
関数の内容
引数として、画層名、線種、色、印刷設定 を渡すと、画層を作成する関数を作ります。
AutoLISPプログラム
(defun Jaga00MkLy (Nm Lt Col Pl)
(if (null (tblsearch "layer" Nm )) ; もし画層Nmが無いなら
(progn
(command-s ".-layer" ; 画層管理コマンド
"N" Nm ; 新規作成
"L" Lt Nm ; 線種設定
"C" Col Nm ; 色設定
"P" Pl Nm ; 印刷設定 P印刷 N印刷しない
"") ;
));progn if
);defun
AutoLISPの説明
(defun Jaga00MkLy (Nm Lt Col Pl)
今回はコマンドではなく関数を作るので、c: は入れません。関数名はJaga00MkLyです。
( )の中にある、Nm Lt Col Pl は、関数実行時に引数として情報が渡される予定の変数です。ここでは、Nm 画層名 Lt 線種 Col 色 Pl 印刷設定 です。
複数引数ある場合は、引数を入れる変数名を、空白で仕切って()内に並べます。
そして、実行時にはその順番に引数を渡します。
つまり、この関数を使う時は、関数名と4つの引数
(Jaga00MkLy 画層名 線種 色 印刷設定)
で、実行されます。
(if (null (tblsearch “layer” Nm ))
もし、tblsearchの画層情報に画層Nmが無ければ…
となります。変数Nmには引数で渡された画層名が入ります。
関数 null は、引数がnilならTを戻します。
この場合、(tblsearch “layer” Nm) の結果ががnil なら、つまり、画層Nmが存在しなければTになります。
関数 not も同じ機能があるので (if (not (tblsearch “layer” Nm )) でも結果は同じです。
(command-s “.-layer” ; 画層管理コマンド
“N” Nm ; 新規作成
“L” Lt Nm ; 線種設定
“C” Col Nm ; 色設定
“P” Pl Nm ; 印刷設定 P印刷 N印刷しない
“”) ;
関数command-s を使って、画層管理コマンドを実行し、引数として与えられた情報をもとに、画層の設定をします。
関数を使って画層を作る
では、この関数を使って、画層を作ってみたいと思います。
- 画層名 ”Jaga-No_Plot”
- 線種 ”CONTINUOUS”
- 色 ”171″
- 印刷 しない (N)
の画層を作るコードは、自作関数Jaga00MkLyがあれば
(Jaga00MkLy "Jaga-No_Plot" "CONTINUOUS" "171" "N")
の1行で済みます。
- 画層名 ”Jaga-Plot”
- 線種 ”CONTINUOUS”
- 色 ”2″
- 印刷 する (P)
はこうなります。
(Jaga00MkLy "Jaga-Plot" "CONTINUOUS" "2" "P")
例えば、寸法画層に寸法を入れたい、この図形は下書き画層に入れたいなど、特定の画層に図形を描くコマンドを作るとき、その特定の画層が無い状況も想定しておいた方がいいです。
もし特定の画層が無ければ現在画層で。としてもいいですが、画層が無いなら作るとした方が私は使い勝手よく感じるので、画層作成する関数はいろんなコマンドに組み込んでいます。
まとめ
- 複数の引数がある場合の自作関数。
- 関数名の横の( ) に、引数で渡される予定の情報を入れる変数を並べる。
- 関数を実行するときは、その順番に引数を渡す。
関連記事
画層を扱うコマンドを作るときは、その画層が無ければ作る。以外に、場合によっては、非表示だったら表示する、フリーズしてたら解凍する、ロックされていたら解除する。というコードが必要です。
画層関連の操作が使われているサンプルコマンドです。
特定の画層が無い時、フリーズ、ロック、表示オフになっている場合も想定してあり、エラー処理も入っています。
Comments