Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
            }
        }