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 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.

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 |