コマンド使用時、オブジェクトスナップが影響することがあります。座標位置を指定するコマンドを作るときは、一時オブジェクトスナップを使いましょう。
例として、特定のブロックを毎回同じところに入れるコマンドを作ります。
予備知識
この記事では、AutoCADの既存コマンドをAutoLISPプログラムにします。
関数 command-s で、既存コマンドを使う方法についての記事はこちら。
一時オブジェクトスナップ
一時オブジェクトスナップは、コマンド実行時にシフトキーと右クリックで出てきて、その操作の時だけ使うオブジェクトスナップです。AutoCADを使っている方なら、一時オブジェクトスナップは使っている方が多いと思います。
一時オブジェクトスナップは、AutoLISPでコマンド実行するときでも使えます。
シフトキーと右クリックで出てくるウィンドウには、端点(E)というように、カッコ付けでショートカットキーがでてきますが、それをコマンドオプションと同じように、クオーテーションマーク ”” で囲んで入れます。
使用例 ブロックを挿入するコマンド
コマンドの内容
スタンプだったり注意書きだったり、特定の所に特定のブロックを置きたい。という時に使うコマンドです。
今回は、Test という名前のブロックを、座標 X 200 Y 25 Z 0 に、尺度と角度を変更することなく挿入するコマンドです。
一時オブジェクトスナップ
ブロックを挿入するとき、挿入点を座標で指定してもオブジェクトスナップが影響します。
そこで、挿入点入力時に、一時オブジェクトスナップを使って、オブジェクトスナップを無しにするNONを使います。
AutoLISP プログラム
コマンド名はtest になっています。
(defun c:test ()
(command-s "._-INSERT" "Test" "NON" "200,25,0" "1" "1" "0")
(princ))
AutoLISP の説明
ブロックを挿入するコマンドはINSERT[ブロック挿入]です。
INSERT だけだと、ダイアログボックスが出てきます。が、- ハイフンを付けて – INSERT にすると、ダイアログボックスは出てこずに、ブロック名を入力するプロンプトが出てきます。
LAYER [画層管理]もそうですが、昔からあるコマンドで、後にダイアログボックスが付いたものは、このようにハイフンを付けることで古いコマンドが使えます。
-INSERT を使えば、コマンドラインのプロンプトだけでブロック挿入ができます。今回は、それを、関数command-s を使ってコマンドにしました。
(command-s “._-INSERT” “Test” “non” “200,25,0” “1” “1” “0”)
“._-INSERT” コマンド INSERT を実行。
“Test” ブロック名
“NON” 一時オブジェクトスナップ ”無し”
“200,25,0” 挿入点
“1” 尺度 X値
“1” 尺度 Y値 もしXYZ尺度均一に設定してあるブロックを使う場合はここは省略します。
“0” ブロックの挿入角度です。
カスタマイズ例
特定の画層にブロックを挿入したい場合、画層変更コマンドを組み合わせると、特定の画層にブロックを挿入することができます。
挿入点や回転角度は毎回変えたい。というときは、ユーザー入力にしたい部分をpause にすれば、その部分も指定できるようになります。
コチラの記事で取り上げています。
まとめ
- AutoLISPでも一時オブジェクトスナップを使うことができる。
- ブロックを挿入するコマンド INSERT は、ハイフンを付けるとダイアログボックスは出ずにコマンドプロンプトのみでブロック挿入できる。