internal static void ApplyAnimationToBezierSegments(Int32 index, Storyboard storyBoard, BezierSegment bezierSegment, Point[] oldCtrlPoints, Point[] newCtrlPoints, PathFigure pathFigure, Point oldFirstPointOfBezierSeg, Point newFirstPointOfBezierSeg) { if (index == 1) { PointAnimation pointAnimation = new PointAnimation() { From = oldFirstPointOfBezierSeg, To = newFirstPointOfBezierSeg, SpeedRatio = 2, Duration = new Duration(new TimeSpan(0, 0, 1)) }; Storyboard.SetTarget(pointAnimation, pathFigure); Storyboard.SetTargetProperty(pointAnimation, new PropertyPath("StartPoint")); Storyboard.SetTargetName(pointAnimation, (String)pathFigure.GetValue(FrameworkElement.NameProperty)); storyBoard.Children.Add(pointAnimation); #if WPF pathFigure.BeginAnimation(PathFigure.StartPointProperty, pointAnimation); #endif } // Animate control points if (oldCtrlPoints != null && newCtrlPoints != null && oldCtrlPoints.Count() == 3 && newCtrlPoints.Count() == 3) { // Loop for 3 control points for (int i = 0; i < 3; i++) { // Creates PointAnimation for each control points if (!oldCtrlPoints[i].Equals(newCtrlPoints[i])) { PointAnimation pointAnimation = new PointAnimation() { From = oldCtrlPoints[i], To = newCtrlPoints[i], SpeedRatio = 2, Duration = new Duration(new TimeSpan(0, 0, 1)) }; Storyboard.SetTarget(pointAnimation, bezierSegment); Storyboard.SetTargetProperty(pointAnimation, new PropertyPath("Point" + (i + 1).ToString())); Storyboard.SetTargetName(pointAnimation, (String)bezierSegment.GetValue(FrameworkElement.NameProperty)); storyBoard.Children.Add(pointAnimation); #if WPF switch(i) { case 0: bezierSegment.BeginAnimation(BezierSegment.Point1Property, pointAnimation); break; case 1: bezierSegment.BeginAnimation(BezierSegment.Point2Property, pointAnimation); break; case 2: bezierSegment.BeginAnimation(BezierSegment.Point3Property, pointAnimation); break; } #endif } } } }