public void AddLines(PointF [] points) { if (points == null) { throw new ArgumentNullException("points"); } if (points.Length == 0) { return; } if (NativeObject.LastFigureClosed) { NativeObject.moveTo(points[0].X, points[0].Y); } else { NativeObject.lineTo(points[0].X, points[0].Y); } for (int i = 1; i < points.Length; i++) { NativeObject.lineTo(points[i].X, points[i].Y); } }
internal void AddRectangle(float x, float y, float w, float h) { NativeObject.moveTo(x, y); NativeObject.lineTo(x + w, y); NativeObject.lineTo(x + w, y + h); NativeObject.lineTo(x, y + h); NativeObject.closePath(); }
public void AddPolygon(PointF [] points) { if (points == null) { throw new ArgumentNullException("points"); } if (points.Length < 3) { throw new ArgumentException("Invalid parameter used."); } NativeObject.moveTo(points[0].X, points[0].Y); for (int i = 1; i < points.Length; i++) { NativeObject.lineTo(points[i].X, points[i].Y); } NativeObject.closePath(); }
private void SetPath(Point [] pts, byte [] types) { NativeObject.Clear(); if (((PathPointType)types [0] & PathPointType.PathTypeMask) != PathPointType.Start) { NativeObject.moveTo(pts [0].X, pts [0].Y); } for (int i = 0; i < pts.Length; i++) { switch (((PathPointType)types [i] & PathPointType.PathTypeMask)) { case PathPointType.Start: NativeObject.moveTo(pts [i].X, pts [i].Y); break; case PathPointType.Line: NativeObject.lineTo(pts [i].X, pts [i].Y); break; case PathPointType.Bezier3: float x1 = pts [i].X; float y1 = pts [i].Y; i++; float x2 = pts [i].X; float y2 = pts [i].Y; i++; float x3 = pts [i].X; float y3 = pts [i].Y; NativeObject.curveTo(x1, y1, x2, y2, x3, y3); break; } if (((PathPointType)types [i] & PathPointType.CloseSubpath) != 0) { NativeObject.closePath(); } if (((PathPointType)types [i] & PathPointType.PathMarker) != 0) { NativeObject.SetMarkers(); } } }
/// <summary> /// Based on http://pubpages.unh.edu/~cs770/a5/cardinal.html /// </summary> /// <param name="pts">point array (x1,y1,x2,y2 ...). /// The first and last points considered only for calculations, but are not added.</param> void AddCurve(float[] pts, bool connect, float tension) { tension /= 3f; //looks like a good pick if (connect) { NativeObject.lineTo(pts[2], pts[3]); } else { NativeObject.moveTo(pts[2], pts[3]); } float dx = pts[4] - pts[0]; float dy = pts[5] - pts[1]; float sx = pts[2] + tension * dx; float sy = pts[3] + tension * dy; for (int offset = 2, total = pts.Length - 4; offset < total; offset += 2) { int cur_offset = offset; int pX = cur_offset++; int pY = cur_offset++; int X = cur_offset++; int Y = cur_offset++; int nX = cur_offset++; int nY = cur_offset++; dx = pts[nX] - pts[pX]; dy = pts[nY] - pts[pY]; float rx = pts[X] - tension * dx; float ry = pts[Y] - tension * dy; NativeObject.curveTo(sx, sy, rx, ry, pts[X], pts[Y]); sx = pts[X] + tension * dx; sy = pts[Y] + tension * dy; } }