Bagikan melalui


CGPathDrawingMode Enum

Definisi

Mode menggambar.

public enum CGPathDrawingMode
type CGPathDrawingMode = 
Warisan
CGPathDrawingMode

Bidang

EOFill 1

Mengisi jalur menggunakan aturan ganjil-genap.

EOFillStroke 4

Mengisi dan membelai jalur menggunakan aturan ganjil-genap.

Fill 0

Mengisi jalur menggunakan aturan berliku bukan nol.

FillStroke 3

Mengisi dan membelai jalur menggunakan aturan berliku bukan nol.

Stroke 2

Goresan jalan.

Keterangan

Enumerasi ini memungkinkan pengembang aplikasi untuk memilih antara menunjukkan isian, goresan, atau kedua jalur. Selain itu, ini memungkinkan pengembang untuk memilih apakah akan menggunakan mode isi "aturan berliku non-nol" yang berdiri atau mode isian "aturan ganjil genap".

Baik "aturan berliku bukan nol" dan "aturan ganjil genap" memutuskan apakah akan mengisi piksel dengan mempertimbangkan garis yang digambar dari titik ke luar jalur.

Mode "aturan berliku bukan nol" tidak mengisi piksel jika jalur melintasi garis tersebut searah jarang dan berlawanan arah jarang dengan jumlah waktu yang sama. Jika jumlah persimpangan searah jarang versus berlawanan arah jarang bukan nol, titik dianggap di dalam jalur dan diisi. Seperti yang ditunjukkan oleh ilustrasi berikut, ini membuat arah jalur menjadi pertimbangan penting.

Aturan "ganjil genap" mengisi piksel jika jumlah jalur yang disilangkan ganjil. Ini tidak mempertahankan arah jalur.

Contoh berikut menunjukkan situasi yang lebih kompleks. Jalur atas digambar dengan "aturan ganjil genap" (EOFillStroke) sementara bagian bawah diisi dengan "aturan berliku bukan nol" (FillStroke). Dalam kedua kasus, jalurnya di-stroke dengan warna merah dan diisi dengan warna hijau.

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

Berlaku untuk