using System; namespace DALI.ToolKit { public struct DaliStrokePoint: ICloneable { public DaliStrokePoint(double x, double y) { X = x; Y = y; T = TimeSpan.MaxValue; P = 0.5; } public DaliStrokePoint(double x, double y, TimeSpan t, double p) { X = x; Y = y; P = p; T = t; } public bool IsCoordinatesOnly { get => T == TimeSpan.MaxValue && P == 0.5; } public double X { get; set; } public double Y { get; set; } public double P { get; set; } public TimeSpan T { get; set; } public override string ToString() { return string.Format("[DaliStrokePoint: X={0}, Y={1}, P={2}, T={3}]", X, Y, P, T); } public override bool Equals(object obj) { if (!(obj is DaliStrokePoint)) return false; DaliStrokePoint ds = (DaliStrokePoint)obj; double epsylon = 0.01; var diffX = Math.Abs(ds.X - this.X); var diffY = Math.Abs(ds.Y - this.Y); if (diffX < epsylon && diffY < epsylon) { return true; } else return false; } public bool EqualsEpsylon(DaliStrokePoint ds, double epsylon) { var diffX = Math.Abs(ds.X - this.X); var diffY = Math.Abs(ds.Y - this.Y); if (diffX < epsylon && diffY < epsylon) { return true; } else return false; } public override int GetHashCode() { return this.GetHashCode(); } public object Clone() { return this.MemberwiseClone(); } } }