Example #1
0
        public void XYZFromReferencePoint()
        {
            var model = dynSettings.Controller.DynamoModel;

            string samplePath = Path.Combine(_testPath, @".\XYZFromReferencePoint.dyn");
            string testPath   = Path.GetFullPath(samplePath);

            model.Open(testPath);
            ReferencePoint rp;

            using (_trans = new Transaction(dynRevitSettings.Doc.Document))
            {
                _trans.Start("Create a reference point.");

                rp = dynRevitSettings.Doc.Document.FamilyCreate.NewReferencePoint(new XYZ());

                _trans.Commit();
            }
            FSharpList <FScheme.Value> args = FSharpList <FScheme.Value> .Empty;

            args = FSharpList <FScheme.Value> .Cons(FScheme.Value.NewContainer(rp), args);

            //find the XYZFromReferencePoint node
            var node = dynSettings.Controller.DynamoModel.Nodes.Where(x => x is XyzFromReferencePoint).First();

            FScheme.Value v = ((NodeWithOneOutput)node).Evaluate(args);
            Assert.IsInstanceOf(typeof(XYZ), ((FScheme.Value.Container)v).Item);
        }
Example #2
0
        public string BuildValueString(FScheme.Value eIn, int currentListIndex, int maxListIndex, int currentDepth, int maxDepth)
        {
            if (eIn == null)
            {
                return("<null>");
            }

            string accString = String.Concat(Enumerable.Repeat("  ", currentDepth));

            if (maxDepth == currentDepth || currentListIndex == maxListIndex)
            {
                accString += "...\n";
                return(accString);
            }

            if (eIn.IsContainer)
            {
                var str = (eIn as FScheme.Value.Container).Item != null
                    ? (eIn as FScheme.Value.Container).Item.ToString()
                    : "null";

                accString += str;
            }
            else if (eIn.IsFunction)
            {
                accString += "<function>";
            }
            else if (eIn.IsList)
            {
                accString += "List\n";

                var list = (eIn as FScheme.Value.List).Item;

                // build all elements of sub list
                foreach (var e in list.Select((x, i) => new { Element = x, Index = i }))
                {
                    if (e.Index > maxListIndex)
                    {
                        break;
                    }
                    accString += BuildValueString(e.Element, e.Index, maxListIndex, currentDepth + 1, maxDepth);
                }
            }
            else if (eIn.IsNumber)
            {
                accString += (eIn as FScheme.Value.Number).Item.ToString();
            }
            else if (eIn.IsString)
            {
                accString += "\"" + (eIn as FScheme.Value.String).Item + "\"";
            }
            else if (eIn.IsSymbol)
            {
                accString += "<" + (eIn as FScheme.Value.Symbol).Item + ">";
            }

            accString += "\n";

            return(accString);
        }
Example #3
0
        public double GetDoubleFromFSchemeValue(FScheme.Value value)
        {
            var doubleWatchVal = 0.0;

            Assert.AreEqual(true, Dynamo.FSchemeInterop.Utils.Convert(value, ref doubleWatchVal));
            return(doubleWatchVal);
        }
Example #4
0
        private double getDoubleFromFSchemeValue(FScheme.Value value)
        {
            var doubleWatchVal = 0.0;

            Assert.AreEqual(true, FSchemeInterop.Utils.Convert(value, ref doubleWatchVal));
            return(doubleWatchVal);
        }
Example #5
0
        public static string GetStringFromFSchemeValue(this FScheme.Value value)
        {
            string stringValue = string.Empty;

            Assert.IsTrue(Utils.Convert(value, ref stringValue));
            return(stringValue);
        }
Example #6
0
        void registerButt_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            //data = Value.NewList(FSharpList<Value>.Empty);

            View activeView = dynRevitSettings.Doc.ActiveView;

            PickedSunAndShadowSettings = activeView.SunAndShadowSettings;


            if (PickedSunAndShadowSettings != null)
            {
                sunAndShadowSettingsID = activeView.SunAndShadowSettings.Id;
                this.RegisterEvalOnModified(sunAndShadowSettingsID); // register with the DMU, TODO - watch out for view changes, as sun is view specific
                XYZ sunVector = GetSunDirection(PickedSunAndShadowSettings);


                this.data = FScheme.Value.NewContainer(sunVector);

                this.tb.Text = PickedSunAndShadowSettings.Name;
            }
            else
            {
                //sunPathButt.Content = "Select Instance";
                this.tb.Text = "Nothing Selected";
            }
        }
Example #7
0
        internal static dynamic convertFromValue(FScheme.Value exp, ObjectOperations invoker)
        {
            if (exp.IsList)
            {
                return(((FScheme.Value.List)exp).Item.Select(x => convertFromValue(x, invoker)).ToList());
            }
            else if (exp.IsNumber)
            {
                return(((FScheme.Value.Number)exp).Item);
            }
            else if (exp.IsString)
            {
                return(((FScheme.Value.String)exp).Item);
            }
            else if (exp.IsContainer)
            {
                return(((FScheme.Value.Container)exp).Item);
            }
            else if (exp.IsFunction)
            {
                var func = ((FScheme.Value.Function)exp).Item;

                PyWrapper wrapped =
                    args =>
                    convertFromValue(
                        func.Invoke(args.Select(a => convertToValue(a, invoker) as FScheme.Value).ToFSharpList()), invoker);

                return(wrapped);
            }
            else
            {
                throw new Exception("Not allowed to pass Functions into a Python Script.");
            }
        }
Example #8
0
        public static double GetDoubleFromFSchemeValue(this FScheme.Value value)
        {
            var doubleWatchVal = 0.0;

            Assert.IsTrue(Utils.Convert(value, ref doubleWatchVal));
            return(doubleWatchVal);
        }
Example #9
0
File: XYZ.cs Project: l2obin/Dynamo
        public override FScheme.Value Evaluate(FSharpList <FScheme.Value> args)
        {
            if (!args[0].IsList)
            {
                throw new Exception("Input must be a list of numbers.");
            }

            FSharpList <FScheme.Value> vals = ((FScheme.Value.List)args[0]).Item;
            var len = vals.Length;

            if (len % 3 != 0)
            {
                throw new Exception("List size must be a multiple of 3");
            }

            var result = new FScheme.Value[len / 3];
            int count  = 0;

            while (!vals.IsEmpty)
            {
                result[count] = FScheme.Value.NewContainer(new XYZ(
                                                               ((FScheme.Value.Number)vals.Head).Item,
                                                               ((FScheme.Value.Number)vals.Tail.Head).Item,
                                                               ((FScheme.Value.Number)vals.Tail.Tail.Head).Item));
                vals = vals.Tail.Tail.Tail;
                count++;
            }

            return(FScheme.Value.NewList(Utils.SequenceToFSharpList(result)));
        }
Example #10
0
        private FSharpList <FScheme.Value> getListFromFSchemeValue(FScheme.Value value)
        {
            FSharpList <FScheme.Value> listWatchVal = null;

            Assert.AreEqual(true, FSchemeInterop.Utils.Convert(value, ref listWatchVal));
            return(listWatchVal);
        }
Example #11
0
 public PortData(string nickName, string tip, Type portType, FScheme.Value defaultValue = null)
 {
     NickName      = nickName;
     ToolTipString = tip;
     PortType      = portType;
     DefaultValue  = defaultValue;
 }
Example #12
0
        public FScheme.Value Evaluate(IEnumerable <Binding> bindings)
        {
            var scope = this.engine.CreateScope();

            foreach (var bind in bindings)
            {
                scope.SetVariable(bind.Symbol, bind.Value);
            }

            try
            {
                this.source.Execute(scope);
            }
            catch (Exception e)
            {
                var    eo    = engine.GetService <ExceptionOperations>();
                string error = eo.FormatException(e);
                return(FScheme.Value.NewString(error));
            }

            FScheme.Value result = FScheme.Value.NewNumber(1);

            if (scope.ContainsVariable("OUT"))
            {
                dynamic output = scope.GetVariable("OUT");

                result = Converters.convertToValue(output);
            }

            return(result);
        }
Example #13
0
        private string getStringFromFSchemeValue(FScheme.Value value)
        {
            string stringValue = string.Empty;

            Assert.AreEqual(true, FSchemeInterop.Utils.Convert(value, ref stringValue));
            return(stringValue);
        }
Example #14
0
        public static FSharpList <FScheme.Value> GetListFromFSchemeValue(this FScheme.Value value)
        {
            FSharpList <FScheme.Value> listWatchVal = null;

            Assert.IsTrue(Utils.Convert(value, ref listWatchVal));
            return(listWatchVal);
        }
Example #15
0
        public static T GetObjectFromFSchemeValue <T>(this FScheme.Value value)
        {
            Assert.IsInstanceOf <FScheme.Value.Container>(value);
            var o = (value as FScheme.Value.Container).Item;

            Assert.IsInstanceOf <T>(o);
            return((T)o);
        }
Example #16
0
        private static FScheme.Value setParam(FamilySymbol fi, Definition paramDef, FScheme.Value valueExpr)
        {
            var p = fi.get_Parameter(paramDef);

            if (p != null)
            {
                return(_setParam(fi, p, valueExpr));
            }
            throw new Exception("Parameter \"" + paramDef.Name + "\" was not found!");
        }
Example #17
0
        public List <List <FScheme.Value> > ConvertTo2DList(FScheme.Value v)
        {
            if (v.IsList)
            {
                return(((FScheme.Value.List)v).Item.Select(ConvertRow).ToList());
            }

            var list = new List <List <FScheme.Value> >();

            list.Add(ConvertRow(v));
            return(list);
        }
Example #18
0
 internal static dynamic convertFromValue(FScheme.Value exp)
 {
     if (exp.IsList)
     {
         return(((FScheme.Value.List)exp).Item.Select(x => convertFromValue(x)).ToList());
     }
     else if (exp.IsNumber)
     {
         return(((FScheme.Value.Number)exp).Item);
     }
     else if (exp.IsString)
     {
         return(((FScheme.Value.String)exp).Item);
     }
     else if (exp.IsContainer)
     {
         return(((FScheme.Value.Container)exp).Item);
     }
     //else if (exp.IsFunction)
     //{
     //   return new Func<IList<dynamic>, dynamic>(
     //      args =>
     //         ((Value.Function)exp).Item
     //            .Invoke(ExecutionEnvironment.IDENT)
     //            .Invoke(Utils.convertSequence(args.Select(
     //               x => (Value)Converters.convertToValue(x)
     //            )))
     //   );
     //}
     //else if (exp.IsSpecial)
     //{
     //   return new Func<IList<dynamic>, dynamic>(
     //      args =>
     //         ((Value.Special)exp).Item
     //            .Invoke(ExecutionEnvironment.IDENT)
     //            .Invoke(
     //}
     //else if (exp.IsCurrent)
     //{
     //   return new Func<dynamic, dynamic>(
     //      ex =>
     //         Converters.convertFromValue(
     //            ((Value.Current)exp).Item.Invoke(Converters.convertToValue(ex))
     //         )
     //   );
     //}
     else
     {
         throw new Exception("Not allowed to pass Functions into a Python Script.");
     }
 }
Example #19
0
 public static FScheme.Value ConvertAsAtom(FScheme.Value v)
 {
     if (v == null)
     {
         return(FScheme.Value.NewString(""));
     }
     else if (v.IsString || v.IsNumber)
     {
         return(v);
     }
     else
     {
         return(FScheme.Value.NewString(v.ToString()));
     }
 }
Example #20
0
        public override FScheme.Value Evaluate(FSharpList <FScheme.Value> args)
        {
            if (PickedSunAndShadowSettings == null)
            {
                throw new Exception("The sun and shadow settings have not been selected. Click to pick the sun and shadow settings from the active view.");
            }

            if (PickedSunAndShadowSettings.Id.IntegerValue == sunAndShadowSettingsID.IntegerValue) // sanity check
            {
                XYZ sunVector = GetSunDirection(PickedSunAndShadowSettings);
                this.data = FScheme.Value.NewContainer(sunVector);
                return(data);
            }
            else
            {
                throw new Exception("SANITY CHECK FAILED");
            }
        }
Example #21
0
        /// <summary>
        /// Returns the objects from a Value type which have associated visualizers.
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static List <object> GetDrawableFromValue(FScheme.Value value)
        {
            var drawables = new List <object>();

            if (value == null)
            {
                return(drawables);
            }

            var viz = dynSettings.Controller.VisualizationManager;

            if (value.IsList)
            {
                foreach (var val_inner in ((FScheme.Value.List)value).Item)
                {
                    drawables.AddRange(GetDrawableFromValue(val_inner));
                }
                return(drawables);
            }

            var container = value as FScheme.Value.Container;

            if (container == null)
            {
                return(drawables);
            }

            var obj = ((FScheme.Value.Container)container).Item;

            if (obj != null)
            {
                var t          = obj.GetType();
                var visualizer = viz.Visualizers.FirstOrDefault(x => x.Key == t || x.Key.IsAssignableFrom(t));

                if (visualizer.Value != null)
                {
                    drawables.Add(obj);
                }
            }

            return(drawables);
        }
Example #22
0
 public static List <FScheme.Value> ConvertRow(FScheme.Value v)
 {
     if (v.IsString || v.IsNumber)
     {
         return(new List <FScheme.Value>()
         {
             v
         });
     }
     else if (v.IsList)
     {
         return(((FScheme.Value.List)v).Item.Select(ConvertAsAtom).ToList());
     }
     else
     {
         return(new List <FScheme.Value>()
         {
             ConvertAsAtom(v)
         });
     }
 }
Example #23
0
        public FScheme.Value Evaluate(IEnumerable <KeyValuePair <string, dynamic> > bindings, IEnumerable <KeyValuePair <string, FScheme.Value> > inputs)
        {
            var scope = _engine.CreateScope();

            foreach (var bind in bindings)
            {
                scope.SetVariable(bind.Key, bind.Value);
            }

            var ops = scope.Engine.CreateOperations();

            foreach (var input in inputs)
            {
                scope.SetVariable(input.Key, Converters.convertFromValue(input.Value, ops));
            }

            try
            {
                _source.Execute(scope);
            }
            catch (Exception e)
            {
                var    eo    = _engine.GetService <ExceptionOperations>();
                string error = eo.FormatException(e);
                return(FScheme.Value.NewString(error));
            }

            FScheme.Value result = FScheme.Value.NewNumber(1);

            if (scope.ContainsVariable("OUT"))
            {
                dynamic output = scope.GetVariable("OUT");

                result = Converters.convertToValue(output, ops);
            }

            return(result);
        }
Example #24
0
 private static FScheme.Value _setParam(FamilySymbol ft, Parameter p, FScheme.Value valueExpr)
 {
     if (p.StorageType == StorageType.Double)
     {
         p.Set(((FScheme.Value.Number)valueExpr).Item);
     }
     else if (p.StorageType == StorageType.Integer)
     {
         p.Set((int)((FScheme.Value.Number)valueExpr).Item);
     }
     else if (p.StorageType == StorageType.String)
     {
         p.Set(((FScheme.Value.String)valueExpr).Item);
     }
     else if (valueExpr.IsNumber)
     {
         p.Set(new ElementId((int)(valueExpr as FScheme.Value.Number).Item));
     }
     else
     {
         p.Set((ElementId)((FScheme.Value.Container)valueExpr).Item);
     }
     return(FScheme.Value.NewContainer(ft));
 }
Example #25
0
        /// <summary>
        /// Returns the objects from a Value type which have associated visualizers
        /// along with a string tag representing the array index of the value, i.e. [0][5][3]
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static Dictionary <string, object> GetDrawableFromValue(List <int> chain, FScheme.Value value)
        {
            //var drawables = new List<object>();
            var drawables = new Dictionary <string, object>();

            if (value == null)
            {
                return(drawables);
            }

            var viz = dynSettings.Controller.VisualizationManager;

            if (value.IsList)
            {
                int count = 0;
                foreach (var val_inner in ((FScheme.Value.List)value).Item)
                {
                    var subChain = new List <int>(chain);
                    subChain.Add(count);
                    var innerDrawables = GetDrawableFromValue(subChain, val_inner);
                    innerDrawables.ToList().ForEach(x => drawables.Add(x.Key, x.Value));

                    count++;
                }
                return(drawables);
            }

            var container = value as FScheme.Value.Container;

            if (container == null)
            {
                return(drawables);
            }

            var obj = ((FScheme.Value.Container)container).Item;

            if (obj != null)
            {
                var t          = obj.GetType();
                var visualizer = viz.Visualizers.FirstOrDefault(x => x.Key == t || x.Key.IsAssignableFrom(t));

                if (visualizer.Value != null)
                {
                    drawables.Add(TagFromList(chain), obj);
                }
            }

            return(drawables);
        }
Example #26
0
 void DrawPython(FScheme.Value val, string id)
 {
     //DrawContainers(val, id);
 }
Example #27
0
        protected internal virtual void Run(bool runInDebug, IEnumerable <dynNodeModel> topElements, FScheme.Expression runningExpression)
        {
            //Print some stuff if we're in debug mode
            if (runInDebug)
            {
// NOPE
                //if (dynSettings.Bench != null)
                //{
                //    //string exp = FScheme.print(runningExpression);
                //    //dynSettings.Bench.Dispatcher.Invoke(new Action(
                //    //                            delegate
                //    //                            {
                //    //                                foreach (dynNodeModel node in topElements)
                //    //                                {
                //    //                                    string exp = node.PrintExpression();
                //    //                                    dynSettings.Controller.DynamoViewModel.Log("> " + exp);
                //    //                                }
                //    //                            }
                //    //                            ));
                //}
            }

            try
            {
                //Evaluate the expression
                FScheme.Value expr = this.FSchemeEnv.Evaluate(runningExpression);

                if (dynSettings.Bench != null)
                {
                    //Print some more stuff if we're in debug mode
                    if (runInDebug && expr != null)
                    {
// NOPE
                        //dynSettings.Bench.Dispatcher.Invoke(new Action(
                        //                            () =>
                        //                            dynSettings.Controller.DynamoViewModel.Log(FScheme.print(expr))
                        //                            ));
                    }
                }
            }
            catch (CancelEvaluationException ex)
            {
                /* Evaluation was cancelled */

                OnRunCancelled(false);
                //this.RunCancelled = false;
                if (ex.Force)
                {
                    runAgain = false;
                }
            }
            catch (Exception ex)
            {
                /* Evaluation failed due to error */
// NOPE
                //if (dynSettings.Bench != null)
                //{
                //    //Print unhandled exception
                //    if (ex.Message.Length > 0)
                //    {
                //        dynSettings.Bench.Dispatcher.Invoke(new Action(
                //                                    delegate { dynSettings.Controller.DynamoViewModel.Log(ex); }
                //                                    ));
                //    }
                //}

                OnRunCancelled(true);
                RunCancelled = true;
                runAgain     = false;
            }

            OnEvaluationCompleted();
        }
Example #28
0
        protected virtual void Run(List <dynNodeModel> topElements, FScheme.Expression runningExpression)
        {
            //Print some stuff if we're in debug mode
            if (DynamoViewModel.RunInDebug)
            {
                if (dynSettings.Controller.UIDispatcher != null)
                {
                    foreach (string exp in topElements.Select(node => node.PrintExpression()))
                    {
                        DynamoLogger.Instance.Log("> " + exp);
                    }
                }
            }

            try
            {
                DynamoLogger.Instance.Log("Evaluating the expression...");

                //Evaluate the expression
                FScheme.Value expr = FSchemeEnvironment.Evaluate(runningExpression);

                if (dynSettings.Controller.UIDispatcher != null)
                {
                    //Print some more stuff if we're in debug mode
                    if (DynamoViewModel.RunInDebug && expr != null)
                    {
                        DynamoLogger.Instance.Log(FScheme.print(expr));
                    }
                }
            }
            catch (CancelEvaluationException ex)
            {
                /* Evaluation was cancelled */

                OnRunCancelled(false);
                RunCancelled = false;
                if (ex.Force)
                {
                    runAgain = false;
                }
            }
            catch (Exception ex)
            {
                /* Evaluation failed due to error */

                if (dynSettings.Controller.UIDispatcher != null)
                {
                    //Print unhandled exception
                    if (ex.Message.Length > 0)
                    {
                        dynSettings.Controller.DispatchOnUIThread(() => DynamoLogger.Instance.Log(ex));
                    }
                }

                OnRunCancelled(true);
                RunCancelled = true;
                runAgain     = false;

                //If we are testing, we need to throw an exception here
                //which will, in turn, throw an Assert.Fail in the
                //Evaluation thread.
                if (Testing)
                {
                    throw new Exception(ex.Message);
                }
            }

            OnEvaluationCompleted();
        }
Example #29
0
        void registerButt_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            //data = Value.NewList(FSharpList<Value>.Empty);

            View activeView = dynRevitSettings.Doc.ActiveView;
            PickedSunAndShadowSettings = activeView.SunAndShadowSettings;

            if (PickedSunAndShadowSettings != null)
            {
                sunAndShadowSettingsID = activeView.SunAndShadowSettings.Id;
                this.RegisterEvalOnModified(sunAndShadowSettingsID); // register with the DMU, TODO - watch out for view changes, as sun is view specific
                XYZ sunVector = GetSunDirection(PickedSunAndShadowSettings);

                this.data = FScheme.Value.NewContainer(sunVector);

                this.tb.Text = PickedSunAndShadowSettings.Name;
            }
            else
            {
                //sunPathButt.Content = "Select Instance";
                this.tb.Text = "Nothing Selected";
            }
        }
Example #30
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            if (!args[0].IsList)
            {
                throw new Exception("Input must be a list of numbers.");
            }

            FSharpList<FScheme.Value> vals = ((FScheme.Value.List)args[0]).Item;
            var len = vals.Length;
            if (len % 3 != 0)
                throw new Exception("List size must be a multiple of 3");

            var result = new FScheme.Value[len / 3];
            int count = 0;
            while (!vals.IsEmpty)
            {
                result[count] = FScheme.Value.NewContainer(new XYZ(
                    ((FScheme.Value.Number)vals.Head).Item,
                    ((FScheme.Value.Number)vals.Tail.Head).Item,
                    ((FScheme.Value.Number)vals.Tail.Tail.Head).Item));
                vals = vals.Tail.Tail.Tail;
                count++;
            }

            return FScheme.Value.NewList(Utils.SequenceToFSharpList(result));
        }
Example #31
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            if (PickedSunAndShadowSettings == null)
            {
                throw new Exception("The sun and shadow settings have not been selected. Click to pick the sun and shadow settings from the active view.");
            }

            if (PickedSunAndShadowSettings.Id.IntegerValue == sunAndShadowSettingsID.IntegerValue) // sanity check
            {

                XYZ sunVector = GetSunDirection(PickedSunAndShadowSettings);
                this.data = FScheme.Value.NewContainer(sunVector);
                return data;
            }
            else
                throw new Exception("SANITY CHECK FAILED");
        }
Example #32
0
 public static dynamic UnwrapFSchemeValue(this FScheme.Value value)
 {
     return(value.IsList
         ? (value as FScheme.Value.List).Item.Select(UnwrapFSchemeValue).ToFSharpList()
         : (value as dynamic).Item);
 }