Example #1
0
    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);
        }
Example #3
0
            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);
            }
Example #4
0
 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;
         }
     }
 }
Example #5
0
    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");
        }