Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La grafica dell'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI) fornisce un'enumerazione WindingMode che consente di specificare l'algoritmo di riempimento da usare dal FillPath metodo . I contorni in un percorso possono sovrapporsi e qualsiasi area racchiusa può essere potenzialmente riempita, ma potrebbe non essere necessario riempire tutte le aree racchiuse. Per altre informazioni sui percorsi, vedere Disegnare un percorso.
L'enumerazione WindingMode definisce NonZero
i membri e EvenOdd
. Ogni membro rappresenta un algoritmo diverso per determinare se un punto si trova nell'area di riempimento di un'area racchiusa.
Nota
Il ClipPath metodo dispone di un overload che consente di specificare un WindingMode argomento. Per impostazione predefinita, questo argomento è impostato su WindingMode.NonZero
.
Diverso da zero
La NonZero
modalità di avvolgimento disegna un raggio ipotetico dal punto all'infinito in qualsiasi direzione e quindi esamina i luoghi in cui un tracciato di contorno attraversa il raggio. Il conteggio inizia a zero e viene incrementato ogni volta che un contorno attraversa il raggio da sinistra a destra e decrementato ogni volta che un contorno attraversa il raggio da destra a sinistra. Se il numero di attraversamenti è zero, l'area non viene riempita. In caso contrario, l'area viene riempita.
L'esempio seguente riempie una stella a cinque punte usando la NonZero
modalità di avvolgimento:
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);
In questo esempio il percorso viene disegnato due volte. Il FillPath metodo viene usato per riempire il percorso con blu, mentre il DrawPath metodo delinea il percorso con un tratto rosso. L'overload FillPath utilizzato omette l'argomento WindingMode e usa automaticamente la NonZero
modalità di avvolgimento. Ciò comporta la compilazione di tutte le aree racchiuse del percorso:
Nota
Per molti percorsi, la NonZero
modalità di avvolgimento spesso riempie tutte le aree racchiuse di un percorso.
EvenOdd
La EvenOdd
modalità di avvolgimento disegna un raggio ipotetico dal punto all'infinito in qualsiasi direzione e conta il numero di contorni di percorso attraversati dal raggio. Se questo numero è dispari, l'area viene riempita. In caso contrario, l'area non viene riempita.
L'esempio seguente riempie una stella a cinque punte usando la EvenOdd
modalità di avvolgimento:
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);
In questo esempio il percorso viene disegnato due volte. Il FillPath metodo viene usato per riempire il percorso con blu, mentre il DrawPath metodo delinea il percorso con un tratto rosso. L'overload FillPath utilizzato specifica che viene utilizzata la EvenOdd
modalità di avvolgimento. Questa modalità comporta la mancata riempimento dell'area centrale della stella: