Een geometrie transformeren
Als u een geometrie wilt transformeren, kunt u de transformatie toepassen op het renderdoel door SetTransform- aan te roepen of de transformatie toe te passen op de geometrie door CreateTransformedGeometryaan te roepen. Hoewel beide benaderingen een geometrie transformeren, hebben ze enkele fundamentele verschillen. Van invloed is CreateTransformedGeometry op de opvulling, maar niet op de lijnbreedte. Verder transformeert CreateTransformedGeometry alleen de geometrie zonder dat dit invloed heeft op andere vormen op de renderdoel, terwijl SetTransform de transformatie toepast op alle vormen op de renderdoel.
In dit instructieonderwerp wordt beschreven hoe u een geometrie transformeert door CreateTransformedGeometryaan te roepen.
Een geometrie transformeren
- Declareer een ID2D1TransformedGeometry variabele.
- Roep de methode CreateTransformedGeometry aan om een getransformeerde geometrie te maken.
In de volgende code ziet u hoe u een zandloper maakt, de zandloper transformeert en de originele en resulterende zandlopers tekent.
// 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
);
}