Sponsored links

【AutoLISP 自作関数】図形を抽出して特定の画層に – 関数 entlast

Sponsored links
AutoLISP
Sponsored links

画層を作成する自作関数を使ったコマンド例です。

ブロック/外部参照から抽出した図形を、特定の画層に移します。

AutoLISP関数entlastは最後に作成した図形の名前を戻す機能があります。

Sponsored links

予備知識

コマンドの内容

AutoCADコマンドNCOPYで、同じ座標位置に取り出した図形を、画層”Jaga-No_Plot”にします。
もし、画層”Jaga-No_Plot”が無ければ、線種:Continuous、色:171、印刷しない設定で画層を作成します。

AutoLISPコマンド

(defun c:NC00-NoPlot ()
  
   (Jaga00MkLy "Jaga-No_Plot" "CONTINUOUS" "171" "N") ; 画層が無ければ作る
   (command "._NCOPY" pause "" "0,0.0"  "0,0.0") ; 図形を取り出す
   (setq Obj (entlast)) ; 最後の図形を変数Objに入れる
   (command-s "._CHANGE" Obj "" "P" "LA" "Jaga-No_Plot" "") ;コマンドChangeを使って画層変更

(princ));defun

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun Jaga00MkLy (Nm Lt Col Pl)
   (if (null (tblsearch "layer" Nm )) 
      (progn
         (command-s ".-layer" 
                     "N" Nm 
		     "L" Lt Nm 
		     "C" Col Nm 
                     "P" Pl Nm 
                     "") ;
    
  ));progn if  
);defun

AutoLISPの説明

(Jaga00MkLy “Jaga-No_Plot” “CONTINUOUS” “171” “N”)

まず、自作関数Jaga00MkLyを使って、画層Jaga-No_Plotが無ければ作ります。

(command “._NCOPY” pause “” “0,0.0” “0,0.0”)

そして、NCOPYを使って抽出します。この部分については、コチラの記事を参考にしてください。

(setq Obj (entlast))

AutoLISP関数 entlastは、最後の図形名を戻す関数です。この場合だと、NCOPYを使って抽出した図形です。その図形名を、関数setq を使って、変数 Objに入れています。

(command-s “._CHANGE” Obj “” “P” “LA” “Jaga-No_Plot” “”)

AutoCADコマンド CHANGE を実行、[プロパティ(P)] [画層(LA)]を選び、Objに入っている図形(NCOPYを使って抽出した図形)の画層をJaga-No_Plotに変更しています。

自作関数Jaga00MkLy については、コチラの記事を参考にしてください。

改善点

NCOPYを使って抽出した図形を、CHANGEを使って画層を変える。というコマンドでした。

このコマンドはentlastの例として作ったものなので実用的ではありません。
実際に使うためにはいろんな状況を想定してエラー対策をする必要があります。

今回は、抽出した図形の画層がロックされていないこと前提になります。ロックされていたら画層を変えることができません。その状況を想定するなら、

”もし、図形の画層がロックされていたら、ロック解除して、画層変更後にロックする。”

という処理を加えることで解決できます。最後にロックする前にエラー中断があっても対応できるように、エラー処理も入れた方がよいでしょう。

さらに、すでにJaga-No_Plot画層が存在して非表示かフリーズになっている場合、抽出した図形も非表示かフリーズになってしまいます。

”もし、Jaga-No_Plotが非表示なら表示、フリーズならフリーズ解除”

も必要です。

あとは、画層コマンドでのプロンプトが多く、コマンドラインに現れる文字(プロンプトとエコーバック)が多いです。
これは好みによりけりですが、システム変数CMDECHO を 0 (オフ) にすることで、図形選択以外の自動で行われる部分のプロンプトとエコーバックを消すことができます。
詳しくはコチラの記事を参考にしてください。

改善点を加えたコマンドはコチラ↓です。

まとめ

  • 今回は画層作成の自作関数を使ったコマンド例。
  • 関数 entlast は、最後に作成/編集した図形名を戻す機能がある。
  • ロックされている画層の図形は、画層変更できない。

Comments