private void Append(PolygonGraphicsPath poly, Coordinate[] coords) { GraphicsPath ring = null; for (var i = 0; i < coords.Length; i++) { _transPoint = TransformPoint(coords[i], _transPoint); poly.AddToRing(_transPoint, ref ring); } poly.EndRing(ring); }
private GraphicsPath ToShape(IPolygon p) { var poly = new PolygonGraphicsPath(); AppendRing(poly, p.ExteriorRing.Coordinates); for (int j = 0; j < p.NumInteriorRings; j++) { AppendRing(poly, p.GetInteriorRingN(j).Coordinates); } return(poly.Path); }
private void AppendRing(PolygonGraphicsPath poly, Coordinate[] coords) { GraphicsPath ring = null; var prevX = Single.NaN; var prevY = Single.NaN; Coordinate prev = null; var n = coords.Length - 1; /** * Don't include closing point. * Ring path will be closed explicitly, which provides a * more accurate path representation. */ for (var i = 0; i <= n; i++) { if (Decimation > 0.0) { var isDecimated = prev != null && Math.Abs(coords[i].X - prev.X) < Decimation && Math.Abs(coords[i].Y - prev.Y) < Decimation; if (isDecimated) { continue; } prev = coords[i]; } var transPoint = TransformPoint(coords[i]); if (RemoveDuplicatePoints) { // skip duplicate points (except the last point) var isDup = transPoint.X == prevX && transPoint.Y == prevY; if (isDup) { continue; } prevX = transPoint.X; prevY = transPoint.Y; } poly.AddToRing(transPoint, ref ring); } // handle closing point poly.EndRing(ring); }
private void Append(PolygonGraphicsPath poly, Coordinate[] coords) { GraphicsPath ring = null; for (var i = 0; i < coords.Length; i++) { _transPoint = TransformPoint(coords[i], _transPoint); poly.AddToRing(_transPoint, ref ring); } poly.EndRing(ring); }
private GraphicsPath ToShape(IPolygon p) { var poly = new PolygonGraphicsPath(); Append(poly, p.ExteriorRing.Coordinates); for (int j = 0; j < p.NumInteriorRings; j++) { Append(poly, p.GetInteriorRingN(j).Coordinates); } return poly.Path; }
private void AppendRing(PolygonGraphicsPath poly, Coordinate[] coords) { GraphicsPath ring = null; var prevX = Single.NaN; var prevY = Single.NaN; Coordinate prev = null; var n = coords.Length - 1; /** * Don't include closing point. * Ring path will be closed explicitly, which provides a * more accurate path representation. */ for (var i = 0; i <= n; i++) { if (Decimation > 0.0) { var isDecimated = prev != null && Math.Abs(coords[i].X - prev.X) < Decimation && Math.Abs(coords[i].Y - prev.Y) < Decimation; if (isDecimated) continue; prev = coords[i]; } var transPoint = TransformPoint(coords[i]); if (RemoveDuplicatePoints) { // skip duplicate points (except the last point) var isDup = transPoint.X == prevX && transPoint.Y == prevY; if (isDup) { continue; } prevX = transPoint.X; prevY = transPoint.Y; } poly.AddToRing(transPoint, ref ring); } // handle closing point poly.EndRing(ring); }