다음을 통해 공유


기하 도형을 변환하는 방법

기하 도형을 변환하려면 SetTransform 호출하여 렌더링 대상에 변환을 적용하거나 CreateTransformedGeometry호출하여 변형을 기하 도형에 적용할 수 있습니다. 두 방법 모두 기하 도형을 변환하지만 몇 가지 기본적인 차이점이 있습니다. CreateTransformedGeometry 채우기에 영향을 주지만 스트로크 너비에는 영향을 주지 않습니다. 또한 CreateTransformedGeometry 렌더링 대상의 다른 셰이프에 영향을 주지 않고 기하 도형만 변환하는 반면 SetTransform 렌더링 대상의 모든 셰이프에 변환을 적용합니다.

이 방법 항목에서는 CreateTransformedGeometry호출하여 기하 도형을 변환하는 방법을 설명합니다.

기하 도형 변환하려면

  1. ID2D1TransformedGeometry 변수를 선언합니다.
  2. CreateTransformedGeometry 메서드를 호출하여 변환된 기하 도형을 만듭니다.

다음 코드에서는 시간 유리를 만들고, 시간 유리를 변환하고, 원본 및 결과 시간 안경을 그리는 방법을 보여 줍니다.

// Create a path geometry.
if (SUCCEEDED(hr))
{
    hr = m_pD2DFactory->CreatePathGeometry(&m_pPathGeometry);

    if (SUCCEEDED(hr))
    {
        // Write to the path geometry using the geometry sink.
        hr = m_pPathGeometry->Open(&pSink);

        if (SUCCEEDED(hr))
        {
            pSink->BeginFigure(
                D2D1::Point2F(0, 0),
                D2D1_FIGURE_BEGIN_FILLED
                );

            pSink->AddLine(D2D1::Point2F(200, 0));

            pSink->AddBezier(
                D2D1::BezierSegment(
                    D2D1::Point2F(150, 50),
                    D2D1::Point2F(150, 150),
                    D2D1::Point2F(200, 200))
                );

            pSink->AddLine(D2D1::Point2F(0, 200));

            pSink->AddBezier(
                D2D1::BezierSegment(
                    D2D1::Point2F(50, 150),
                    D2D1::Point2F(50, 50),
                    D2D1::Point2F(0, 0))
                );

            pSink->EndFigure(D2D1_FIGURE_END_CLOSED);

            hr = pSink->Close();
        }
        SafeRelease(&pSink);
    }
}

if (SUCCEEDED(hr))
{
    // Create a transformed geometry which is tilted at an angle to the previous geometry
    hr = m_pD2DFactory->CreateTransformedGeometry(
        m_pPathGeometry,
        D2D1::Matrix3x2F::Rotation(
            45.f,
            D2D1::Point2F(100, 100)),
        &m_pTransformedGeometry
        );
}