示例#1
0
        public FormulaFormatterViewModel(ILocalizerService localizerService, ITypesContainer container,
                                         Func <IArgumentViewModel> argumentViewModelGettingFunc,
                                         ISharedResourcesGlobalViewModel sharedResourcesGlobalViewModel, IFormattingService formattingService)
        {
            _localizerService               = localizerService;
            _container                      = container;
            _argumentViewModelGettingFunc   = argumentViewModelGettingFunc;
            _sharedResourcesGlobalViewModel = sharedResourcesGlobalViewModel;
            _formattingService              = formattingService;
            ArgumentViewModels              = new ObservableCollection <IArgumentViewModel>();
            _formulaFormatter               =
                _container.Resolve <IUshortsFormatter>(StringKeys.FORMULA_FORMATTER) as IFormulaFormatter;

            if (_formulaFormatter == null)
            {
                throw new ArgumentException();
            }

            CheckCommand          = new RelayCommand(OnCheckCommandExecute);
            DeleteArgumentCommand = new RelayCommand <IArgumentViewModel>(OnDeleteArgumentExecute);
            AddArgumentCommand    = new RelayCommand(OnAddArgumentExecute);
            _formulaFormatter.NumberOfSimbolsAfterComma = 3;

            InitializeFormulaTooltip();
        }
        public async Task <ushort[]> VisitFormulaFormatter(IUshortsFormatter formatter)
        {
            try
            {
                IFormulaFormatter formulaFormatter = formatter as IFormulaFormatter;

                (_formattedValue as INumericValue).NumValue = Math.Round((_formattedValue as INumericValue).NumValue,
                                                                         formulaFormatter.NumberOfSimbolsAfterComma);
                string     numstr     = (_formattedValue as INumericValue).NumValue.ToString().Replace(',', '.');
                Expression expression = new Expression("solve(" + "(" + formulaFormatter.FormulaString + ")" + "-" +
                                                       numstr +
                                                       ",x,0," + ushort.MaxValue + 1 + ")");

                if (formulaFormatter.UshortFormattableResources != null)
                {
                    //  int index = 1;
                    //   foreach (IUshortFormattable formattableUshortResource in formulaFormatter.UshortFormattableResources)
                    //    {
                    // if (formattableUshortResource is IDeviceValueContaining)
                    //{
                    //    IFormattedValue value =
                    //       formattableUshortResource.UshortsFormatter.Format(
                    //           (formattableUshortResource as IDeviceValueContaining).DeviceUshortsValue);
                    //   if (value is INumericValue)
                    //   {
                    //       double num = (value as INumericValue).NumValue;
                    //       expression.addArguments(new Argument("x" + index++, num));
                    //  }
                    //}
                    //   }
                }

                double x = expression.calculate();
                if (double.IsNaN(x))
                {
                    throw new ArgumentException();
                }
                if (x == (double)(ushort.MaxValue + 1))
                {
                    x = ushort.MaxValue;
                }
                return(new[] { (ushort)x });
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
示例#3
0
        //public async Task<IFormattedValue> VisitFormulaFormatter(IUshortsFormatter formatter)
        //{
        //    INumericValue formattedValue = _typesContainer.Resolve<INumericValue>();
        //    IterationDefinition iterationDefinition = new IterationDefinition();
        //    IFormulaFormatter formulaFormatter = formatter as IFormulaFormatter;

        //    iterationDefinition.FormulaString = formulaFormatter.FormulaString;

        //    iterationDefinition.ArgumentNames = new List<string>();
        //    iterationDefinition.ArgumentValues = new List<double>();
        //    iterationDefinition.ArgumentNames.Add("x");
        //    iterationDefinition.ArgumentValues.Add(_ushortsPayload[0]);
        //    iterationDefinition.NumberOfSimbolsAfterComma = formulaFormatter.NumberOfSimbolsAfterComma;
        //    if (formulaFormatter.UshortFormattableResources != null)
        //    {
        //        //  int index = 1;
        //        //  foreach (IUshortFormattable formattableUshortResource in formulaFormatter.UshortFormattableResources)
        //        //  {
        //        // if (formattableUshortResource is IDeviceValueContaining)
        //        // {
        //        //     IFormattedValue value = formattableUshortResource.UshortsFormatter
        //        //        .Format((formattableUshortResource as IDeviceValueContaining).DeviceUshortsValue);
        //        //    if (value is INumericValue)
        //        //   {
        //        //       double num = (value as INumericValue).NumValue;
        //        //        iterationDefinition.ArgumentNames.Add("x" + index++);
        //        //       iterationDefinition.ArgumentValues.Add(num);
        //        //    }
        //        //  }
        //        // }
        //    }

        //    formattedValue.NumValue = MemoizeCalculateResult(iterationDefinition, formulaFormatter.FormulaString,
        //        formulaFormatter.NumberOfSimbolsAfterComma);
        //    return formattedValue;
        //}

        public async Task <IFormattedValue> VisitFormulaFormatter(IUshortsFormatter formatter)
        {
            INumericValue       formattedValue      = _typesContainer.Resolve <INumericValue>();
            IterationDefinition iterationDefinition = new IterationDefinition();
            IFormulaFormatter   formulaFormatter    = formatter as IFormulaFormatter;

            iterationDefinition.FormulaString = formulaFormatter.FormulaString;

            iterationDefinition.ArgumentNames  = new List <string>();
            iterationDefinition.ArgumentValues = new List <double>();
            iterationDefinition.ArgumentNames.Add("x");
            iterationDefinition.ArgumentValues.Add(_ushortsPayload[0]);
            iterationDefinition.NumberOfSimbolsAfterComma = formulaFormatter.NumberOfSimbolsAfterComma;
            if (formulaFormatter.UshortFormattableResources != null)
            {
                int index = 1;
                foreach (string formattableUshortResource in formulaFormatter.UshortFormattableResources)
                {
                    var resource = _formattingContext.DeviceContext.DeviceSharedResources.SharedResourcesInContainers.FirstOrDefault(
                        container => container.ResourceName == formattableUshortResource);

                    var propValue = await StaticContainer.Container.Resolve <IPropertyValueService>()
                                    .GetValueOfProperty(resource.Resource, _formattingContext.DeviceContext, true, _isLocal);

                    if (propValue.Item is INumericValue numericValue)
                    {
                        double num = numericValue.NumValue;
                        iterationDefinition.ArgumentNames.Add("x" + index++);
                        iterationDefinition.ArgumentValues.Add(num);
                    }
                }
            }

            formattedValue.NumValue = MemoizeCalculateResult(iterationDefinition, formulaFormatter.FormulaString,
                                                             formulaFormatter.NumberOfSimbolsAfterComma);
            return(formattedValue);
        }