123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using System.Collections.Generic;
- using System.Windows;
- namespace HandyControl.Expression.Drawing;
- internal class SimpleSegment
- {
- public enum SegmentType
- {
- Line,
- CubicBeizer
- }
- private SimpleSegment()
- {
- }
- public Point[] Points { get; private set; }
- public SegmentType Type { get; private set; }
- public static SimpleSegment Create(Point point0, Point point1)
- {
- var segment = new SimpleSegment
- {
- Type = SegmentType.Line,
- Points = new[] { point0, point1 }
- };
- return segment;
- }
- public static SimpleSegment Create(Point point0, Point point1, Point point2)
- {
- var point = GeometryHelper.Lerp(point0, point1, 0.66666666666666663);
- var point3 = GeometryHelper.Lerp(point1, point2, 0.33333333333333331);
- var segment = new SimpleSegment
- {
- Type = SegmentType.CubicBeizer,
- Points = new[] { point0, point, point3, point2 }
- };
- return segment;
- }
- public static SimpleSegment Create(Point point0, Point point1, Point point2, Point point3)
- {
- var segment = new SimpleSegment
- {
- Type = SegmentType.CubicBeizer,
- Points = new[] { point0, point1, point2, point3 }
- };
- return segment;
- }
- public void Flatten(IList<Point> resultPolyline, double tolerance, IList<double> resultParameters)
- {
- switch (Type)
- {
- case SegmentType.Line:
- resultPolyline.Add(Points[1]);
- if (resultParameters == null) break;
- resultParameters.Add(1.0);
- return;
- case SegmentType.CubicBeizer:
- BezierCurveFlattener.FlattenCubic(Points, tolerance, resultPolyline, true,
- resultParameters);
- break;
- default:
- return;
- }
- }
- }
|