昨日の Tessellate 結果を図示したものです。
FillGeometry() 相当の場合
ポリゴン化の状態をわかりやすくするために flatteningTolerance = 4 で Tessellate
しています。

iFactory->CreateEllipseGeometry( D2D1::Ellipse( D2D1::Point2F( 0,0f, 0.0f ), 80.0f, 80.0f ), &iElli ); DummySink tsink; iElli->Tessellate( NULL, 4.0f, &tsink );
DrawGeometry() 相当の場合
strokeWidth = 4.0 で描画した場合のポリゴン分割です。
こちらも見やすいように flatteningTolerance = 4 で分割しています。

iFactory->CreatePathGeometry( &iPath ); ID2D1GeometrySink* isink; iPath->Open( &isink ); iElli->Widen( 10.0f, NULL, NULL, isink ); isink->Close(); DummySink tsink; iPath->Tessellate( NULL, 4.0f, &tsink );
デフォルトのままだとこれくらいの分割です。
水平方向の分割かつ Strip になっているのがわかります。

テストに使った DummySink の定義。
class DummySink : public ID2D1TessellationSink {
private:
static ID2D1PathGeometry* iPath;
static ID2D1GeometrySink* iSink;
public:
DummySink()
{
}
public:
STDMETHOD_( void, AddTriangles )( const D2D1_TRIANGLE* triangles, UINT trianglecount )
{
for( UINT i= 0 ; i< trianglecount ; i++, triangles++ ){
iSink->BeginFigure( triangles->point1, D2D1_FIGURE_BEGIN_FILLED );
iSink->AddLine( triangles->point2 );
iSink->AddLine( triangles->point3 );
iSink->EndFigure( D2D1_FIGURE_END_CLOSED );
}
}
STDMETHOD_(ULONG, AddRef )( THIS )
{
return 0;
}
STDMETHOD_(ULONG, Release )( THIS )
{
return 0;
}
STDMETHOD( QueryInterface )( THIS_ REFIID riid, void** obj )
{
return E_UNEXPECTED;
}
STDMETHOD( Close )()
{
return S_OK;
}
static void Create( ID2D1Factory* factory )
{
factory->CreatePathGeometry( &iPath );
iPath->Open( &iSink );
}
static void ClosePath()
{
if( iSink ){
iSink->Close();
iSink= NULL;
}
}
};
ID2D1PathGeometry* DummySink::iPath= NULL;
ID2D1GeometrySink* DummySink::iSink= NULL;
そのまま DrawGeometry() で path を描画すると、とがった角にトゲが生えたような
描画になることがあります。折れ線のつなぎ処理が入っているようです。

描画用に ID2D1StrokeStyle を作成しておくとトゲが無くなります。
関連エントリ
・Direct2D (6) Tessellate
・Direct2D (5) ID2D1Geometry を使う
・Direct2D (4) Direct2D の描画
・Direct2D (3) 互換性の検証と Vista で Direct2D
・Direct2D その(2) インターフェース
・Direct2D と Direct3D10.1 の下位互換