namespace Lattice.Core.Geometry; /// /// Представляет размеры в двумерном пространстве с шириной и высотой. /// Эта структура является платформонезависимой и может использоваться /// во всех слоях системы Lattice. /// public struct Size : IEquatable { /// /// Получает размер с нулевой шириной и высотой. /// public static readonly Size Zero = new(0, 0); /// /// Ширина. /// public double Width { get; set; } /// /// Высота. /// public double Height { get; set; } /// /// Получает признак того, что размер является пустым (нулевая ширина или высота). /// public bool IsEmpty => Width <= 0 || Height <= 0; /// /// Инициализирует новый размер с указанными значениями. /// /// Ширина. /// Высота. public Size(double width, double height) { Width = width; Height = height; } /// /// Создает размер из System.Drawing.Size. /// public static Size FromDrawingSize(System.Drawing.Size size) => new(size.Width, size.Height); /// /// Преобразует размер в System.Drawing.Size. /// public System.Drawing.Size ToDrawingSize() => new((int)Width, (int)Height); /// /// Определяет, равен ли этот размер другому размеру. /// public bool Equals(Size other) => Math.Abs(Width - other.Width) < double.Epsilon && Math.Abs(Height - other.Height) < double.Epsilon; /// public override bool Equals(object? obj) => obj is Size size && Equals(size); /// public override int GetHashCode() => HashCode.Combine(Width, Height); /// /// Определяет, равны ли два размера. /// public static bool operator ==(Size left, Size right) => left.Equals(right); /// /// Определяет, не равны ли два размера. /// public static bool operator !=(Size left, Size right) => !left.Equals(right); /// /// Возвращает строковое представление размера. /// public override string ToString() => $"{Width} × {Height}"; }