Cómo transformar una geometría
Para transformar una geometría, puede aplicar la transformación al destino de representación llamando a SetTransform o aplicando la transformación a la geometría llamando a CreateTransformedGeometry. Aunque ambos enfoques transforman una geometría, tienen algunas diferencias fundamentales. CreateTransformedGeometry afecta al relleno, pero no afecta al ancho del trazo. Además, CreateTransformedGeometry transforma la geometría por sí sola sin afectar a otras formas en el destino de representación, mientras que SetTransform aplica la transformación a todas las formas del destino de representación.
En este tema de procedimientos se describe cómo transformar una geometría mediante una llamada a CreateTransformedGeometry.
Para transformar una geometría
- Declare una variable ID2D1TransformedGeometry .
- Llame al método CreateTransformedGeometry para crear una geometría transformada.
En el código siguiente se muestra cómo crear un vaso de hora, transformar el vaso de hora y dibujar las gafas de hora originales y resultantes.
// 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
);
}