マッピング モードと翻訳
マッピング モードについては、次の表で説明します。
マッピング モード | 説明 |
---|---|
MM_ANISOTROPIC | ページ・スペース内の各単位は、装置スペース内のアプリケーション指定の装置にマップされます。 軸は等しく拡大縮小される場合と同じでない場合があります (たとえば、ワールド空間に描画された円は、特定のデバイスで描画されると楕円のように見える場合があります)。 軸の向きは、アプリケーションによっても指定されます。 |
MM_HIENGLISH | ページ空間内の各ユニットは、デバイス空間で 0.001 インチにマップされます。 x の値は左から右に増加します。 y の値は下から上に増加します。 |
MM_HIMETRIC | ページ空間内の各単位は、デバイス空間で 0.01 ミリメートルにマップされます。 x の値は左から右に増加します。 y の値は下から上に増加します。 |
MM_ISOTROPIC | ページ・スペース内の各装置は、装置スペース内のアプリケーション定義装置にマップされます。 軸は常に均等にスケーリングされます。 軸の向きは、アプリケーションで指定できます。 |
MM_LOENGLISH | ページ空間内の各ユニットは、デバイス空間で 0.01 インチにマップされます。 x の値は左から右に増加します。 y の値は下から上に増加します。 |
MM_LOMETRIC | ページ空間内の各単位は、デバイス空間で 0.1 ミリメートルにマップされます。 x の値は左から右に増加します。 y の値は下から上に増加します。 |
Mm_text | ページ空間内の各単位は 1 ピクセルにマップされます。つまり、スケーリングはまったく実行されません。 変換が有効でない場合 (これが既定です)、MM_TEXT マッピング モードのページ領域は物理デバイス領域と同じです。 x の値は左から右に増加します。 y の値は上から下に増加します。 |
MM_TWIPS | ページ空間内の各ユニットは、プリンターのポイントの 20 分の 1 (1/1440 インチ) にマップされます。 x の値は左から右に増加します。 y の値は下から上に増加します。 |
マッピング モードを設定するには、 SetMapMode 関数を呼び出します。 GetMapMode 関数を呼び出して、DC の現在のマッピング モードを取得します。
ページ空間からデバイス空間への変換は、ウィンドウとビューポートによって指定されたポイントから計算された値で構成されます。 このコンテキストでは、ウィンドウはページ空間の論理座標系を参照し、ビューポートはデバイス空間のデバイス座標系を参照します。 ウィンドウとビューポートはそれぞれ、原点、水平 ("x") エクステント、垂直 ("y") エクステントで構成されます。 ウィンドウ パラメーターは論理座標です。デバイス座標 (ピクセル) のビューポート。 システムは、ウィンドウとビューポートの両方の原点とエクステントを結合して変換を作成します。 つまり、ウィンドウとビューポートはそれぞれ、ページ空間内のポイントをデバイス空間にマップするために使用される変換を定義するために必要な要素の半分を指定します。 したがって、次の図に示すように、システムはウィンドウの原点をビューポートの原点にマップし、ウィンドウエクステントをビューポートエクステントにマップします。
ウィンドウとビューポートのエクステントは、ページ空間とデバイス空間の変換で使用される比率または拡大縮小率を設定します。 6 つの定義済みマッピング モード (MM_HIENGLISH、MM_LOENGLISH、MM_HIMETRIC、MM_LOMETRIC、MM_TEXT、MM_TWIPS) の場合、 SetMapMode が呼び出されると、エクステントがシステムによって設定されます。 これらは変更できません。 他の 2 つのマッピング モード (MM_ISOTROPICとMM_ANISOTROPIC) では、エクステントを指定する必要があります。 これを行うには、 SetMapMode を呼び出して適切なモードを設定し、 SetWindowExtEx 関数と SetViewportExtEx 関数を呼び出してエクステントを指定します。 MM_ISOTROPIC マッピング モードでは、 SetViewportExtEx を呼び出す前に SetWindowExtEx を呼び出す必要があります。
ウィンドウとビューポートの原点は、ページ空間からデバイス空間への変換で使用される変換を確立します。 SetWindowOrgEx 関数と SetViewportOrgEx 関数を使用して、ウィンドウとビューポートの原点を設定します。 オリジンはエクステントに依存せず、アプリケーションは現在のマッピング モードに関係なく設定できます。 マッピング モードを変更しても、現在設定されている原点には影響しません (ただし、エクステントに影響を与える可能性があります)。 原点は、現在のマッピング モードが影響を与えない絶対単位で指定されます。 原点を変更するには、 OffsetWindowOrgEx 関数と OffsetViewportOrgEx 関数を 使用します。
次の数式は、ポイントをページ空間からデバイス空間に変換することに関係する数式を示しています。
Dx = ((Lx - WOx) * VEx / WEx) + VOx
次の変数が関係します。
Dx x value in device units
Lx x value in logical units (also known as page space units)
WOx window x origin
VOx viewport x origin
WEx window x-extent
VEx viewport x-extent
x を置き換える y と同じ数式を使用すると、点の y 成分が変換されます。
数式は、最初に座標の原点からポイントをオフセットします。 この値は原点に偏らなくなり、エクステントの比率によって変換先座標系にスケーリングされます。 最後に、スケーリングされた値は、変換先の原点によって最終的なマッピングにオフセットされます。
LPtoDP 関数と DPtoLP 関数は、それぞれ論理ポイントからデバイス ポイントへの変換、およびデバイス ポイントから論理ポイントへの変換に使用できます。