protected static bool TryParseLength(string text, UnitSystem unitSystem, out double meters) { Match m = lengthRe.Match(text); if (!m.Success || !double.TryParse(m.Groups["number"].Value, out meters)) { meters = 0; return(false); } else { LengthUnit unit; switch (m.Groups["unit"].Value.ToLowerInvariant()) { case "ft": unit = LengthUnit.Foot; break; case "km": unit = LengthUnit.Kilometer; break; case "kyd": unit = LengthUnit.Kiloyard; break; case "m": unit = LengthUnit.Meter; break; case "mi": unit = LengthUnit.Mile; break; case "nm": case "nmi": unit = LengthUnit.NauticalMile; break; case "yd": unit = LengthUnit.Yard; break; default: switch (unitSystem) { case UnitSystem.Imperial: unit = LengthUnit.Mile; break; case UnitSystem.Metric: unit = LengthUnit.Kilometer; break; case UnitSystem.NauticalImperial: case UnitSystem.NauticalMetric: unit = LengthUnit.NauticalMile; break; default: unit = LengthUnit.Meter; break; } break; } meters = ManeuveringBoard.ConvertFromUnit(meters, unit); return(true); } }
protected static bool TryParseSpeed(string text, UnitSystem unitSystem, out double metersPerSecond) { Match m = speedRe.Match(text); if (!m.Success || !double.TryParse(m.Groups["number"].Value, out metersPerSecond)) { metersPerSecond = 0; return(false); } else { SpeedUnit unit; switch (m.Groups["unit"].Value.ToLowerInvariant()) { case "kn": case "kt": case "kts": unit = SpeedUnit.Knots; break; case "kph": unit = SpeedUnit.KilometersPerHour; break; case "mph": unit = SpeedUnit.MilesPerHour; break; case "mps": case "m/s": unit = SpeedUnit.MetersPerSecond; break; default: switch (unitSystem) { case UnitSystem.Imperial: unit = SpeedUnit.MilesPerHour; break; case UnitSystem.Metric: unit = SpeedUnit.KilometersPerHour; break; case UnitSystem.NauticalImperial: case UnitSystem.NauticalMetric: unit = SpeedUnit.Knots; break; default: unit = SpeedUnit.MetersPerSecond; break; } break; } metersPerSecond = ManeuveringBoard.ConvertFromUnit(metersPerSecond, unit); return(true); } }