CGPathDrawingMode Enumeração
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Modo de desenho.
public enum CGPathDrawingMode
type CGPathDrawingMode =
- Herança
-
CGPathDrawingMode
Campos
EOFill | 1 | Preenche o caminho usando a regra even-odd. |
EOFillStroke | 4 | Preenche e traça o caminho usando a regra even-odd. |
Fill | 0 | Preenche o caminho usando a regra de enrolamento diferente de zero. |
FillStroke | 3 | Preenche e traça o caminho usando a regra de enrolamento diferente de zero. |
Stroke | 2 | Traça o caminho. |
Comentários
Essa enumeração permite que o desenvolvedor de aplicativos escolha entre mostrar o preenchimento, o traço ou ambos os caminhos. Além disso, ele permite que o desenvolvedor escolha se deseja usar o modo de preenchimento "regra de enrolamento diferente de zero" do Core Graphics ou o modo de preenchimento "regra par-ímpar".
Tanto a "regra de enrolamento diferente de zero" quanto a "regra uniforme ímpar" decidem se devem preencher um pixel considerando uma linha desenhada do ponto para fora do caminho.
O modo "regra de enrolamento diferente de zero" não preencherá o pixel se o caminho cruzar essa linha no sentido horário e no sentido anti-horário um número igual de vezes. Se a contagem de cruzamentos no sentido horário versus no sentido anti-horário for diferente de zero, o ponto será considerado dentro do caminho e será preenchido. Como mostra a ilustração a seguir, isso torna a direção do caminho uma consideração importante.
A regra "even-odd" preencherá um pixel se o número de caminhos cruzados for ímpar. Ele não leva em conta a direção do caminho.
O exemplo a seguir mostra uma situação mais complexa. O caminho superior é desenhado com a "regra uniforme ímpar" (EOFillStroke) enquanto a parte inferior é preenchida com a "regra de enrolamento diferente de zero" (FillStroke). Em ambos os casos, o caminho é ambos traçados em vermelho e preenchidos em 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);
}