こんにちは、ISD です。
AutoCAD でオブジェクトを回転させるときに使う [Rotate]コマンドは、3Dモデリングのみならず使用頻度の高いコマンドです。
しかし、AutoCAD の [Rotate]コマンドの参照回転、作業効率が悪いと思いませんか?
Rotateコマンドの面倒なポイント
例えば、こんな時…
上の図の例で、頂点Aを基点にして頂点BをCの位置に来るように回転したいとき、
AutoCADでの通常の操作手順は、
コマンド [RO] を入力した後
① 頂点 A をクリック
② 参照[R] を入力
③ 頂点 A をクリック
④ 頂点 B をクリック
⑤ 頂点 C をクリック
となるのですが…
頂点 A を2回クリックするのって無駄じゃないですか ?!
いや、③と④の操作で回転開始の角度を設定しているのと、条件によっては①と③は別の点をクリックするケースもあるのは理解できます。しかし、この例の場合は①と③は同じ頂点Aな訳で…
同じ点を2回クリックしなくてはいけないのが鬱陶しい!
それと、毎回 [R] を入力するのが鬱陶しい!
「あぁ!もうっ!!」って感じです。
オブジェクトの回転を3クリックで済ませたい
「これ、何とかならんのか?」
この回転の処理には、A、B、Cの3点さえ指定すれば十分なので、3クリックで済ませたいところです。
AutoLISPで Rotate コマンドをカスタマイズ
ということで、作成したコマンドがこちらです。
; ROTATE 参照回転版
; Rotate2
(defun c:Rotate2 ( / pt1 pt2 pt3 ss)
(setq ss (getSelectionSet)) ;選択セット取得
(setq pt1 (getpoint "1点目(回転の基点)"))
(setq pt2 (getpoint "2点目" pt1))
(setq pt3 (getpoint "3点目" pt2))
(selectCansel) ;選択を解除
(command "ROTATE" ss "")
(command pt1)
(command "R")
(command pt1)
(command pt2)
(command pt3)
)
; [Rotate2]を[R2]でも呼び出せるようにする
(defun c:R2 ( / )
(c:Rotate2)
)
; 選択セットを作成
(defun getSelectionSet ( / ss)
(setq ss nil)
;最初に選択されているもので選択セットをつくる
(setq ss (cadr (ssgetfirst)))
;選択セットが nil なら ssget を実行
(while (= ss nil)
(setq ss (ssget ))
)
ss
)
; 選択されているものを解除する
(defun selectCansel ( / ss)
(setq ss nil)
(command "PSELECT" ss )
)
非常に単純なプログラムなのですが、これにより手順が
コマンド [Rotate2] を入力した後
① 頂点 A をクリック
② 頂点 B をクリック
③ 頂点 C をクリック
と、回転を3クリックで済ませることができるようになりました。
プログラムの中でやっていることは、
必要な3点を先にクリックして座標を保存しておき、[Rotate]コマンドに適宜座標を送っているだけです。
さらに、[Rotate2]とコマンドを打つのが面倒だったので、[R2]という短い名前のコマンドを作ってこちらからも[Rotate2]を呼び出せるようにしています。
AutoLISPのファイルはこちらからダウンロードできますので、よろしかったらどうぞ。
コメント