Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para transformar una geometría, puede aplicar la transformación al destino de representación llamando a SetTransform o aplicando la transformación a la geometría llamando a CreateTransformedGeometry. Aunque ambos enfoques transforman una geometría, tienen algunas diferencias fundamentales. CreateTransformedGeometry afecta al relleno, pero no afecta al ancho del trazo. Además, CreateTransformedGeometry transforma la geometría sola sin afectar a otras formas en el destino de representación, mientras que SetTransform aplica la transformación a todas las formas del destino de representación.
En este tema de procedimientos se describe cómo transformar una geometría mediante una llamada a CreateTransformedGeometry.
Para transformar una geometría
- Declare una variable ID2D1TransformedGeometry .
- Llame al método CreateTransformedGeometry para crear una geometría transformada.
En el código siguiente se muestra cómo crear un reloj de arena, cómo transformarlo y cómo dibujar el reloj de arena original y 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
);
}