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 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;
         }
     }
 }