Comment transformer une géométrie
Pour transformer une géométrie, vous pouvez appliquer la transformation à la cible de rendu en appelant SetTransform ou appliquer la transformation à la géométrie en appelant CreateTransformedGeometry. Bien que les deux approches transforment une géométrie, elles présentent des différences fondamentales. CreateTransformedGeometry affecte le remplissage, mais n’affecte pas la largeur du trait. En outre, CreateTransformedGeometry transforme la géométrie seule sans affecter d’autres formes sur la cible de rendu, tandis que SetTransform applique la transformation à toutes les formes de la cible de rendu.
Cette rubrique pratique explique comment transformer une géométrie en appelant CreateTransformedGeometry.
Pour transformer une géométrie
- Déclarez une variable ID2D1TransformedGeometry .
- Appelez la méthode CreateTransformedGeometry pour créer une géométrie transformée.
Le code suivant montre comment créer un verre d’heure, transformer le verre d’heure et dessiner les verres d’heure originaux et résultants.
// 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
);
}