Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para transformar uma geometria, você pode aplicar a transformação ao destino de renderização chamando SetTransform ou aplicar a transformação à geometria chamando CreateTransformedGeometry. Embora as duas abordagens transformem uma geometria, elas têm algumas diferenças fundamentais. CreateTransformedGeometry afeta o preenchimento, mas não afeta a largura do traço. Além disso, CreateTransformedGeometry transforma apenas a geometria sem afetar outras formas no destino de renderização, enquanto SetTransform aplica a transformação a todas as formas no destino de renderização.
Este tópico prático descreve como transformar uma geometria chamando CreateTransformedGeometry.
Para transformar uma geometria
- Declare uma variável ID2D1TransformedGeometry.
- Chame o método CreateTransformedGeometry para criar uma geometria transformada.
O código a seguir mostra como criar uma ampulheta, transformar a ampulheta e desenhar as ampulhetas original e resultante.
// 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
);
}