다음을 통해 공유


D2D1_COMBINE_MODE 열거형(d2d1.h)

두 기하 도형을 결합하는 데 사용할 수 있는 여러 메서드를 지정합니다.

Syntax

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
두 영역의 합을 사용하여 두 영역을 결합합니다. 두 개의 기하 도형 인 AB가 지정되면 결과 기하 도형은 geometry A + geometry B입니다.
D2D1_COMBINE_MODE_INTERSECT
값: 1
두 영역의 교차 부분을 사용하여 두 영역을 결합합니다. 새 영역은 두 기하 도형 간에 겹쳐지는 영역으로 구성으로 구성됩니다.
D2D1_COMBINE_MODE_XOR
값: 2
첫 번째 영역에만 있고 두 번째 영역에는 없는 영역과 두 번째 영역에만 있고 첫 번째 영역에는 없는 영역을 사용하여 두 영역을 결합합니다. 두 기하 도형 인 AB가 지정되면 새 영역은 (A-B) + (B-A)로 구성됩니다.
D2D1_COMBINE_MODE_EXCLUDE
값: 3
두 번째 영역이 첫 번째 영역에서 제외됩니다. 두 개의 기하 도형 인 AB가 지정되면 기하 도형 B 의 영역이 기하 도형 A 영역에서 제거되어 A-B인 영역을 생성합니다.
D2D1_COMBINE_MODE_FORCE_DWORD
값: 0xffffffff

설명

다음 그림에서는 다른 기 하 도형 결합 모드를 보여 줍니다.

다양한 기하 도형 결합 모드 이후의 두 기하 도형과 결과 셰이프 그림

예제

다음 코드는 서로 다른 각 결합 모드를 사용하여 두 개의 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용 플랫폼 업데이트가 포함된 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 R2, Windows Server 2008 SP2 및 Windows Server 2008용 플랫폼 업데이트 [데스크톱 앱 | UWP 앱]
머리글 d2d1.h