기하 도형을 변환하는 방법
기하 도형을 변환하려면 SetTransform 을 호출하여 렌더링 대상에 변환을 적용하거나 CreateTransformedGeometry를 호출하여 변형을 기하 도형에 적용할 수 있습니다. 두 방법 모두 기하 도형을 변환하지만 몇 가지 근본적인 차이점이 있습니다. CreateTransformedGeometry 는 채우기에 영향을 주지만 스트로크 너비에는 영향을 주지 않습니다. 또한 CreateTransformedGeometry 는 렌더링 대상의 다른 셰이프에 영향을 주지 않고 기하 도형만 변환하는 반면 SetTransform 은 렌더링 대상의 모든 셰이프에 변환을 적용합니다.
이 방법 항목에서는 CreateTransformedGeometry를 호출하여 기하 도형을 변환하는 방법을 설명합니다.
기하 도형을 변환하려면
- ID2D1TransformedGeometry 변수를 선언합니다.
- 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
);
}