Files
QWERTYkez.Mensura/QWERTYkez.Mensura/Units/Pressure.cs
melekhin 4ff3cc7042 26,06,05
2026-06-05 12:13:35 +07:00

142 lines
5.6 KiB
C#

namespace QWERTYkez.Mensura.Units;
/// <summary>
/// Base value is Pascals or NewtonsPerMeterSquared
/// </summary>
[UnitGenerator, DebuggerDisplay("Pa, N/m2 = {NewtonsPerMeterSquared.ToString(\"0.###\")}, kgf/mm2 = {KiloGramForcesPerMilliMeterSquared.ToString(\"0.###\")}")]
public readonly partial record struct Pressure
{
public static Pressure Pascal { get; } = new() { _Pascals = 1 };
[NotMapped, JsonIgnore] public double _Pascals { get => _Value; init => _Value = value; }
public static Pressure NewtonPerMeterSquared { get; } = new() { NewtonsPerMeterSquared = 1 };
[NotMapped, JsonIgnore] public double NewtonsPerMeterSquared
{
get => _Value;
init
{
_Value = value;
}
}
public static Pressure KiloPascal { get; } = new() { KiloPascals = 1 };
[NotMapped, JsonIgnore] public double KiloPascals
{
get => PressureConv.KiloPascals.From(_Value);
init
{
_Value = PressureConv.KiloPascals.To(value);
}
}
public static Pressure MegaPascal { get; } = new() { MegaPascals = 1 };
[NotMapped, JsonIgnore] public double MegaPascals
{
get => PressureConv.MegaPascals.From(_Value);
init
{
_Value = PressureConv.MegaPascals.To(value);
}
}
public static Pressure NewtonPerMilliMeterSquared { get; } = new() { NewtonsPerMilliMeterSquared = 1 };
[NotMapped, JsonIgnore] public double NewtonsPerMilliMeterSquared
{
get => PressureConv.NewtonsPerMilliMeterSquared.From(_Value);
init
{
_Value = PressureConv.NewtonsPerMilliMeterSquared.To(value);
}
}
public static Pressure KiloGramForcePerMilliMeterSquared { get; } = new() { KiloGramForcesPerMilliMeterSquared = 1 };
[NotMapped, JsonIgnore] public double KiloGramForcesPerMilliMeterSquared
{
get => PressureConv.KiloGramForcesPerMilliMeterSquared.From(_Value);
init
{
_Value = PressureConv.KiloGramForcesPerMilliMeterSquared.To(value);
}
}
public static Pressure KiloGramForcePerMeterSquared { get; } = new() { KiloGramForcesPerMeterSquared = 1 };
[NotMapped, JsonIgnore] public double KiloGramForcesPerMeterSquared
{
get => PressureConv.KiloGramForcesPerMeterSquared.From(_Value);
init
{
_Value = PressureConv.KiloGramForcesPerMeterSquared.To(value);
}
}
public static Pressure KiloNewtonPerMilliMeterSquared { get; } = new() { KiloNewtonsPerMilliMeterSquared = 1 };
[NotMapped, JsonIgnore] public double KiloNewtonsPerMilliMeterSquared
{
get => PressureConv.KiloNewtonsPerMilliMeterSquared.From(_Value);
init
{
_Value = PressureConv.KiloNewtonsPerMilliMeterSquared.To(value);
}
}
public static Pressure KiloNewtonPerMeterSquared { get; } = new() { KiloNewtonsPerMeterSquared = 1 };
[NotMapped, JsonIgnore] public double KiloNewtonsPerMeterSquared
{
get => PressureConv.KiloNewtonsPerMeterSquared.From(_Value);
init
{
_Value = PressureConv.KiloNewtonsPerMeterSquared.To(value);
}
}
public static Pressure TonForcePerMilliMeterSquared { get; } = new() { TonForcesPerMilliMeterSquared = 1 };
[NotMapped, JsonIgnore] public double TonForcesPerMilliMeterSquared
{
get => PressureConv.TonForcesPerMilliMeterSquared.From(_Value);
init
{
_Value = PressureConv.TonForcesPerMilliMeterSquared.To(value);
}
}
public static Pressure TonForcePerMeterSquared { get; } = new() { TonForcesPerMeterSquared = 1 };
[NotMapped, JsonIgnore] public double TonForcesPerMeterSquared
{
get => PressureConv.TonForcesPerMeterSquared.From(_Value);
init
{
_Value = PressureConv.TonForcesPerMeterSquared.To(value);
}
}
public Pressure AddPascals(double value) => new(_Value + value);
public Pressure AddNewtonsPerMeterSquared(double value) => new(_Value + value);
public Pressure AddKiloPascals(double value) => new(_Value + PressureConv.KiloPascals.To(value));
public Pressure AddMegaPascals(double value) => new(_Value + PressureConv.MegaPascals.To(value));
public Pressure AddKiloGramForcesPerMeterSquared(double value) => new(_Value + PressureConv.KiloGramForcesPerMeterSquared.To(value));
public Pressure AddTonsPerMeterSquared(double value) => new(_Value + PressureConv.TonForcesPerMeterSquared.To(value));
}
internal readonly struct PressureConv
{
private PressureConv(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 PressureConv Pascals { get; } = new(1);
public static PressureConv NewtonsPerMeterSquared { get; } = new(1);
public static PressureConv KiloPascals { get; } = new(1000);
public static PressureConv MegaPascals { get; } = new(1000000);
public static PressureConv NewtonsPerMilliMeterSquared { get; } = new(1000000);
public static PressureConv KiloGramForcesPerMeterSquared { get; } = new(Constants.g);
public static PressureConv KiloGramForcesPerMilliMeterSquared { get; } = new(Constants.g * 1000000);
public static PressureConv KiloNewtonsPerMeterSquared { get; } = new(1000);
public static PressureConv KiloNewtonsPerMilliMeterSquared { get; } = new(1000000000);
public static PressureConv TonForcesPerMeterSquared { get; } = new(Constants.g * 1000);
public static PressureConv TonForcesPerMilliMeterSquared { get; } = new(Constants.g * 1000000000000);
}