CGPathDrawingMode Enumerazione
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Modalità disegno.
public enum CGPathDrawingMode
type CGPathDrawingMode =
- Ereditarietà
-
CGPathDrawingMode
Campi
EOFill | 1 | Riempie il percorso usando la regola dispari uniforme. |
EOFillStroke | 4 | Riempie e tratti il percorso usando la regola dispari uniforme. |
Fill | 0 | Riempie il percorso usando la regola di avvolgimento non zero. |
FillStroke | 3 | Riempie e tratti il percorso usando la regola di avvolgimento non zero. |
Stroke | 2 | Tratti il percorso. |
Commenti
Questa enumerazione consente allo sviluppatore dell'applicazione di scegliere tra la visualizzazione del riempimento, del tratto o di entrambi i percorsi. Inoltre, consente allo sviluppatore di scegliere se usare la modalità di riempimento "regola di carica non zero" della grafica core o la modalità di riempimento "regola dispari uniforme".
Sia la "regola di avvolgimento non zero" che la regola "dispari" decide se riempire un pixel considerando una linea disegnata dal punto all'esterno del percorso.
La modalità "regola di avvolgimento non zero" non riempie il pixel se il percorso attraversa il percorso in senso orario e antiorario un numero uguale di volte. Se il conteggio di attraversamenti antiorario o antiorario è diverso da zero, il punto viene considerato all'interno del percorso e viene riempito. Come illustrato nella figura seguente, questo rende la direzione del percorso una considerazione importante.
La regola "uniforme" riempie un pixel se il numero di percorsi incrociati è strano. Non accetta la direzione del percorso in considerazione.
Nell'esempio seguente viene illustrata una situazione più complessa. Il percorso superiore viene disegnato con la "regola dispari uniforme" () mentre il basso viene riempito con la "regola di avvolgimento non zero" (EOFillStrokeFillStroke). In entrambi i casi, il percorso viene eseguito sia in rosso che riempito di 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);
}