AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.9.10" />

 Angle

Represents an angle value.
using AngleSharp.Extensions; using System; namespace AngleSharp.Css.Values { public struct Angle : IEquatable<Angle>, IComparable<Angle>, IFormattable { public enum Unit : byte { None, Deg, Rad, Grad, Turn } public static readonly Angle Zero = new Angle(0, Unit.Rad); public static readonly Angle HalfQuarter = new Angle(45, Unit.Deg); public static readonly Angle Quarter = new Angle(90, Unit.Deg); public static readonly Angle TripleHalfQuarter = new Angle(135, Unit.Deg); public static readonly Angle Half = new Angle(180, Unit.Deg); private readonly float _value; private readonly Unit _unit; public float Value => _value; public Unit Type => _unit; public string UnitString { get { switch (_unit) { case Unit.Deg: return UnitNames.Deg; case Unit.Grad: return UnitNames.Grad; case Unit.Turn: return UnitNames.Turn; case Unit.Rad: return UnitNames.Rad; default: return string.Empty; } } } public Angle(float value, Unit unit) { _value = value; _unit = unit; } public static bool operator >=(Angle a, Angle b) { int num = a.CompareTo(b); if (num != 0) return num == 1; return true; } public static bool operator >(Angle a, Angle b) { return a.CompareTo(b) == 1; } public static bool operator <=(Angle a, Angle b) { int num = a.CompareTo(b); if (num != 0) return num == -1; return true; } public static bool operator <(Angle a, Angle b) { return a.CompareTo(b) == -1; } public int CompareTo(Angle other) { return ToRadian().CompareTo(other.ToRadian()); } public static bool TryParse(string s, out Angle result) { float result2 = 0; Unit unit = GetUnit(s.CssUnit(out result2)); if (unit != 0) { result = new Angle(result2, unit); return true; } result = default(Angle); return false; } public static Unit GetUnit(string s) { if (s == "deg") return Unit.Deg; if (s == "grad") return Unit.Grad; if (s == "turn") return Unit.Turn; if (s == "rad") return Unit.Rad; return Unit.None; } public float ToRadian() { switch (_unit) { case Unit.Deg: return (float)(0.017453292519943295 * (double)_value); case Unit.Grad: return (float)(0.015707963267948967 * (double)_value); case Unit.Turn: return (float)(6.283185307179586 * (double)_value); default: return _value; } } public float ToTurns() { switch (_unit) { case Unit.Deg: return (float)((double)_value / 360); case Unit.Grad: return (float)((double)_value / 400); case Unit.Rad: return (float)((double)_value / 6.283185307179586); default: return _value; } } public bool Equals(Angle other) { return ToRadian() == other.ToRadian(); } public static bool operator ==(Angle a, Angle b) { return a.Equals(b); } public static bool operator !=(Angle a, Angle b) { return !a.Equals(b); } public override bool Equals(object obj) { Angle? nullable = obj as Angle?; if (nullable.HasValue) return Equals(nullable.Value); return false; } public override int GetHashCode() { return (int)_value; } public override string ToString() { return _value.ToString() + UnitString; } public string ToString(string format, IFormatProvider formatProvider) { return _value.ToString(format, formatProvider) + UnitString; } } }