namespace QWERTYkez.ExcelProcessor; /// /// Предоставляет типобезопасное представление высоты строки в Excel с поддержкой различных единиц измерения. /// public readonly struct RowHeight(double points) { private const double POINTS_PER_INCH = 72.0; private const double INCH_PER_CM = 1.0 / 2.54; private const double POINTS_PER_CM = POINTS_PER_INCH * INCH_PER_CM; // ≈ 28.3464566929 private const double POINTS_PER_MM = POINTS_PER_CM / 10.0; // ≈ 2.83464566929 private const double DXA_PER_POINT = 20.0; // 1 point = 20 dxa private const double POINTS_PER_DXA = 1.0 / DXA_PER_POINT; /// Высота в пунктах (points). public double Points { get; } = points; public static RowHeight FromPoints(double points) => new(points); public static RowHeight FromInch(double inch) => new(inch * POINTS_PER_INCH); public static RowHeight FromDXA(double dxa) => new(dxa * POINTS_PER_DXA); public static RowHeight FromCM(double cm) => new(cm * POINTS_PER_CM); public static RowHeight FromMM(double mm) => new(mm * POINTS_PER_MM); public double Inch => Points / POINTS_PER_INCH; public double DXA => Points / POINTS_PER_DXA; public double CM => Points / POINTS_PER_CM; public double MM => Points / POINTS_PER_MM; }