Example #1
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            var e = new Expression(FormulaString.ToLower(), EvaluateOptions.IgnoreCase);

            e.Parameters["pi"] = 3.14159265358979;

            var functionLookup = new Dictionary <string, Value>();

            foreach (var arg in args.Select((arg, i) => new { Value = arg, Index = i }))
            {
                var parameter = InPortData[arg.Index].NickName;
                if (arg.Value.IsFunction)
                {
                    functionLookup[parameter] = arg.Value;
                }
                else
                {
                    if (arg.Value.IsNumber)
                    {
                        e.Parameters[parameter] = ((Value.Number)arg.Value).Item;
                    }
                    else if (arg.Value.IsContainer)
                    {
                        e.Parameters[parameter] = Utils.UnwrapToSIUnit(arg.Value).Value *dynSettings.Controller.UnitsManager.UiLengthConversion;
                    }
                }
            }

            e.EvaluateFunction += delegate(string name, FunctionArgs fArgs)
            {
                if (functionLookup.ContainsKey(name))
                {
                    var func = ((Value.Function)functionLookup[name]).Item;
                    fArgs.Result = ((Value.Number)func.Invoke(
                                        Utils.ToFSharpList(
                                            fArgs.Parameters.Select(
                                                p => Value.NewNumber(Convert.ToDouble(p.Evaluate())))))).Item;
                }
                else
                {
                    fArgs.HasResult = false;
                }
            };

            return(Value.NewNumber(Convert.ToDouble(e.Evaluate())));
        }
Example #2
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            var e = new Expression(Formula);

            var functionLookup = new Dictionary<string, Value>();

            foreach (var arg in args.Select((arg, i) => new { Value = arg, Index = i }))
            {
                var parameter = InPortData[arg.Index].NickName;
                if (arg.Value.IsFunction)
                    functionLookup[parameter] = arg.Value;
                else
                    e.Parameters[parameter] = ((Value.Number)arg.Value).Item;
            }

            e.EvaluateFunction += delegate(string name, FunctionArgs fArgs)
            {
                if (functionLookup.ContainsKey(name))
                {
                    var func = ((Value.Function)functionLookup[name]).Item;
                    fArgs.Result = ((Value.Number)func.Invoke(
                        Utils.SequenceToFSharpList(
                            fArgs.Parameters.Select<Expression, Value>(
                                p => Value.NewNumber(Convert.ToDouble(p.Evaluate())))))).Item;
                }
                else
                {
                    fArgs.HasResult = false;
                }
            };

            return Value.NewNumber(Convert.ToDouble(e.Evaluate()));
        }
Example #3
0
        protected virtual void __eval_internal(FSharpList<FScheme.Value> args, Dictionary<PortData, FScheme.Value> outPuts)
        {
            var t = GetType();
            if (t != typeof(Watch) && !typeof(MathBase).IsAssignableFrom(t) )
            {
                args = Utils.ToFSharpList(args.Select(SIUnit.UnwrapToDoubleWithHostUnitConversion));
            }

            _errorCount = 0;
            __eval_internal_recursive(args, outPuts);
            if (_errorCount > 1)
                Error(string.Format("{0} runs generated errors.\n\n{1}", _errorCount, ToolTipText));
        }
Example #4
0
        protected internal virtual void __eval_internal(FSharpList<Value> args, Dictionary<PortData, Value> outPuts)
        {
            var argList = new List<string>();
            if (args.Count() > 0)
            {
                argList = args.Select(x => x.ToString()).ToList<string>();
            }
            var outPutsList = new List<string>();
            if(outPuts.Count() > 0)
            {
                outPutsList = outPuts.Keys.Select(x=>x.NickName).ToList<string>();
            }

            Debug.WriteLine(string.Format("__eval_internal : {0} : {1}",
                string.Join(",", argList),
                string.Join(",", outPutsList)));

            Evaluate(args, outPuts);
        }
Example #5
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            var e = new Expression(FormulaString.ToLower(), EvaluateOptions.IgnoreCase);

            e.Parameters["pi"] = 3.14159265358979;

            var functionLookup = new Dictionary<string, Value>();

            foreach (var arg in args.Select((arg, i) => new { Value = arg, Index = i }))
            {
                var parameter = InPortData[arg.Index].NickName;
                if (arg.Value.IsFunction)
                    functionLookup[parameter] = arg.Value;
                else
                {
                    if (arg.Value.IsNumber)
                    {
                        e.Parameters[parameter] = ((Value.Number)arg.Value).Item;
                    }
                    else if (arg.Value.IsContainer)
                    {
                        e.Parameters[parameter] = SIUnit.UnwrapToSIUnit(arg.Value).Value * dynSettings.Controller.UnitsManager.UiLengthConversion;
                    }
                }
            }

            e.EvaluateFunction += delegate(string name, FunctionArgs fArgs)
            {
                if (functionLookup.ContainsKey(name))
                {
                    var func = ((Value.Function)functionLookup[name]).Item;
                    fArgs.Result = ((Value.Number)func.Invoke(
                        Utils.ToFSharpList(
                            fArgs.Parameters.Select(
                                p => Value.NewNumber(Convert.ToDouble(p.Evaluate())))))).Item;
                }
                else
                {
                    fArgs.HasResult = false;
                }
            };

            return Value.NewNumber(Convert.ToDouble(e.Evaluate()));
        }
Example #6
0
        protected virtual void __eval_internal(FSharpList<FScheme.Value> args, Dictionary<PortData, FScheme.Value> outPuts)
        {
            //HACK: This allows us to apply a host units conversion for all
            //types in the DynamoRevit library
            if (GetType().Assembly.GetName().Name == "DynamoRevit")
            {
                args = args.Select(Utils.UnwrapToDoubleWithHostUnitConversion).ToFSharpList();
            }

            _errorCount = 0;
            __eval_internal_recursive(args, outPuts);
            if (_errorCount > 1)
                Error(string.Format("{0} runs generated errors.\n\n{1}", _errorCount, ToolTipText));
        }
Example #7
0
 public override Expression Evaluate(FSharpList<Expression> args)
 {
     var procedure = this.Bench.Environment.LookupSymbol(this.Symbol);
     if (procedure.IsFunction)
     {
         return (procedure as Expression.Function).Item
            .Invoke(ExecutionEnvironment.IDENT)
            .Invoke(
               Utils.convertSequence(
                  args.Select(
                     input => this.macroEnvironment.Evaluate(input)
                  )
               )
            );
     }
     else
         return base.Evaluate(args);
 }
Example #8
0
        private Expression evalIfDirty(FSharpList<Expression> args, ExecutionEnvironment environment)
        {
            //If this node requires a re-calc or if we haven't calc'd yet...
            if (this.IsDirty || this.oldValue == null)
            {
                //Store the environment
                this.macroEnvironment = environment;

                //Evaluate arguments, then evaluate this.
                this.oldValue = this.eval(
                   Utils.convertSequence(
                      args.Select(
                         input => environment.Evaluate(input)
                      )
                   )
                );
            }
            else //Otherwise, just increment the run counter.
                this.runCount++;

            //We're done here
            return this.oldValue;
        }