D2D1_COMBINE_MODE列挙 (d2d1.h)

2 つのジオメトリを結合できるさまざまな方法を指定します。

構文

typedef enum D2D1_COMBINE_MODE {
  D2D1_COMBINE_MODE_UNION = 0,
  D2D1_COMBINE_MODE_INTERSECT = 1,
  D2D1_COMBINE_MODE_XOR = 2,
  D2D1_COMBINE_MODE_EXCLUDE = 3,
  D2D1_COMBINE_MODE_FORCE_DWORD = 0xffffffff
} ;

定数

 
D2D1_COMBINE_MODE_UNION
値: 0
2 つの領域が両方の和集合を使用して結合されます。 AB の 2 つのジオメトリを指定すると、結果のジオメトリはジオメトリ A + ジオメトリ B になります。
D2D1_COMBINE_MODE_INTERSECT
値: 1
2 つの領域が積集合を使用して結合されます。 新しい領域は、2 つのジオメトリの重なっている領域で構成されます。
D2D1_COMBINE_MODE_XOR
値: 2
2 つの領域が、1 番目の領域だけに存在する範囲と、2 番目の領域だけに存在する範囲の和として結合されます。 AB の 2 つのジオメトリを指定すると、新しい領域は (A-B) + (B-A) で構成されます。
D2D1_COMBINE_MODE_EXCLUDE
値: 3
2 番目の領域を 1 番目の領域から除外します。 AB の 2 つのジオメトリを指定すると、ジオメトリ B の領域がジオメトリ A の領域から削除され、A-B である領域が生成されます。
D2D1_COMBINE_MODE_FORCE_DWORD
値: 0xffffffff

解説

次の図は、さまざまなジオメトリ結合モードを示しています。

さまざまなジオメトリ結合モードの後の 2 つのジオメトリと結果の図形の図

次のコードでは、それぞれ異なる結合モードを使用して、 2 つの ID2D1EllipseGeometry オブジェクトを 結合します。

HRESULT DemoApp::CreateGeometryResources()
{
    HRESULT hr = S_OK;
    ID2D1GeometrySink *pGeometrySink = NULL;

    // Create the first ellipse geometry to merge.
    const D2D1_ELLIPSE circle1 = D2D1::Ellipse(
        D2D1::Point2F(75.0f, 75.0f),
        50.0f,
        50.0f
        );

    hr = m_pD2DFactory->CreateEllipseGeometry(
        circle1,
        &m_pCircleGeometry1
        );

    if (SUCCEEDED(hr))
    {
        // Create the second ellipse geometry to merge.
        const D2D1_ELLIPSE circle2 = D2D1::Ellipse(
            D2D1::Point2F(125.0f, 75.0f),
            50.0f,
            50.0f
            );

        hr = m_pD2DFactory->CreateEllipseGeometry(circle2, &m_pCircleGeometry2);
    }


    if (SUCCEEDED(hr))
    {
        //
        // Use D2D1_COMBINE_MODE_UNION to combine the geometries.
        //
        hr = m_pD2DFactory->CreatePathGeometry(&m_pPathGeometryUnion);

        if (SUCCEEDED(hr))
        {
            hr = m_pPathGeometryUnion->Open(&pGeometrySink);

            if (SUCCEEDED(hr))
            {
                hr = m_pCircleGeometry1->CombineWithGeometry(
                    m_pCircleGeometry2,
                    D2D1_COMBINE_MODE_UNION,
                    NULL,
                    NULL,
                    pGeometrySink
                    );
            }

            if (SUCCEEDED(hr))
            {
                hr = pGeometrySink->Close();
            }

            SafeRelease(&pGeometrySink);
        }
    }

    if (SUCCEEDED(hr))
    {
        //
        // Use D2D1_COMBINE_MODE_INTERSECT to combine the geometries.
        //
        hr = m_pD2DFactory->CreatePathGeometry(&m_pPathGeometryIntersect);

        if (SUCCEEDED(hr))
        {
            hr = m_pPathGeometryIntersect->Open(&pGeometrySink);

            if (SUCCEEDED(hr))
            {
                hr = m_pCircleGeometry1->CombineWithGeometry(
                    m_pCircleGeometry2,
                    D2D1_COMBINE_MODE_INTERSECT,
                    NULL,
                    NULL,
                    pGeometrySink
                    );
            }

            if (SUCCEEDED(hr))
            {
                hr = pGeometrySink->Close();
            }

            SafeRelease(&pGeometrySink);
        }
    }

    if (SUCCEEDED(hr))
    {
        //
        // Use D2D1_COMBINE_MODE_XOR to combine the geometries.
        //
        hr = m_pD2DFactory->CreatePathGeometry(&m_pPathGeometryXOR);

        if (SUCCEEDED(hr))
        {
            hr = m_pPathGeometryXOR->Open(&pGeometrySink);

            if (SUCCEEDED(hr))
            {
                hr = m_pCircleGeometry1->CombineWithGeometry(
                    m_pCircleGeometry2,
                    D2D1_COMBINE_MODE_XOR,
                    NULL,
                    NULL,
                    pGeometrySink
                    );
            }

            if (SUCCEEDED(hr))
            {
                hr = pGeometrySink->Close();
            }

            SafeRelease(&pGeometrySink);
        }
    }

    if (SUCCEEDED(hr))
    {
        //
        // Use D2D1_COMBINE_MODE_EXCLUDE to combine the geometries.
        //
        hr = m_pD2DFactory->CreatePathGeometry(&m_pPathGeometryExclude);

        if (SUCCEEDED(hr))
        {
            hr = m_pPathGeometryExclude->Open(&pGeometrySink);

            if (SUCCEEDED(hr))
            {
                hr = m_pCircleGeometry1->CombineWithGeometry(
                    m_pCircleGeometry2,
                    D2D1_COMBINE_MODE_EXCLUDE,
                    NULL,
                    NULL,
                    pGeometrySink
                    );
            }

            if (SUCCEEDED(hr))
            {
                hr = pGeometrySink->Close();
            }

            SafeRelease(&pGeometrySink);
        }
    }

    return hr;
}

要件

   
サポートされている最小のクライアント Windows 7、Windows Vista SP2 および Windows Vista 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 R2、Windows Server 2008 SP2 および Windows Server 2008 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
Header d2d1.h