座標変換の概略

座標系には以下の3種類がある。

デバイス座標
  
ページ座標
  
ワールド座標
左上隅が原点。
画素単位。
ページ変換 左上隅が原点。
単位はmmなどに
変更可能。
ワールド変換 自由に設定できる。
描画メソッドでは
この座標系の座標
値を使う。

既定値は,ページ座標もワールド座標もデバイス座標と同じになっている。

描画メソッドは,ワールド座標を使っている。
実際に描画されるときに,ワールド変換→ページ変換が行われ,最終的にはデバイス座標に直される。

(注意)コントロールのTop, Left, Width, Height などのプロパティは,デバイス座標(画素単位)で与える。


ページ座標

ページ座標を指定するプロパティには,PageUnitPageScaleがある。

PageUnit ページ座標で使用する長さの単位をGraphicsUnit列挙体で指定する。
Display 1/75 インチを長さの単位に指定
Document ドキュメント単位 (1/300 インチ) を長さの単位に指定
Inch インチを長さの単位に指定
Millimeter ミリメートルを長さの単位に指定
Pixel デバイス ピクセルを長さの単位に指定
Point プリンタ ポイント (1/72 インチ) を長さの単位に指定
World ワールド単位を長さの単位に指定
※インチやmmは,印刷したときの長さで定義されている。
PageScale ページ座標で使用する長さの単位の倍率を単精度実数で指定する。
例えば,PageUnit=GraphicsUnit.Millimeter で,PageScale=2 のときは,長さの単位が2mmになる。

ワールド座標

ワールド座標を設定するメソッドには,以下のものがある。

void ScaleTransform(float sx, float sy) 倍率変換
void RotateTransform(float fAngle) 回転変換
void TranslateTransform(float dx, float dy) 平行移動

これらの変換の組み合わせは,アフィン変換と呼ばれる。
これらの変換を複数行うときは,その順序により結果が異なるので注意が必要。

なお,すべての変換をクリアするために,
     void ResetTransform()
というメソッドが用意されている。変換の定義を開始するときにも,念のために実行しておくとよい。

スケール変換において,y方向の倍率を負の数にすると,y軸が上向きにとられることになる。


例1 最初に平行移動TranslateTransform(100,100)を行い,次にスケール変換ScaleTransform(1,-1)を行った場合。


例2 最初にスケール変換ScaleTransform(1,-1)を行い,次に平行移動TranslateTransform(100,100)を行った場合。