Geometriyi Dönüştürme
Geometriyi dönüştürmek için, SetTransform çağırarak dönüştürmeyi işleme hedefine uygulayabilir veya CreateTransformedGeometryçağırarak dönüştürmeyi geometriye uygulayabilirsiniz. Her iki yaklaşım da geometriyi dönüştürse de bazı temel farklılıkları vardır. CreateTransformedGeometry dolguyu etkiler, ancak çizgi kalınlığını etkilemez. Ayrıca createTransformedGeometry işleme hedefinde diğer şekilleri etkilemeden geometriyi tek başına dönüştürürken, SetTransform dönüştürmeyi işleme hedefinde tüm şekillere uygular.
Bu nasıl yapılır konusu, CreateTransformedGeometryçağırarak geometrinin nasıl dönüştürüldüğünü açıklar.
Geometri dönüştürmek için
- bir ID2D1TransformedGeometry değişkeni bildirin.
- Dönüştürülmüş geometri oluşturmak için createTransformedGeometryyönteminiçağırın.
Aşağıdaki kodda bir saat camı oluşturma, saat camını dönüştürme ve orijinal ve sonuçta elde edilen saat gözlüklerini çizme işlemleri gösterilmektedir.
// 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
);
}