Bagikan melalui


enumerasi D2D1_FILL_MODE (d2d1.h)

Menentukan bagaimana area geometri atau angka yang bersinggungan digabungkan untuk membentuk area geometri komposit.

Sintaks

typedef enum D2D1_FILL_MODE {
  D2D1_FILL_MODE_ALTERNATE = 0,
  D2D1_FILL_MODE_WINDING = 1,
  D2D1_FILL_MODE_FORCE_DWORD = 0xffffffff
} ;

Konstanta

 
D2D1_FILL_MODE_ALTERNATE
Nilai: 0
Menentukan apakah titik berada di wilayah pengisian dengan menggambar sinar dari titik tersebut ke tak terbatas ke arah mana pun, lalu menghitung jumlah segmen jalur dalam bentuk tertentu yang disilangkan sinar. Jika angka ini ganjil, titiknya ada di wilayah pengisian; jika bahkan, titik berada di luar wilayah pengisian.
D2D1_FILL_MODE_WINDING
Nilai: 1
Menentukan apakah titik berada di wilayah pengisian jalur dengan menggambar sinar dari titik tersebut ke tak terbatas ke arah mana pun, dan kemudian memeriksa tempat-tempat di mana segmen bentuk melintasi sinar. Dimulai dengan hitungan nol, tambahkan satu setiap kali segmen melewati sinar dari kiri ke kanan dan mengurangi satu setiap kali segmen jalur melewati sinar dari kanan ke kiri, selama kiri dan kanan terlihat dari perspektif sinar. Setelah menghitung persimpangan, jika hasilnya nol, maka titik berada di luar jalur. Jika tidak, itu ada di dalam jalur.
D2D1_FILL_MODE_FORCE_DWORD
Nilai: 0xffffffff

Keterangan

Gunakan enumerasi D2D1_FILL_MODE saat membuat ID2D1GeometryGroup dengan metode CreateGeometryGroup , atau saat memodifikasi mode isian ID2D1SimplifiedGeometrySink dengan metode ID2D1SimplifiedGeometrySink::SetFillMode .

Direct2D mengisi interior jalur dengan menggunakan salah satu dari dua mode pengisian yang ditentukan oleh enumerasi ini: D2D1_FILL_MODE_ALTERNATE (alternatif) atau D2D1_FILL_MODE_WINDING (berliku). Karena mode menentukan cara mengisi interior bentuk tertutup, semua bentuk diperlakukan tertutup saat diisi. Jika ada celah dalam segmen dalam bentuk, gambar garis imajiner untuk menutupnya.

Untuk melihat perbedaan antara mode pengisian berliku dan alternatif, asumsikan bahwa Anda memiliki empat lingkaran dengan tengah yang sama dan radius yang berbeda, seperti yang ditunjukkan dalam ilustrasi berikut. Yang pertama memiliki radius 25, kedua 50, ketiga 75, dan keempat 100.

Ilustrasi empat lingkaran konsentris dengan nilai radius yang berbeda Ilustrasi berikut ini memperlihatkan bentuk yang diisi dengan menggunakan mode isian alternatif. Perhatikan bahwa cincin tengah dan ketiga tidak terisi. Ini karena sinar yang diambil dari titik mana pun di salah satu dari dua cincin tersebut melewati sejumlah segmen yang merata. Ilustrasi lingkaran konsentris dengan cincin kedua dan keempat terisi Ilustrasi berikut menjelaskan proses ini. Ilustrasi lingkaran konsentris dengan titik-titik di cincin kedua dan ketiga dan dua sinar arbitrer memanjang dari setiap titik Ilustrasi berikut menunjukkan bagaimana bentuk yang sama diisi saat mode pengisian berliku ditentukan. Ilustrasi lingkaran konsentris dengan semua cincin terisi Perhatikan bahwa semua cincin terisi. Ini karena semua segmen berjalan ke arah yang sama, sehingga sinar yang ditarik dari titik mana pun akan melintasi satu atau beberapa segmen, dan jumlah persimpangan tidak akan sama dengan nol.

Ilustrasi berikut menjelaskan proses ini. Panah merah mewakili arah di mana segmen digambar dan panah hitam mewakili sinar arbitrer yang berjalan dari titik di cincin terdalam. Dimulai dengan nilai nol, untuk setiap segmen yang disilangkan sinar, nilai satu ditambahkan untuk setiap persimpangan searah jarang. Semua titik terletak di wilayah isian dalam ilustrasi ini, karena hitungannya tidak sama dengan nol.

Ilustrasi lingkaran konsentris dengan sinar dari dalam cincin pertama yang melintasi keempat cincin

Contoh

Contoh kode berikut membuat grup geometri menggunakan ilustrasi sebelumnya. Kode pertama-tama mendeklarasikan array objek geometri. Objek-objek ini adalah empat lingkaran konsentris yang memiliki radii berikut: 25, 50, 75, dan 100. Kemudian panggil CreateGeometryGroup pada objek ID2D1Factory , melewati D2D1_FILL_MODE_ALTERNATE, array objek geometri untuk ditambahkan ke grup geometri, dan jumlah elemen dalam array ini.

HRESULT DemoApp::CreateGeometryResources()
{
    HRESULT hr;

    const D2D1_ELLIPSE ellipse1 = D2D1::Ellipse(
        D2D1::Point2F(105.0f, 105.0f),
        25.0f,
        25.0f
        );

    hr = m_pD2DFactory->CreateEllipseGeometry(
        ellipse1,
        &m_pEllipseGeometry1
        );

    if (SUCCEEDED(hr))
    {
        const D2D1_ELLIPSE ellipse2 = D2D1::Ellipse(
            D2D1::Point2F(105.0f, 105.0f),
            50.0f,
            50.0f
            );

        hr = m_pD2DFactory->CreateEllipseGeometry(
            ellipse2,
            &m_pEllipseGeometry2
            );
    }

    if (SUCCEEDED(hr))
    {

        const D2D1_ELLIPSE ellipse3 = D2D1::Ellipse(
            D2D1::Point2F(105.0f, 105.0f),
            75.0f,
            75.0f
            );

        hr = m_pD2DFactory->CreateEllipseGeometry(
            ellipse3,
            &m_pEllipseGeometry3
            );
    }

    if (SUCCEEDED(hr))
    {
        const D2D1_ELLIPSE ellipse4 = D2D1::Ellipse(
            D2D1::Point2F(105.0f, 105.0f),
            100.0f,
            100.0f
            );

        hr = m_pD2DFactory->CreateEllipseGeometry(
            ellipse4,
            &m_pEllipseGeometry4
            );
    }

    if (SUCCEEDED(hr))
    {
        ID2D1Geometry *ppGeometries[] =
        {
            m_pEllipseGeometry1,
            m_pEllipseGeometry2,
            m_pEllipseGeometry3,
            m_pEllipseGeometry4
        };

        hr = m_pD2DFactory->CreateGeometryGroup(
            D2D1_FILL_MODE_ALTERNATE,
            ppGeometries,
            ARRAYSIZE(ppGeometries),
            &m_pGeoGroup_AlternateFill
            );

        if (SUCCEEDED(hr))
        {
            hr = m_pD2DFactory->CreateGeometryGroup(
                D2D1_FILL_MODE_WINDING,
                ppGeometries,
                ARRAYSIZE(ppGeometries),
                &m_pGeoGroup_WindingFill
                );
        }

    }
    return hr;
}

Persyaratan

   
Klien minimum yang didukung Windows 7, Windows Vista dengan SP2 dan Pembaruan Platform untuk Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2008 R2, Windows Server 2008 dengan SP2 dan Pembaruan Platform untuk Windows Server 2008 [aplikasi desktop | Aplikasi UWP]
Header d2d1.h

Lihat juga

Gambaran Umum Geometri

ID2D1Factory::CreateGeometryGroup