Sponsored links

【AutoLISP 自作関数】非表示画層を表示する自作関数 – strcat 文字をつなげる

Sponsored links
AutoLISP
Sponsored links

特定の画層に作図するコマンドを作るとき、その画層が非表示になっていることも想定して、”画層が非表示なら表示する” 自作関数があると便利です。

文字列をつなげる関数 strcat も紹介します。

Sponsored links

予備知識

自作関数の内容

  • 画層名を引数で得る。
  • 関数 tblsearchを使って、画層のDXF情報を得る。
  • 色と表示/非表示の情報が入っているグルーコード62の情報を取り出す。
  • 非表示なら、表示して、画層<画層名>非表示だったので表示にしました とメッセージを出す。

という内容の自作関数を作ります。

AutoLISP プログラム

(defun Jaga00LyOffCk (LyNm / LyInfo Ly62)	
   (setq LyInfo (tblsearch "layer" LyNm)) ;
		  
   (if LyInfo ; もしLyInfoに情報があれば(画層があれば)	
   (progn
      (setq Ly62 (cdr(assoc 62 LyInfo))) ; 62の情報を取り出して変数Ly62に入れる
		
      (if (> 0 Ly62) ; もしLy62が0よりも小さければ
      (progn
            (command-s "._LAYER" "ON" LyNm "") ; 画層をオンにして
            (princ (strcat " \n 画層 < " LyNm " > 非表示だったので表示にしました\n")) ;メッセージを出す
      ));if progn
  ));if progn

(princ));defun

AutoLISP の説明

(defun Jaga00LyOffCk (LyNm / LyInfo Ly62)

自作関数名は Jaga00LyOffCk です。関数名に続く( )には、実行するときに引数として得る情報を入れる変数と、/ の後ろはローカル変数です。

LyNmでは、画層名を受け取る前提でプログラムを書いていきます。

(setq LyInfo (tblsearch “layer” LyNm))

関数 teblsearch で画層LyNm のDXF情報を得ています。
例えば、初期設定の画層”0”の情報を得た場合、

((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous"))

このように、情報が戻ってきます。これをsetqを使って変数LyInfoに入れています。

(if LyInfo
 (progn

もし、引数として渡されてLyNmに入った画層名が存在しなければ、その後の処理にエラーになるので、ここでまず、”もしLyInfoに情報が入っているなら”を入れておきます。

もし、画層が無ければ、tblsearchの結果はnilなので、その後の処理は実行されずに終わります。

(setq Ly62 (cdr(assoc 62 LyInfo)))

LyInfoに入れたDXF情報から、62とペアになっている情報を取り出します。
上の例でいうと、(assoc 62 LyInfo)で、(62 . 7) を取り出し、さらに cdr で 7 だけを取り出して、変数Ly62に入れています。

DXF情報から、情報を得る方法は、コチラの記事を参考にしてください。

(if (> 0 Ly62)
(progn

先ほど挙げた例では、表示されていたので 7 です。これは色番号なのですが、もし、画層が非表示になっていると、-7になります。

なので、”もしLy62が0よりも小さければ”とすることで、もし画層が非表示ならばとなります。

 (command-s “._LAYER” “ON” LyNm “”)

非表示ならば、画層管理コマンドを使って、表示にします。

(princ (strcat ” \n 画層 < ” LyNm ” > 非表示だったので表示にしました\n”))

そして、princ を使って、コマンドラインにメッセージを表示します。

AutoLISP関数 strcat は、文字列をつなげる機能があります。
そして、文字列 \n は改行です。

” \n 画層 < “
LyNm
”> 非表示だったので表示にしました\n”

LyNmには画層名が文字列で入っているので、この3つの文字列を strcat でつなげて、

画層 < 画層名> 非表示だったので表示にしました

と表示されるようになっています。

試してみよう

この関数に必要な引数は、画層名です。

(Jaga00LyOffCk “画層名”)

となります。

(defun c:test ()
    (Jaga00LyOffCk "0")
(princ))

画層0を非表示にして、コマンドtestで試してみ出ください。
コマンドラインに (Jaga00LyOffCk “0”) と入力するだけでもいいです。

このようにメッセージが出て、画層0が表示されます。

まとめ

  • 特定の画層を使うコマンドを作るときは、非表示になっていることも想定する。
  • 関数strcat は、複数の文字列をつなげる機能がある。

関連記事

Comments