Compartir a través de


CGPathDrawingMode Enumeración

Definición

Modo de dibujo.

public enum CGPathDrawingMode
type CGPathDrawingMode = 
Herencia
CGPathDrawingMode

Campos

EOFill 1

Rellena la ruta de acceso mediante la regla pares.

EOFillStroke 4

Rellena y trazo la ruta de acceso mediante la regla pares impares.

Fill 0

Rellena la ruta de acceso mediante la regla de desenlazamiento distinto de cero.

FillStroke 3

Rellena y trazo la ruta de acceso mediante la regla de desenlazamiento distinto de cero.

Stroke 2

Trazos de la ruta de acceso.

Comentarios

Esta enumeración permite al desarrollador de aplicaciones elegir entre mostrar el relleno, el trazo o ambos de una ruta de acceso. Además, permite al desarrollador elegir si se debe usar el modo de relleno "regla de relleno distinto de cero" de los gráficos principales o el modo de relleno "regla par-impar".

Tanto la regla de desenlazamiento "distinto de cero" como la "regla impar par" deciden si se debe rellenar un píxel teniendo en cuenta una línea dibujada desde el punto al exterior de la ruta de acceso.

El modo "regla de desenlazado distinto de cero" no rellena el píxel si la ruta cruza esa línea en el sentido de las agujas del reloj y en sentido contrario a las agujas del reloj un número igual de veces. Si el recuento de cruces en sentido contrario a las agujas del reloj es distinto de cero, el punto se considera dentro de la ruta de acceso y se rellena. Como se muestra en la ilustración siguiente, esto hace que la dirección de la ruta sea una consideración importante.

La regla "par-impar" rellena un píxel si el número de rutas de acceso cruzadas es impar. No tiene en cuenta la dirección de la ruta de acceso.

En el siguiente ejemplo se muestra una situación más compleja. La ruta de acceso superior se dibuja con la "regla par-impar" (EOFillStroke) mientras que la parte inferior se rellena con la "regla de desenlazamiento distinto de cero" (FillStroke). En ambos casos, el trazado se trazos en rojo y se rellena en verde.

 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);
}         

Se aplica a