Bagikan melalui


Cara Mengubah Geometri

Untuk mengubah geometri, Anda dapat menerapkan transformasi ke target render dengan memanggil SetTransform atau menerapkan transformasi ke geometri dengan memanggil CreateTransformedGeometry. Meskipun kedua pendekatan mengubah geometri, mereka memiliki beberapa perbedaan mendasar. CreateTransformedGeometry memengaruhi isian, tetapi tidak memengaruhi lebar goresan. Selanjutnya, CreateTransformedGeometry mengubah geometri saja tanpa memengaruhi bentuk lain pada target render, sedangkan SetTransform menerapkan transformasi ke semua bentuk pada target render.

Topik cara penggunaan ini menjelaskan cara mengubah geometri dengan memanggil CreateTransformedGeometry.

Untuk mengubah geometri

  1. Deklarasikan variabel ID2D1TransformedGeometry .
  2. Panggil metode CreateTransformedGeometry untuk membuat geometri yang diubah.

Kode berikut menunjukkan cara membuat kaca jam, mengubah kaca jam, dan menggambar kacamata jam asli dan yang dihasilkan.

// 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
        );
}