private IEnumerable <SimpleSegment> GetEffectiveSegments(PathFigure pathFigure) { var startPoint = pathFigure.StartPoint; foreach (var iteratorVariable1 in pathFigure.AllSegments()) { foreach (var iteratorVariable2 in iteratorVariable1.PathSegment.GetSimpleSegments( iteratorVariable1.StartPoint)) { yield return(iteratorVariable2); startPoint = iteratorVariable2.Points.Last(); } } if (pathFigure.IsClosed) { yield return(SimpleSegment.Create(startPoint, pathFigure.StartPoint)); } }
internal static void FlattenFigure(PathFigure figure, IList <Point> points, double tolerance, bool removeRepeat) { if (figure == null) { throw new ArgumentNullException(nameof(figure)); } if (points == null) { throw new ArgumentNullException(nameof(points)); } if (tolerance < 0.0) { throw new ArgumentOutOfRangeException(nameof(tolerance)); } var list = removeRepeat ? new List <Point>() : points; list.Add(figure.StartPoint); foreach (var data in figure.AllSegments()) { data.PathSegment.FlattenSegment(list, data.StartPoint, tolerance); } if (figure.IsClosed) { list.Add(figure.StartPoint); } if (removeRepeat && list.Count > 0) { points.Add(list[0]); for (var i = 1; i < list.Count; i++) { if (!MathHelper.IsVerySmall(GeometryHelper.SquaredDistance(points.Last(), list[i]))) { points.Add(list[i]); } } } }