ID2D1DeviceContext1
COM公式ドキュメント
ジオメトリ実体化オブジェクトの作成と描画を可能にします。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
後で描画できる、ジオメトリの塗りつぶしのデバイス依存表現を作成します。
| geometry | ID2D1Geometry* | in | 実体化するジオメトリ。 |
| flatteningTolerance | FLOAT | in | ベジエ曲線を線分に変換する際に使用する平坦化許容誤差。このパラメーターはジオメトリの座標と同じ単位を使用します。 |
| geometryRealization | ID2D1GeometryRealization** | out | このメソッドが返るとき、新しいジオメトリ実体化オブジェクトへのポインターのアドレスが格納されます。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | Description |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効な値がメソッドに渡されました。 |
解説(Remarks)
このメソッドは ID2D1DeviceContext1::DrawGeometryRealization と組み合わせて使用します。適切な平坦化許容誤差を求めるには、D2D1::ComputeFlatteningTolerance ヘルパー API を使用できます。
指定したストロークスタイルが D2D1_STROKE_TRANSFORM_TYPE_NORMAL 以外のストローク変換タイプを指定している場合、ストロークは恒等変換と 96 DPI を前提として実体化されます。
後で描画できる、ジオメトリのストロークのデバイス依存表現を作成します。
| geometry | ID2D1Geometry* | in | 実体化するジオメトリ。 |
| flatteningTolerance | FLOAT | in | ベジエ曲線を線分に変換する際に使用する平坦化許容誤差。このパラメーターはジオメトリの座標と同じ単位を使用します。 |
| strokeWidth | FLOAT | in | ストロークの幅。このパラメーターはジオメトリの座標と同じ単位を使用します。 |
| strokeStyle | ID2D1StrokeStyle* | inoptional | ストロークスタイル(省略可能)。 |
| geometryRealization | ID2D1GeometryRealization** | out | このメソッドが返るとき、新しいジオメトリ実体化オブジェクトへのポインターのアドレスが格納されます。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | Description |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効な値がメソッドに渡されました。 |
解説(Remarks)
このメソッドは ID2D1DeviceContext1::DrawGeometryRealization と組み合わせて使用します。適切な平坦化許容誤差を求めるには、D2D1::ComputeFlatteningTolerance ヘルパー API を使用できます。
指定したストロークスタイルが D2D1_STROKE_TRANSFORM_TYPE_NORMAL 以外のストローク変換タイプを指定している場合、ストロークは恒等変換と 96 DPI を前提として実体化されます。
指定したジオメトリ実体化を、指定したブラシでターゲットに描画します。
| geometryRealization | ID2D1GeometryRealization* | in | 描画するジオメトリ実体化。 |
| brush | ID2D1Brush* | in | 実体化を描画するために使用するブラシ。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| HRESULT | Description |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効な値がメソッドに渡されました。 |
解説(Remarks)
このメソッドは、現在設定されているすべての状態(変換、DPI、単位モード、ターゲットイメージ、クリップ、レイヤー)を反映します。 ただし、(変換または DPI によって)実効スケールが大きい状態で実体化を描画すると、ファセット化などのアーティファクトが現れることがあります。 呼び出し元は、これを補正するために D2D1_DEFAULT_FLATTENING_TOLERANCE または ComputeFlatteningTolerance のいずれかを使用して、適切な平坦化許容誤差で実体化を作成してください。
さらに、呼び出し元はジオメトリ実体化を作成する際に安全な描画境界に注意する必要があります。 ジオメトリが元の(変換前の)座標空間で X 方向または Y 方向のいずれかにおいて [-524,287, 524,287] DIP の範囲外に及ぶ場合、 実体化されるときにその境界にクリップされることがあります。このクリッピングは、実体化がその後に安全な描画境界内に収まるよう変換された場合でも表示されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID2D1DeviceContext1 "{D37F57E4-6908-459F-A199-E72F24F79987}"
#usecom global ID2D1DeviceContext1 IID_ID2D1DeviceContext1 "{}"
#comfunc global ID2D1DeviceContext1_CreateFilledGeometryRealization 92 sptr,float,sptr
#comfunc global ID2D1DeviceContext1_CreateStrokedGeometryRealization 93 sptr,float,float,sptr,sptr
#comfunc global ID2D1DeviceContext1_DrawGeometryRealization 94 sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。