Sponsored links

【AutoLISP ユーザー入力】雲マークをユーザー入力した番号付きの画層に作図

Sponsored links
AutoLISP
Sponsored links

改訂番号をユーザー入力して、改訂番号ごとに画層(無ければ作成)に雲マークを入れます。

Sponsored links

予備知識

この記事では、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