Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public sealed class SmoothPathBuilder
- {
- private List<Vector2> _controlPoints;
- private List<Vector2> _path;
- private Vector2 _beginPoint;
- public SmoothPathBuilder(Vector2 beginPoint)
- {
- _beginPoint = beginPoint;
- _controlPoints = new List<Vector2>();
- _path = new List<Vector2>();
- }
- public void MoveTo(Vector2 point)
- {
- if (_controlPoints.Count < 4)
- {
- _controlPoints.Add(point);
- return;
- }
- var endPoint = new Vector2(
- (_controlPoints[2].X + point.X) / 2,
- (_controlPoints[2].Y + point.Y) / 2);
- _path.Add(_controlPoints[1]);
- _path.Add(_controlPoints[2]);
- _path.Add(endPoint);
- _controlPoints = new List<Vector2> { endPoint, point };
- }
- public void EndFigure(Vector2 point)
- {
- if (_controlPoints.Count > 1)
- {
- for (int i = 0; i < _controlPoints.Count; i++)
- {
- MoveTo(point);
- }
- }
- }
- public CanvasGeometry ToGeometry(ICanvasResourceCreator resourceCreator)
- {
- var builder = new CanvasPathBuilder(resourceCreator);
- builder.BeginFigure(_beginPoint);
- for (int i = 0; i < _path.Count; i += 3)
- {
- builder.AddCubicBezier(_path[i], _path[i + 1], _path[i + 2]);
- }
- builder.EndFigure(CanvasFigureLoop.Open);
- return CanvasGeometry.CreatePath(builder);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement