Advertisement
FrayxRulez

Smooth path

May 3rd, 2020
719
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.50 KB | None | 0 0
  1. public sealed class SmoothPathBuilder
  2. {
  3.     private List<Vector2> _controlPoints;
  4.     private List<Vector2> _path;
  5.  
  6.     private Vector2 _beginPoint;
  7.  
  8.     public SmoothPathBuilder(Vector2 beginPoint)
  9.     {
  10.         _beginPoint = beginPoint;
  11.  
  12.         _controlPoints = new List<Vector2>();
  13.         _path = new List<Vector2>();
  14.     }
  15.  
  16.     public void MoveTo(Vector2 point)
  17.     {
  18.         if (_controlPoints.Count < 4)
  19.         {
  20.             _controlPoints.Add(point);
  21.             return;
  22.         }
  23.  
  24.         var endPoint = new Vector2(
  25.             (_controlPoints[2].X + point.X) / 2,
  26.             (_controlPoints[2].Y + point.Y) / 2);
  27.  
  28.         _path.Add(_controlPoints[1]);
  29.         _path.Add(_controlPoints[2]);
  30.         _path.Add(endPoint);
  31.  
  32.         _controlPoints = new List<Vector2> { endPoint, point };
  33.     }
  34.  
  35.     public void EndFigure(Vector2 point)
  36.     {
  37.         if (_controlPoints.Count > 1)
  38.         {
  39.             for (int i = 0; i < _controlPoints.Count; i++)
  40.             {
  41.                 MoveTo(point);
  42.             }
  43.         }
  44.     }
  45.  
  46.     public CanvasGeometry ToGeometry(ICanvasResourceCreator resourceCreator)
  47.     {
  48.         var builder = new CanvasPathBuilder(resourceCreator);
  49.         builder.BeginFigure(_beginPoint);
  50.  
  51.         for (int i = 0; i < _path.Count; i += 3)
  52.         {
  53.             builder.AddCubicBezier(_path[i], _path[i + 1], _path[i + 2]);
  54.         }
  55.  
  56.         builder.EndFigure(CanvasFigureLoop.Open);
  57.  
  58.         return CanvasGeometry.CreatePath(builder);
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement