public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { ConvertToLength convertTo = ConvertToLength.Millimeter; if (parameter is string paraString) { if (value is double d) { if (!double.IsNaN(d)) { if (Enum.TryParse(paraString, out ConvertToLength result)) { return($"{value:#.###} {shortHandnames[(int)result]}"); } else { return($"{value:#.###} {shortHandnames[(int)convertTo]}"); } } else { return(value); } } else { return(value); } } return(value); //if (value is string str) //{ // if (str.Contains(space)) // { // var args = str.Split(space); // if (args.Length == 2 && args.Count(a => a.Length > 0) == 2) // { // System.Diagnostics.Debug.WriteLine($"recieved {args[0]}, {args[1]}"); // if (double.TryParse(args[0], out double result)) // return result; // } // } //} //else if (value is double d) // return d; //return value; //throw new NotImplementedException(); }
public static double ConvertLength(double measurement, SupportedLength length, ConvertToLength convertTo) { double result = double.NaN; if (!double.IsNaN(measurement)) { switch (convertTo) { case ConvertToLength.Millimeter: switch (length) { case SupportedLength.Millimeter: result = measurement; break; case SupportedLength.Meter: result = measurement * 1e3; break; case SupportedLength.Inches: result = measurement * Constants.InchToMillimeters; break; case SupportedLength.Centimeter: result = measurement * 10; break; default: System.Diagnostics.Debug.WriteLine($"{length} not supported."); break; } break; case ConvertToLength.Meter: switch (length) { case SupportedLength.Millimeter: result = measurement * 1e-3; break; case SupportedLength.Inches: result = measurement * Constants.InchToMillimeters * Constants.MillimetersToMeters; break; case SupportedLength.Meter: result = measurement; break; case SupportedLength.Centimeter: result = measurement * 1e-2; break; default: System.Diagnostics.Debug.WriteLine($"{length} not supported."); break; } break; case ConvertToLength.Centimeter: switch (length) { case SupportedLength.Millimeter: result = measurement * 0.1; break; case SupportedLength.Meter: result = measurement * 100; break; case SupportedLength.Inches: result = measurement * 2.54; break; case SupportedLength.Centimeter: result = measurement; break; default: System.Diagnostics.Debug.WriteLine($"{length} not supported."); break; } break; default: break; } return(result); } return(measurement); }
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { ConvertToLength convertTo = ConvertToLength.Millimeter; string defaultUnits; if (parameter is string paraString) { if (Enum.TryParse(paraString, out ConvertToLength result)) { convertTo = result; } defaultUnits = shortHandnames[(int)convertTo]; } else { defaultUnits = shortHandnames[(int)convertTo]; } if (value is string str) { if (ValueWithUnits.TryParse(str, out ValueWithUnits valueWithUnits)) { //var match = Regex.Match(str, WeightWithUnitsConverter.regexFindNumberAndUnit); SupportedLength supported = FilamentMath.SupportedLengthAlias(string.IsNullOrEmpty(valueWithUnits.Units) ? defaultUnits : valueWithUnits.Units); return(FilamentMath.ConvertLength(valueWithUnits.Value, supported, convertTo)); } else if (CompoundFractionWithUnits.TryParse(str, out CompoundFractionWithUnits compoundFractionWithUnits)) { //var fracMatch = Regex.Match(str, regexFindFraction); SupportedLength supported = FilamentMath.SupportedLengthAlias(!string.IsNullOrEmpty(compoundFractionWithUnits.Units) ? compoundFractionWithUnits.Units : "in"); return(FilamentMath.ConvertLength(compoundFractionWithUnits.Value, supported, convertTo)); //double number; //double numerator; //double denominator; //if (double.TryParse(fracMatch.Groups["numerator"].Value, out numerator) && double.TryParse(fracMatch.Groups["denominator"].Value, out denominator)) //{ // if (!string.IsNullOrEmpty(fracMatch.Groups["whole"].Value)) // { // if (double.TryParse(fracMatch.Groups["whole"].Value, out number)) // { // return (number + (numerator / denominator)) * ConversionFactor(string.IsNullOrEmpty(fracMatch.Groups["units"].Value) ? "in" : fracMatch.Groups["units"].Value.ToLower(), convertTo); // } // else // return double.NaN; // } // else // { // return (numerator / denominator) * ConversionFactor(string.IsNullOrEmpty(fracMatch.Groups["units"].Value) ? "in" : fracMatch.Groups["units"].Value.ToLower(), convertTo); // } } else { return(double.NaN); } } else { return(double.NaN); } }