internal static bool SyncPolylineFigure(PathFigure figure, IList <Point> points, bool isClosed, bool isFilled = true) { if (figure == null) { throw new ArgumentNullException(nameof(figure)); } var flag = false; if (points == null || points.Count == 0) { flag |= figure.ClearIfSet(PathFigure.StartPointProperty); flag |= figure.Segments.EnsureListCount(0); } else { flag |= figure.SetIfDifferent(PathFigure.StartPointProperty, points[0]); flag |= figure.Segments.EnsureListCount(1, () => new PolyLineSegment()); flag |= PathSegmentHelper.SyncPolylineSegment(figure.Segments, 0, points, 1, points.Count - 1); } flag |= figure.SetIfDifferent(PathFigure.IsClosedProperty, isClosed); return(flag | figure.SetIfDifferent(PathFigure.IsFilledProperty, isFilled)); }
public void Setup() { m_Converter = Substitute.For <IGeometryPointToWindowsPointConverter>(); m_Point = new Point(100.0, 200.0); m_Converter.Point.Returns(m_Point); m_Helper = new PathSegmentHelper(m_Converter); }
public override PathSegment ApplyTransform(GeneralTransform transform) { var segment = ArcToBezierSegments(_segment, Start); if (segment != null) { return(PathSegmentHelper.ApplyTransform(segment, Start, transform)); } _segment.Point = transform.Transform(_segment.Point); return(_segment); }
internal static void ApplyTransform(this PathFigure figure, GeneralTransform transform) { figure.StartPoint = transform.Transform(figure.StartPoint); for (var i = 0; i < figure.Segments.Count; i++) { var segment = PathSegmentHelper.ApplyTransform(figure.Segments[i], figure.StartPoint, transform); if (!Equals(figure.Segments[i], segment)) { figure.Segments[i] = segment; } } }
private bool SyncPieceWiseInnerCurves(PathFigure figure, int index, ref Point firstPoint, params double[] angles) { var flag = false; var length = angles.Length; var logicalBounds = LogicalBounds; var absoluteThickness = _absoluteThickness; flag |= figure.Segments.EnsureListCount(index + length / 2, () => new PolyBezierSegment()); for (var i = 0; i < length / 2; i++) { var points = ComputeOneInnerCurve(angles[i * 2], angles[i * 2 + 1], logicalBounds, absoluteThickness); if (i == 0) { firstPoint = points[0]; } flag |= PathSegmentHelper.SyncPolyBezierSegment(figure.Segments, index + i, points, 1, points.Count - 1); } return(flag); }
public void SegmentToArcSegmentForTurnDirectionCounterClockwiseCaseOneTest() { var helper = new PathSegmentHelper(new GeometryPointToWindowsPointConverter()); var circle = new Circle(new Geometry.Shapes.Point(350.0, 490.0), 30.0); var startPoint = new Geometry.Shapes.Point(327.639320225002, 510.0); var endPoint = new Geometry.Shapes.Point(350.0, 520.0); var segment = new TurnCircleArcSegment(circle, Constants.TurnDirection.Counterclockwise, Constants.CircleOrigin.Finish, startPoint, endPoint); ArcSegment actual = helper.SegmentToArcSegment(segment); Assert.AreEqual(new Point(400, 1430), actual.Point, "Point"); Assert.AreEqual(new Size(30.0, 30.0), actual.Size, "Size"); Assert.AreEqual(SweepDirection.Counterclockwise, actual.SweepDirection, "SweepDirection"); Assert.True(actual.IsLargeArc, "IsLargeArc"); }