public static void GrokPathPointPrecision(PathGeometry geometry, int decimalNumber) { if (geometry == null) { return; } for (int index1 = 0; index1 < geometry.Figures.Count; ++index1) { PathFigure pathFigure = geometry.Figures[index1]; pathFigure.StartPoint = PathCommandHelper.Round(pathFigure.StartPoint, decimalNumber); for (int index2 = 0; index2 < pathFigure.Segments.Count; ++index2) { PathSegment pathSegment = pathFigure.Segments[index2]; if (pathSegment is BezierSegment) { BezierSegment bezierSegment = pathSegment as BezierSegment; bezierSegment.Point1 = PathCommandHelper.Round(bezierSegment.Point1, decimalNumber); bezierSegment.Point2 = PathCommandHelper.Round(bezierSegment.Point2, decimalNumber); bezierSegment.Point3 = PathCommandHelper.Round(bezierSegment.Point3, decimalNumber); } else if (pathSegment is LineSegment) { LineSegment lineSegment = pathSegment as LineSegment; lineSegment.Point = PathCommandHelper.Round(lineSegment.Point, decimalNumber); } else if (pathSegment is QuadraticBezierSegment) { QuadraticBezierSegment quadraticBezierSegment = pathSegment as QuadraticBezierSegment; quadraticBezierSegment.Point1 = PathCommandHelper.Round(quadraticBezierSegment.Point1, decimalNumber); quadraticBezierSegment.Point2 = PathCommandHelper.Round(quadraticBezierSegment.Point2, decimalNumber); } else if (pathSegment is PolyLineSegment) { PointCollection points = (pathSegment as PolyLineSegment).Points; for (int index3 = 0; index3 < points.Count; ++index3) { points[index3] = PathCommandHelper.Round(points[index3], decimalNumber); } } else if (pathSegment is PolyQuadraticBezierSegment) { PointCollection points = (pathSegment as PolyQuadraticBezierSegment).Points; int index3 = 0; while (index2 < points.Count) { points[index3] = PathCommandHelper.Round(points[index3], decimalNumber); ++index3; } } else if (pathSegment is PolyBezierSegment) { PointCollection points = (pathSegment as PolyBezierSegment).Points; for (int index3 = 0; index3 < points.Count; ++index3) { points[index3] = PathCommandHelper.Round(points[index3], decimalNumber); } } else if (pathSegment is ArcSegment) { ArcSegment arcSegment = pathSegment as ArcSegment; arcSegment.Point = PathCommandHelper.Round(arcSegment.Point, decimalNumber); } } } }
public static Point Round(Point point, int decimalNumber) { return(new Point(PathCommandHelper.Round(point.X, decimalNumber), PathCommandHelper.Round(point.Y, decimalNumber))); }