78 lines
2.8 KiB
C#
78 lines
2.8 KiB
C#
namespace QWERTYkez.Mensura.Units;
|
|
|
|
/// <summary>
|
|
/// Base value is MilliMetersSquared
|
|
/// </summary>
|
|
[UnitOperatorsGenerator, DebuggerDisplay("mm2 = {_MilliMetersSquared.ToString(\"0.###\")}, m2 = {MetersSquared.ToString(\"0.###\")}")]
|
|
public readonly partial record struct Area
|
|
{
|
|
[NotMapped, JsonIgnore] public double _MilliMetersSquared { get => MilliMetersSquared; init => MilliMetersSquared = value; }
|
|
|
|
public static Area MilliMeterSquared { get; } = new() { MilliMetersSquared = 1 };
|
|
[NotMapped, JsonIgnore] public double MilliMetersSquared
|
|
{
|
|
get => _Value;
|
|
init
|
|
{
|
|
_Value = value;
|
|
}
|
|
}
|
|
public static Area CentiMeterSquared { get; } = new() { CentiMetersSquared = 1 };
|
|
[NotMapped, JsonIgnore] public double CentiMetersSquared
|
|
{
|
|
get => AreaConv.CentiMetersSquared.From(_Value);
|
|
init
|
|
{
|
|
_Value = AreaConv.CentiMetersSquared.To(value);
|
|
}
|
|
}
|
|
|
|
public static Area MeterSquared { get; } = new() { MetersSquared = 1 };
|
|
[NotMapped, JsonIgnore] public double MetersSquared
|
|
{
|
|
get => AreaConv.MetersSquared.From(_Value);
|
|
init
|
|
{
|
|
_Value = AreaConv.MetersSquared.To(value);
|
|
}
|
|
}
|
|
|
|
public static Area Hector { get; } = new() { Hectors = 1 };
|
|
[NotMapped, JsonIgnore] public double Hectors
|
|
{
|
|
get => AreaConv.Hectors.From(_Value);
|
|
init
|
|
{
|
|
_Value = AreaConv.Hectors.To(value);
|
|
}
|
|
}
|
|
|
|
public static Area KiloMeterSquared { get; } = new() { KiloMetersSquared = 1 };
|
|
[NotMapped, JsonIgnore] public double KiloMetersSquared
|
|
{
|
|
get => AreaConv.KiloMetersSquared.From(_Value);
|
|
init
|
|
{
|
|
_Value = AreaConv.KiloMetersSquared.To(value);
|
|
}
|
|
}
|
|
|
|
public Area AddMilliMetersSquared(double value) => new(_Value + value);
|
|
public Area AddCentiMetersSquared(double value) => new(_Value + AreaConv.CentiMetersSquared.To(value));
|
|
public Area AddMetersSquared(double value) => new(_Value + AreaConv.MetersSquared.To(value));
|
|
public Area AddHectors(double value) => new(_Value + AreaConv.Hectors.To(value));
|
|
public Area AddKiloMetersSquared(double value) => new(_Value + AreaConv.KiloMetersSquared.To(value));
|
|
}
|
|
|
|
internal readonly struct AreaConv
|
|
{
|
|
private AreaConv(double multiplicator) => this.Multiplicator = multiplicator;
|
|
public double To(double value) => value * Multiplicator;
|
|
public double From(double value) => value / Multiplicator;
|
|
public double Multiplicator { get; init; }
|
|
public static AreaConv MilliMetersSquared { get; } = new(1);
|
|
public static AreaConv CentiMetersSquared { get; } = new(100);
|
|
public static AreaConv MetersSquared { get; } = new(1000000);
|
|
public static AreaConv Hectors { get; } = new(10000000000);
|
|
public static AreaConv KiloMetersSquared { get; } = new(1000000000000);
|
|
} |