Sponsored links

【AutoLISP 自作関数】画層を作成する自作関数 – 複数の引数がついた関数

Sponsored links
AutoLISP
Sponsored links

画層を作成する自作関数を作ります。

コマンド作成時に、必要な画層が無い時に画層を作る。というプログラムを組み込みたいときに使えます。

Sponsored links

予備知識

関数の内容

引数として、画層名、線種、色、印刷設定 を渡すと、画層を作成する関数を作ります。

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