画層を作成する自作関数を使ったコマンド例です。
ブロック/外部参照から抽出した図形を、特定の画層に移します。
AutoLISP関数entlastは最後に作成した図形の名前を戻す機能があります。
予備知識
コマンドの内容
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