DragAndDrop core
This commit is contained in:
79
Lattice.Core.Geometry/Point.cs
Normal file
79
Lattice.Core.Geometry/Point.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
namespace Lattice.Core.Geometry;
|
||||
|
||||
/// <summary>
|
||||
/// Представляет точку в двумерном пространстве с координатами X и Y.
|
||||
/// Эта структура является платформонезависимой и может использоваться
|
||||
/// во всех слоях системы Lattice.
|
||||
/// </summary>
|
||||
public struct Point : IEquatable<Point>
|
||||
{
|
||||
/// <summary>
|
||||
/// Получает точку с координатами (0, 0).
|
||||
/// </summary>
|
||||
public static readonly Point Zero = new(0, 0);
|
||||
|
||||
/// <summary>
|
||||
/// Координата X (горизонтальная).
|
||||
/// </summary>
|
||||
public double X { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Координата Y (вертикальная).
|
||||
/// </summary>
|
||||
public double Y { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Инициализирует новую точку с указанными координатами.
|
||||
/// </summary>
|
||||
/// <param name="x">Координата X.</param>
|
||||
/// <param name="y">Координата Y.</param>
|
||||
public Point(double x, double y)
|
||||
{
|
||||
X = x;
|
||||
Y = y;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создает точку из System.Drawing.Point.
|
||||
/// </summary>
|
||||
public static Point FromDrawingPoint(System.Drawing.Point point) =>
|
||||
new(point.X, point.Y);
|
||||
|
||||
/// <summary>
|
||||
/// Преобразует точку в System.Drawing.Point.
|
||||
/// </summary>
|
||||
public System.Drawing.Point ToDrawingPoint() =>
|
||||
new((int)X, (int)Y);
|
||||
|
||||
/// <summary>
|
||||
/// Определяет, равна ли эта точка другой точке.
|
||||
/// </summary>
|
||||
public bool Equals(Point other) =>
|
||||
Math.Abs(X - other.X) < double.Epsilon &&
|
||||
Math.Abs(Y - other.Y) < double.Epsilon;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override bool Equals(object? obj) =>
|
||||
obj is Point point && Equals(point);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override int GetHashCode() =>
|
||||
HashCode.Combine(X, Y);
|
||||
|
||||
/// <summary>
|
||||
/// Определяет, равны ли две точки.
|
||||
/// </summary>
|
||||
public static bool operator ==(Point left, Point right) =>
|
||||
left.Equals(right);
|
||||
|
||||
/// <summary>
|
||||
/// Определяет, не равны ли две точки.
|
||||
/// </summary>
|
||||
public static bool operator !=(Point left, Point right) =>
|
||||
!left.Equals(right);
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает строковое представление точки.
|
||||
/// </summary>
|
||||
public override string ToString() => $"{X}, {Y}";
|
||||
}
|
||||
Reference in New Issue
Block a user