using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IStation.Model { /// /// /// public partial class CurvePoint { /// /// 排序类型 /// public enum eSortType { X, Y } /// /// 相等类型 /// public enum eEqualType { X, Y, ALL } /// /// 排序比较 /// public class SortComparer : IComparer { public SortComparer(eSortType sortType) { _sortType = sortType; } private const double _ignore = 0.0001; private eSortType _sortType; int IComparer.Compare(CurvePoint obj1, CurvePoint obj2) { if (_sortType == eSortType.X) { if (Math.Abs(obj1.X - obj2.X) < _ignore) { return 0; } else if (obj1.X > obj2.X) { return 1; } else { return -1; } } else { if (Math.Abs(obj1.Y - obj2.Y) < _ignore) { return 0; } else if (obj1.Y > obj2.Y) { return 1; } else { return -1; } } } } /// /// 相等比较 /// public class EqualComparer : IEqualityComparer { public EqualComparer() { } public EqualComparer(double ignore, eEqualType equalType) { this._ignore = ignore; this._equalType = equalType; } private double _ignore = 0.001; private eEqualType _equalType = eEqualType.X; public bool Equals(CurvePoint lhs, CurvePoint rhs) { switch (_equalType) { case eEqualType.X: if (Math.Abs(lhs.X - rhs.X) < _ignore) return true; break; case eEqualType.Y: if (Math.Abs(lhs.Y - rhs.Y) < _ignore) return true; break; case eEqualType.ALL: if (Math.Abs(lhs.X - rhs.X) < _ignore && Math.Abs(lhs.Y - rhs.Y) < _ignore) return true; break; } return false; } public int GetHashCode(CurvePoint obj) { return 0; } } } }