Modes d’enroulement
Les graphiques .NET Multiplateform App UI (.NET MAUI) fournissent une WindingMode énumération qui vous permet de spécifier l’algorithme de remplissage à utiliser par la FillPath méthode. Les contours d’un chemin peuvent se chevaucher et toute zone fermée peut potentiellement être remplie, mais vous ne souhaiterez peut-être pas remplir toutes les zones fermées. Pour plus d’informations sur les chemins, consultez Dessiner un chemin.
L’énumération WindingMode définit NonZero
et EvenOdd
les membres. Chaque membre représente un algorithme différent pour déterminer si un point se trouve dans la région de remplissage d’une zone fermée.
Remarque
La ClipPath méthode a une surcharge qui permet à un WindingMode argument d’être spécifié. Par défaut, cet argument est défini sur WindingMode.NonZero
.
Non-zéro
Le NonZero
mode de vent dessine un rayon hypothétique du point à l’infini dans n’importe quelle direction, puis examine les endroits où un contour de chemin traverse le rayon. Le nombre commence à zéro et est incrémenté chaque fois qu’un contour traverse le rayon de gauche à droite et décrémenté chaque fois qu’un contour traverse le rayon de droite à gauche. Si le nombre de passages à niveau est égal à zéro, la zone n’est pas remplie. Sinon, la zone est remplie.
L’exemple suivant remplit une étoile à cinq pointes à l’aide du NonZero
mode d’enroulement :
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);
Dans cet exemple, le chemin d’accès est dessiné deux fois. La FillPath méthode est utilisée pour remplir le chemin d’accès en bleu, tandis que la DrawPath méthode décrit le chemin avec un trait rouge. La FillPath surcharge utilisée omet l’argument WindingMode et utilise automatiquement le NonZero
mode d’enroulement. Ainsi, toutes les zones fermées du chemin d’accès sont remplies :
Remarque
Pour de nombreux chemins, le NonZero
mode enroulement remplit souvent toutes les zones fermées d’un chemin.
EvenOdd
Le EvenOdd
mode de vent dessine un rayon hypothétique du point à l’infini dans n’importe quelle direction et compte le nombre de contours de chemin que le rayon traverse. Si ce nombre est impair, la zone est remplie. Sinon, la zone n’est pas remplie.
L’exemple suivant remplit une étoile à cinq pointes à l’aide du EvenOdd
mode d’enroulement :
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);
Dans cet exemple, le chemin d’accès est dessiné deux fois. La FillPath méthode est utilisée pour remplir le chemin d’accès en bleu, tandis que la DrawPath méthode décrit le chemin avec un trait rouge. La FillPath surcharge utilisée spécifie que le EvenOdd
mode d’enroulement est utilisé. Ce mode entraîne le remplissage de la zone centrale de l’étoile :