


 
 
 
 
 
 
 |
ここでは、要素の複写・移動を行う際に、倍率を入力することによって、拡大縮小を行えるようにします。倍率が1よりも大きい場合には拡大、1よりも小さい場合には縮小、1の場合には前節の平行複写・平行移動と同じ、0やマイナスの値は入力出来ない、とします。
流れとしては、
@要素を選択
A倍率入力
B始点(原点/基準点)の指定
C終点の指定
D計算
E複写・移動処理
F A〜Cのいずれかに戻る
というのが一般的でしょう。ここでは、Cに戻るようにし、同じ倍率のままになるようにします(移動の場合には、2回目以降は1倍にするようにします)。
移動量の算出は、平行複写・平行移動時と同じですが、倍率を掛ける処理が必要となります。始点を(0,0)と考えて、各座標値は、始点を基準とした相対座標であると考えて、そのX方向長さ・Y方向長さに対して倍率を掛けます。円・円弧の場合には半径にも倍率を掛け、文字の場合には文字高・文字幅・文字間隔にも倍率を掛けます(※CADによっては文字高・文字幅・文字間隔の大きさをある設定のまま保持させたいという意味で、倍率を掛けないようにしている場合もあります)。
各要素のX座標・Y座標(PX,PYとする)は、始点を原点と考えた相対座標と考え、
各要素の相対X座標 AX =( PX − x1 )
各要素の相対Y座標 AY =( PY − y1 )
それに対して倍率を掛けますので、倍率を N とすると、
各要素の相対X座標 AX =( PX − x1 )× N
各要素の相対Y座標 AY =( PY − y1 )× N
のようになります。
これは、始点(x1,y1)を(0,0)と考えた場合ですので、この(x1,y1)の場所が(x2,y2)にすり変わる事になりますから
各要素のX座標 PX' =( PX − x1 )× N + x2
各要素のY座標 PY' =( PY − y1 )× N + y2
となります。
例えば、平行複写・平行移動は、N=1と同じ事ですから、
各要素のX座標 PX' =( PX − x1 )× 1 + x2
= PX − x1 + x2
= PX +( x2 − x1 )
各要素のY座標 PY' =( PY − y1 )× 1 + y2
= PY − y1 + y2
= PY +( y2 − y1 )
となりますので青色の部分は移動量に相当しますから、理解出来ると思われます。
今回の追加
・1つの数値を入力するフォーム Fm1NumInp(Unit1NumInp.pas)を追加します。
・編集メニューを追加します。
[複写(C)]
> [数値入力 (&N)]
> [マウス指定(&M)]
> [拡大縮小 (&S)]
[移動(M)]
> [数値入力 (&N)]
> [マウス指定(&M)]
> [拡大縮小 (&S)]
(ショートカットキー(ShortCutプロパティ)やアクセスキーはメニュー編集で自由に出来ますので好きなように指定して下さい。)
・EntSelectCopy2()、EntSelectMove2()を追加します。 |
それではここまでのプログラムです。
【サンプルプログラムのソース】
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
▲PREV
▼NEXT
|