DragAndDrop core

This commit is contained in:
FrigaT
2026-01-18 16:33:35 +03:00
parent 9ea82af329
commit 79bdd8bc62
229 changed files with 21214 additions and 2494 deletions

View 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}";
}