다음을 통해 공유


기하 도형을 변환하는 방법

기하 도형을 변환하려면 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
        );
}