ID2D1Factory::CreateTransformedGeometry(ID2D1Geometry*,constD2D1_MATRIX_3X2_F*,ID2D1TransformedGeometry**) (d2d1.h)
Trasforma la geometria specificata e archivia il risultato come oggetto ID2D1TransformedGeometry .
Sintassi
HRESULT CreateTransformedGeometry(
ID2D1Geometry *sourceGeometry,
const D2D1_MATRIX_3X2_F *transform,
ID2D1TransformedGeometry **transformedGeometry
);
Parametri
sourceGeometry
Tipo: [in] ID2D1Geometry*
Geometria da trasformare.
transform
Tipo: [in] const D2D1_MATRIX_3X2_F*
Trasformazione da applicare.
transformedGeometry
Tipo: [out] ID2D1TransformedGeometry**
Quando questo metodo restituisce, contiene l'indirizzo del puntatore al nuovo oggetto geometry trasformato. La geometria trasformata archivia il risultato della trasformazione di sourceGeometry tramite trasformazione.
Valore restituito
Tipo: HRESULT
Se questo metodo ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .
Commenti
Analogamente ad altre risorse, una geometria trasformata eredita lo spazio delle risorse e i criteri di threading della factory che l'hanno creata. Questo oggetto non è modificabile.
Quando si occupa di una geometria trasformata con il metodo DrawGeometry , la larghezza del tratto non è influenzata dalla trasformazione applicata alla geometria. La larghezza del tratto è interessata solo dalla trasformazione mondiale.
Esempio
L'esempio seguente crea un ID2D1RectangleGeometry, quindi lo disegna senza trasformarlo. Produce l'output illustrato nella figura seguente.
![Illustrazione di un rettangolo](images/transformedgeometry2_step1.png)
hr = m_pD2DFactory->CreateRectangleGeometry(
D2D1::RectF(150.f, 150.f, 200.f, 200.f),
&m_pRectangleGeometry
);
Nell'esempio successivo viene usata la destinazione di rendering per ridimensionare la geometria in base a un fattore 3, quindi la disegna. La figura seguente mostra il risultato del disegno del rettangolo senza la trasformazione e con la trasformazione; si noti che il tratto è più spesso dopo la trasformazione, anche se lo spessore del tratto è 1.
![Figura di un rettangolo più piccolo all'interno di un rettangolo più grande con un tratto più spesso](images/transformedgeometry2_step2.png)
// Transform the render target, then draw the rectangle geometry again.
m_pRenderTarget->SetTransform(
D2D1::Matrix3x2F::Scale(
D2D1::SizeF(3.f, 3.f),
D2D1::Point2F(175.f, 175.f))
);
m_pRenderTarget->DrawGeometry(m_pRectangleGeometry, m_pBlackBrush, 1);
Nell'esempio successivo viene usato il metodo CreateTransformedGeometry per ridimensionare la geometria in base a un fattore 3, quindi lo disegna. Produce l'output illustrato nella figura seguente. Si noti che, anche se il rettangolo è più grande, il suo tratto non è aumentato.
![Illustrazione di un rettangolo più piccolo all'interno di un rettangolo più grande con lo stesso tratto](images/transformedgeometry2_step3.png)
// Create a geometry that is a scaled version
// of m_pRectangleGeometry.
// The new geometry is scaled by a factory of 3
// from the center of the geometry, (35, 35).
hr = m_pD2DFactory->CreateTransformedGeometry(
m_pRectangleGeometry,
D2D1::Matrix3x2F::Scale(
D2D1::SizeF(3.f, 3.f),
D2D1::Point2F(175.f, 175.f)),
&m_pTransformedGeometry
);
// Replace the previous render target transform.
m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
// Draw the transformed geometry.
m_pRenderTarget->DrawGeometry(m_pTransformedGeometry, m_pBlackBrush, 1);
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Intestazione | d2d1.h |
Libreria | D2d1.lib |
DLL | D2d1.dll |