Bagikan melalui


ID2D1Factory::CreateTransformedGeometry(ID2D1Geometry*,constD2D1_MATRIX_3X2_F*,ID2D1TransformedGeometry**) metode (d2d1.h)

Mengubah geometri yang ditentukan dan menyimpan hasilnya sebagai objek ID2D1TransformedGeometry .

Sintaks

HRESULT CreateTransformedGeometry(
  ID2D1Geometry            *sourceGeometry,
  const D2D1_MATRIX_3X2_F  *transform,
  ID2D1TransformedGeometry **transformedGeometry
);

Parameter

sourceGeometry

Jenis: [in] ID2D1Geometry*

Geometri yang akan diubah.

transform

Jenis: [in] const D2D1_MATRIX_3X2_F*

Transformasi yang akan diterapkan.

transformedGeometry

Jenis: [out] ID2D1TransformedGeometry**

Ketika metode ini kembali, berisi alamat penunjuk ke objek geometri baru yang diubah. Geometri yang diubah menyimpan hasil transformasi sourceGeometry berdasarkan transformasi.

Nilai kembali

Jenis: HRESULT

Jika metode ini berhasil, metode akan mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan.

Keterangan

Seperti sumber daya lainnya, geometri yang diubah mewarisi ruang sumber daya dan kebijakan utas pabrik yang membuatnya. Objek ini tidak dapat diubah.

Saat membelai geometri yang diubah dengan metode DrawGeometry , lebar goresan tidak terpengaruh oleh transformasi yang diterapkan pada geometri. Lebar goresan hanya dipengaruhi oleh transformasi dunia.

Contoh

Contoh berikut membuat ID2D1RectangleGeometry, lalu menggambarnya tanpa mengubahnya. Ini menghasilkan output yang ditunjukkan dalam ilustrasi berikut.

Ilustrasi persegi panjang
hr = m_pD2DFactory->CreateRectangleGeometry(
    D2D1::RectF(150.f, 150.f, 200.f, 200.f),
    &m_pRectangleGeometry
    );

Contoh berikutnya menggunakan target render untuk menskalakan geometri dengan faktor 3, lalu menggambarnya. Ilustrasi berikut menunjukkan hasil menggambar persegi tanpa transformasi dan dengan transformasi; memperhatikan bahwa stroke lebih tebal setelah transformasi, meskipun ketebalan stroke adalah 1.

Ilustrasi persegi panjang yang lebih kecil di dalam persegi panjang yang lebih besar dengan goresan yang lebih tebal
// 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);

Contoh berikutnya menggunakan metode CreateTransformedGeometry untuk menskalakan geometri dengan faktor 3, lalu menggambarnya. Ini menghasilkan output yang ditunjukkan dalam ilustrasi berikut. Perhatikan bahwa, meskipun persegi panjang lebih besar, stroke-nya belum meningkat.

Ilustrasi persegi panjang yang lebih kecil di dalam persegi panjang yang lebih besar dengan goresan yang sama
 // 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);

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header d2d1.h
Pustaka D2d1.lib
DLL D2d1.dll

Lihat juga

ID2D1Factory

ID2D1TransformedGeometry