共用方式為


纏繞模式

Browse sample. 流覽範例

.NET 多平台應用程式 UI (.NET MAUI) 圖形提供 WindingMode 列舉,可讓您指定 方法要使用的 FillPath 填滿演算法。 路徑中的輪廓可以重疊,而且任何封閉區域都可能會填滿,但您可能不想填滿所有封閉區域。 如需路徑的詳細資訊,請參閱 繪製路徑

列舉 WindingModeNonZero 定義和 EvenOdd 成員。 每個成員都代表不同的演算法,以判斷某個點是否位於封閉區域的填滿區域中。

注意

方法 ClipPath 具有可指定 WindingMode 自變數的多載。 根據預設,這個自變數會設定為 WindingMode.NonZero

NonZero繞行模式會從點到任何方向的無限度繪製假設射線,然後檢查路徑輪廓穿越光線的位置。 計數從零開始,每次輪廓從左到右交叉光線,每次輪廓從右到左交叉光線時遞減, 計數就會遞增。 如果交叉計數為零,則不會填滿區域。 否則,會填滿區域。

下列範例會使用 NonZero 纏繞模式填滿五角星形:

float radius = 0.45f * Math.Min(dirtyRect.Width, dirtyRect.Height);

PathF path = new PathF();
path.MoveTo(dirtyRect.Center.X, dirtyRect.Center.Y - radius);

for (int i = 1; i < 5; i++)
{
    double angle = i * 4 * Math.PI / 5;
    path.LineTo(new PointF(radius * (float)Math.Sin(angle) + dirtyRect.Center.X, -radius * (float)Math.Cos(angle) + dirtyRect.Center.Y));
}
path.Close();

canvas.StrokeSize = 15;
canvas.StrokeLineJoin = LineJoin.Round;
canvas.StrokeColor = Colors.Red;
canvas.FillColor = Colors.Blue;
canvas.FillPath(path); // Overload automatically uses a NonZero winding mode
canvas.DrawPath(path);

在此範例中,會繪製路徑兩次。 方法 FillPath 用來以藍色填滿路徑,而 DrawPath 方法則以紅色筆劃來概述路徑。 FillPath所使用的多載會省略 WindingMode 自變數,而是會自動使用NonZero繞行模式。 這會導致填滿路徑的所有封閉區域:

Screenshot of a five-pointed star, using the non-zero winding mode.

注意

對於許多路徑, NonZero 纏繞模式通常會填滿路徑的所有封閉區域。

EvenOdd

EvenOdd纏繞模式會從任何方向的點到無限度繪製假設的光線,並計算光線交叉的路徑輪廓數目。 如果這個數位是奇數,則會填滿區域。 否則,區域不會填滿。

下列範例會使用 EvenOdd 纏繞模式填滿五角星形:

float radius = 0.45f * Math.Min(dirtyRect.Width, dirtyRect.Height);

PathF path = new PathF();
path.MoveTo(dirtyRect.Center.X, dirtyRect.Center.Y - radius);

for (int i = 1; i < 5; i++)
{
    double angle = i * 4 * Math.PI / 5;
    path.LineTo(new PointF(radius * (float)Math.Sin(angle) + dirtyRect.Center.X, -radius * (float)Math.Cos(angle) + dirtyRect.Center.Y));
}
path.Close();

canvas.StrokeSize = 15;
canvas.StrokeLineJoin = LineJoin.Round;
canvas.StrokeColor = Colors.Red;
canvas.FillColor = Colors.Blue;
canvas.FillPath(path, WindingMode.EvenOdd);
canvas.DrawPath(path);

在此範例中,會繪製路徑兩次。 方法 FillPath 用來以藍色填滿路徑,而 DrawPath 方法則以紅色筆劃來概述路徑。 FillPath所使用的多載會EvenOdd指定使用線圈模式。 此模式會導致星形中央區域未填滿:

Screenshot of a five-pointed star, using the even-odd winding mode.