다음을 통해 공유


D2D1_FILL_MODE 열거형(d2d1.h)

기하 도형 또는 그림의 교차 영역을 결합하여 복합 기하 도형의 영역을 형성하는 방법을 지정합니다.

Syntax

typedef enum D2D1_FILL_MODE {
  D2D1_FILL_MODE_ALTERNATE = 0,
  D2D1_FILL_MODE_WINDING = 1,
  D2D1_FILL_MODE_FORCE_DWORD = 0xffffffff
} ;

상수

 
D2D1_FILL_MODE_ALTERNATE
값: 0
어떤 방향으로든 해당 지점에서 무한대로 광선을 그린 다음 광선이 교차하는 지정된 셰이프 내의 경로 세그먼트 수를 계산하여 점이 채우기 영역에 있는지 여부를 결정합니다. 이 숫자가 홀수이면 점이 채우기 영역에 있습니다. 짝수이면 점이 채우기 영역 외부에 있습니다.
D2D1_FILL_MODE_WINDING
값: 1
어떤 방향으로든 해당 지점에서 무한대로 광선을 그린 다음 셰이프 세그먼트가 광선을 교차하는 위치를 검사하여 점이 경로의 채우기 영역에 있는지 여부를 결정합니다. 0의 수부터 세그먼트가 왼쪽에서 오른쪽으로 광선을 교차할 때마다 하나씩 추가하고, 왼쪽과 오른쪽이 광선의 관점에서 보이는 한 경로 세그먼트가 오른쪽에서 왼쪽으로 광선을 교차할 때마다 하나씩 뺍니다. 교차를 계산한 후 결과가 0이면 점이 경로 외부에 있습니다. 그렇지 않으면 경로 내에 있습니다.
D2D1_FILL_MODE_FORCE_DWORD
값: 0xffffffff

설명

CreateGeometryGroup 메서드를 사용하여 ID2D1GeometryGroup을 만들거나 ID2D1SimplifiedGeometrySink::SetFillMode 메서드를 사용하여 ID2D1SimplifiedGeometrySink의 채우기 모드를 수정할 때는 D2D1_FILL_MODE열거형을 사용합니다.

Direct2D는 이 열거형에서 지정한 두 가지 채우기 모드 중 하나인 D2D1_FILL_MODE_ALTERNATE (대체) 또는 D2D1_FILL_MODE_WINDING (권딩) 중 하나를 사용하여 경로의 내부를 채웁니다. 모드는 닫힌 도형의 내부를 채우는 방법을 결정하므로 모든 셰이프는 채워질 때 닫힌 것으로 처리됩니다. 셰이프의 세그먼트에 간격이 있는 경우 가상의 선을 그려 닫습니다.

구불구불한 채우기 모드와 대체 채우기 모드의 차이점을 확인하려면 다음 그림과 같이 가운데와 반경이 같은 4개의 원을 가지고 있다고 가정합니다. 첫 번째 반경은 25, 두 번째 50, 세 번째 75 및 네 번째 100입니다.

반지름 값이 다른 4개의 동심원 그림 다음 그림에서는 대체 채우기 모드를 사용하여 채워진 도형을 보여 줍니다. 가운데와 세 번째 링이 채워지지 않습니다. 이 두 링 중 하나의 지점에서 그려진 광선이 짝수의 세그먼트를 통과하기 때문입니다. 두 번째와 네 번째 고리가 채워진 동심원 그림 다음 그림에서는 이 프로세스를 설명합니다. 두 번째 및 세 번째 링에 점이 있고 각 지점에서 두 개의 임의 광선이 확장되는 동심원 그림 다음 그림에서는 구불구불한 채우기 모드를 지정할 때 동일한 셰이프가 채워지는 방법을 보여 줍니다. 모든 링이 채워진 동심원 그림 모든 링이 채워집니다. 이는 모든 세그먼트가 동일한 방향으로 실행되므로 어떤 지점에서 그려진 광선이 하나 이상의 세그먼트를 교차하고 교차의 합계가 0과 같지 않기 때문입니다.

다음 그림에서는 이 프로세스를 설명합니다. 빨간색 화살표는 세그먼트가 그려지는 방향을 나타내고 검은색 화살표는 가장 안쪽 고리의 한 지점에서 실행되는 임의의 광선을 나타냅니다. 광선이 교차하는 각 세그먼트에 대해 값 0부터 시계 방향으로 교차할 때마다 하나의 값이 추가됩니다. 개수가 0이 아니므로 모든 점이 이 그림의 채우기 영역에 있습니다.

네 개의 고리를 모두 교차하는 첫 번째 링 내에서 광선이 있는 동심원 그림

예제

다음 코드 예제에서는 앞의 그림에 사용된 기하 도형 그룹을 만듭니다. 이 코드는 먼저 기하 도형 개체의 배열을 선언합니다. 이러한 개체는 25, 50, 75 및 100의 반지름이 있는 4개의 동심원입니다. 그런 다음 ID2D1Factory 개체에서 CreateGeometryGroup을 호출하여 D2D1_FILL_MODE_ALTERNATE, 기하 도형 그룹에 추가할 기하 도형 개체의 배열 및 이 배열의 요소 수를 전달합니다.

HRESULT DemoApp::CreateGeometryResources()
{
    HRESULT hr;

    const D2D1_ELLIPSE ellipse1 = D2D1::Ellipse(
        D2D1::Point2F(105.0f, 105.0f),
        25.0f,
        25.0f
        );

    hr = m_pD2DFactory->CreateEllipseGeometry(
        ellipse1,
        &m_pEllipseGeometry1
        );

    if (SUCCEEDED(hr))
    {
        const D2D1_ELLIPSE ellipse2 = D2D1::Ellipse(
            D2D1::Point2F(105.0f, 105.0f),
            50.0f,
            50.0f
            );

        hr = m_pD2DFactory->CreateEllipseGeometry(
            ellipse2,
            &m_pEllipseGeometry2
            );
    }

    if (SUCCEEDED(hr))
    {

        const D2D1_ELLIPSE ellipse3 = D2D1::Ellipse(
            D2D1::Point2F(105.0f, 105.0f),
            75.0f,
            75.0f
            );

        hr = m_pD2DFactory->CreateEllipseGeometry(
            ellipse3,
            &m_pEllipseGeometry3
            );
    }

    if (SUCCEEDED(hr))
    {
        const D2D1_ELLIPSE ellipse4 = D2D1::Ellipse(
            D2D1::Point2F(105.0f, 105.0f),
            100.0f,
            100.0f
            );

        hr = m_pD2DFactory->CreateEllipseGeometry(
            ellipse4,
            &m_pEllipseGeometry4
            );
    }

    if (SUCCEEDED(hr))
    {
        ID2D1Geometry *ppGeometries[] =
        {
            m_pEllipseGeometry1,
            m_pEllipseGeometry2,
            m_pEllipseGeometry3,
            m_pEllipseGeometry4
        };

        hr = m_pD2DFactory->CreateGeometryGroup(
            D2D1_FILL_MODE_ALTERNATE,
            ppGeometries,
            ARRAYSIZE(ppGeometries),
            &m_pGeoGroup_AlternateFill
            );

        if (SUCCEEDED(hr))
        {
            hr = m_pD2DFactory->CreateGeometryGroup(
                D2D1_FILL_MODE_WINDING,
                ppGeometries,
                ARRAYSIZE(ppGeometries),
                &m_pGeoGroup_WindingFill
                );
        }

    }
    return hr;
}

요구 사항

   
지원되는 최소 클라이언트 Windows 7, Windows Vista SP2 및 Windows Vista용 플랫폼 업데이트 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 R2, Windows Server 2008 SP2 및 Windows Server 2008용 플랫폼 업데이트 [데스크톱 앱 | UWP 앱]
머리글 d2d1.h

추가 정보

기하 도형 개요

ID2D1Factory::CreateGeometryGroup