Partager via


CGPathDrawingMode Énumération

Définition

Mode dessin.

public enum CGPathDrawingMode
type CGPathDrawingMode = 
Héritage
CGPathDrawingMode

Champs

EOFill 1

Remplit le chemin à l’aide de la règle pair-impair.

EOFillStroke 4

Remplit et caresse le chemin à l’aide de la règle pair-impair.

Fill 0

Remplit le chemin à l’aide de la règle d’enroulement non nulle.

FillStroke 3

Remplit et caresse le chemin à l’aide de la règle de remontage non nulle.

Stroke 2

Caresse le chemin d’accès.

Remarques

Cette énumération permet au développeur d’application de choisir entre afficher le remplissage, le trait ou les deux d’un chemin d’accès. En outre, il permet au développeur de choisir d’utiliser le mode de remplissage « règle de remontage non nulle » ou le mode de remplissage « règle pair-impair ».

La « règle d’enroulement non nulle » et la « règle pair-impair » décident de remplir un pixel en tenant compte d’une ligne dessinée du point à l’extérieur du chemin.

Le mode « règle de remontage non nul » ne remplit pas le pixel si le chemin franchit cette ligne dans le sens des aiguilles d’une montre et dans le sens inverse des aiguilles d’une montre un nombre égal de fois. Si le nombre de croisements dans le sens des aiguilles d’une montre ou dans le sens inverse des aiguilles d’une montre est différent de zéro, le point est considéré à l’intérieur du chemin et est rempli. Comme le montre l’illustration suivante, cela fait de la direction du chemin une considération importante.

La règle « pair-impair » remplit un pixel si le nombre de chemins croisés est impair. Il ne prend pas en compte la direction du chemin d’accès.

L’exemple suivant montre une situation plus complexe. Le chemin supérieur est dessiné avec la « règle pair-impair » (EOFillStroke) tandis que le bas est rempli avec la « règle de remontage non nul » (FillStroke). Dans les deux cas, le chemin est à la fois tracé en rouge et rempli en vert.

 public override void Draw (RectangleF rect)
{
	base.Draw (rect);

	using (var ctxt = UIGraphics.GetCurrentContext ()) {
		ctxt.ScaleCTM (1, -1);
		ctxt.TranslateCTM (0, -Bounds.Height);
   	DrawPathWithWindingMode (ctxt, Bounds.Height / 2, CGPathDrawingMode.EOFillStroke);
	  DrawPathWithWindingMode (ctxt, 0, CGPathDrawingMode.FillStroke);
		}
}

void DrawPathWithWindingMode (CGContext ctxt, float yOffset, CGPathDrawingMode mode)
{
	var points = new PointF[] {
		new PointF (50, 50),
		new PointF (200, 50),
		new PointF (200, 100),
		new PointF (50, 100),
		new PointF (50, 50),
		new PointF (150, 50),
		new PointF (150, 150),
		new PointF (100, 150),
		new PointF (100, 25)
	};
	points = points.Select (pt => new PointF(pt.X, pt.Y += yOffset)).ToArray();
	ctxt.SetStrokeColor (UIColor.Red.CGColor);
	ctxt.SetFillColor (UIColor.Green.CGColor);
	ctxt.MoveTo (points [0].X, points [0].Y);
	for (var i = 1; i < points.Length; i++) {
		ctxt.AddLineToPoint (points [i].X, points [i].Y);
	}
	ctxt.DrawPath (mode);
}         

S’applique à