


 
 
 
 
 
 
 |
ここでは、要素の回転複写・回転移動を行えるようにします。回転処理は、線と円の交点計算や円と円の交点計算等で述べた「回転写像」を用います。
回転写像は、
 | ( | cosθ -sinθ | ) θ:回転角 |
sinθ cosθ |
つまり
x'=x×cosθ−y×sinθ
y'=x×sinθ+y×cosθ
ですが、これは中心(0,0)での回転ですので、点(x0,y0)を中心に回転する場合には、
x'=x0+(x−x0)×cosθ−(y−y0)×sinθ
y'=y0+(x−x0)×sinθ+(y−y0)×cosθ
となります。 |
選択した要素の各座標に対して写像を行います。また、円弧の開始角・終了角、文字の傾き角度に、回転角を加算する事も忘れずに行います。角度の加算を行った際には、360°以上になったりマイナス値になったりした場合の補正を行うようにしておき、0°≦角度<360°であるようにします。
流れとしては、
@要素を選択
A回転中心点(原点/基準点)の指定
B回転角入力
C回転角入力でキャンセルした場合
角度指定点の指定
D計算
E複写・移動処理
F Bに戻る
という風にします。先に回転角入力をしてから中心点指定、という手法もありますが、ここではこのようにしています。逆にしたい場合には、プログラムも逆になるよう作って下さい。
回転角は、数値入力とマウス指定による場合が考えられますが、両方とも行えるように、回転角入力の際に「キャンセル」をすればマウス指定を行う、という少しトリッキーな手法を使ってみます。
繰り返し動作を行う場合、複写の場合には、元図形からの回転角指定、移動の場合には、回転後図形からの回転角指定、となりますので注意して下さい。
今回の追加
・編集メニューを追加します。
[複写(C)]
> [数値入力 (&N)]
> [マウス指定(&M)]
> [拡大縮小 (&S)]
> [回転 (&R)]
[移動(M)]
> [数値入力 (&N)]
> [マウス指定(&M)]
> [拡大縮小 (&S)]
> [回転 (&R)]
(ショートカットキー(ShortCutプロパティ)やアクセスキーはメニュー編集で自由に出来ますので好きなように指定して下さい。)
・EntSelectCopy3()、EntSelectMove3()を追加 |
それではここまでのプログラムです。
【サンプルプログラムのソース】
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
▲PREV
▼NEXT
|