Преобразование геометрии
Чтобы преобразовать геометрию, можно либо применить преобразование к целевому объекту отрисовки, вызвав 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
);
}