D2D1_FILL_MODE列舉 (d2d1.h)
指定如何結合幾何或圖形的交集區域,以形成複合幾何的區域。
Syntax
typedef enum D2D1_FILL_MODE {
D2D1_FILL_MODE_ALTERNATE = 0,
D2D1_FILL_MODE_WINDING = 1,
D2D1_FILL_MODE_FORCE_DWORD = 0xffffffff
} ;
常數
D2D1_FILL_MODE_ALTERNATE 值: 0 透過從該點到任何方向的無限大繪製光線,然後計算指定圖案中光線交叉的路徑區段數目,判斷某個點是否在填滿區域中。 如果這個數位是奇數,則點位於填滿區域中;即使如此,點位於填滿區域之外。 |
D2D1_FILL_MODE_WINDING 值: 1 判斷某個點是否在路徑的填滿區域中,方法是繪製從該點到無限大的任何方向的光線,然後檢查圖形區段跨越光線的位置。 從零開始,每次區段從左至右交叉光線時新增一個,每次路徑區段從右至左交叉光線時減一個,只要從光線的角度看到左到右。 計算交叉之後,如果結果為零,則點位於路徑外。 否則,它位於路徑內。 |
D2D1_FILL_MODE_FORCE_DWORD 值: 0xffffffff |
備註
使用CreateGeometryGroup方法建立ID2D1GeometryGroup時,或使用ID2D1SimplifiedGeometrySink 的填滿模式來修改 ID2D1SimplifiedGeometrySink時,請使用 D2D1_FILL_MODE 列舉。
Direct2D 會使用這個列舉所指定的兩種填滿模式之一來填滿路徑的內部: D2D1_FILL_MODE_ALTERNATE (替代) 或 D2D1_FILL_MODE_WINDING () 。 由於模式會決定如何填滿封閉圖形的內部,因此所有圖形在填滿時都會被視為封閉式。 如果圖形中的線段有間距,請繪製虛線來關閉它。
若要查看線圈和替代填滿模式之間的差異,假設您有四個圓圈具有相同的中心和不同的半徑,如下圖所示。 第一個的半徑為 25、第二個 50、第三個 75 和第四個 100。
下圖顯示使用替代填滿模式填滿的圖形。 請注意,中央和第三個環形未填滿。 這是因為從這兩個環形任一點繪製的光線會通過偶數的區段。 下圖說明此程式。 同下圖顯示指定線圈填滿模式時,如何填滿相同的圖形。 請注意,所有環形都會填滿。 這是因為所有線段都以相同的方向執行,因此從任何點繪製的光線會跨越一或多個線段,而交叉的總和不會等於零。下圖說明此程式。 紅色箭號代表繪製線段的方向,黑色箭號代表從最內層環形點執行的任意光線。 從零開始,針對光線交叉的每個區段,每個順時針交集都會加入一個 值。 所有點都位於此圖中的填滿區域,因為計數不等於零。
範例
下列程式碼範例會建立使用上述圖例的幾何群組。 程式碼會先宣告 geometry 物件的陣列。 這些物件是具有下列弧度的四個同心圓:25、50、75 和 100。 然後在ID2D1Factory物件上呼叫CreateGeometryGroup、傳入D2D1_FILL_MODE_ALTERNATE、要新增至 geometry 群組的 geometry 物件陣列,以及此陣列中的元素數目。
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;
}
規格需求
最低支援的用戶端 | 適用于 Windows Vista 的 Windows 7、Windows Vista SP2 和平臺更新 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2008 R2、Windows Server 2008 SP2 和 Platform Update for Windows Server 2008 [傳統型應用程式 |UWP 應用程式] |
標頭 | d2d1.h |