如何轉換幾何
若要轉換幾何,您可以藉由呼叫 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
);
}