Files
HandyControl/Net40/HandyControl_Net40/Expression/Drawing/MarchLocation.cs
T
2019-01-21 11:12:38 +08:00

50 lines
1.5 KiB
C#

using System.Collections.Generic;
using System.Windows;
namespace HandyControl.Expression.Drawing
{
internal class MarchLocation
{
public double After { get; private set; }
public double Before { get; private set; }
public int Index { get; private set; }
public double Ratio { get; private set; }
public MarchStopReason Reason { get; private set; }
public double Remain { get; private set; }
public static MarchLocation Create(MarchStopReason reason, int index, double before, double after,
double remain)
{
var num = before + after;
return new MarchLocation
{
Reason = reason,
Index = index,
Remain = remain,
Before = MathHelper.EnsureRange(before, 0.0, num),
After = MathHelper.EnsureRange(after, 0.0, num),
Ratio = MathHelper.EnsureRange(MathHelper.SafeDivide(before, num, 0.0), 0.0, 1.0)
};
}
public double GetArcLength(IList<double> accumulatedLengths)
{
return MathHelper.Lerp(accumulatedLengths[Index], accumulatedLengths[Index + 1], Ratio);
}
public Vector GetNormal(PolylineData polyline, double cornerRadius = 0.0)
{
return polyline.SmoothNormal(Index, Ratio, cornerRadius);
}
public Point GetPoint(IList<Point> points)
{
return GeometryHelper.Lerp(points[Index], points[Index + 1], Ratio);
}
}
}