public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            var thunk = ((FScheme.Value.Function) args[0]).Item;
            var task = FScheme.MakeFuture(thunk);

            return FScheme.Value.NewContainer(task);
        }
Beispiel #2
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            string prefix = "";

            int count = 0;

            DispatchOnUIThread(
                delegate
                {
                    //unhook the binding
                    OnRequestBindingUnhook(EventArgs.Empty);

                    Root.Children.Clear();

                    foreach (Value e in args)
                    {
                        Root.Children.Add(Process(e, count.ToString(CultureInfo.InvariantCulture), Root.ShowRawData));
                        count++;
                    }

                    //rehook the binding
                    OnRequestBindingRehook(EventArgs.Empty);
                }
                );

            //return the content that has been gathered
            return args[0]; //watch should be a 'pass through' node
        }
Beispiel #3
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            CurveLoop firstLoop = (CurveLoop)((Value.Container)args[0]).Item;
            CurveLoop secondLoop = (CurveLoop)((Value.Container)args[1]).Item;

            List<VertexPair> vertPairs = null;

            if (dynRevitSettings.Revit.Application.VersionName.Contains("2013"))
            {
                vertPairs = new List<VertexPair>();

                int i = 0;
                int nCurves1 = firstLoop.Count();
                int nCurves2 = secondLoop.Count();
                for (; i < nCurves1 && i < nCurves2; i++)
                {
                    vertPairs.Add(new VertexPair(i, i));
                }
            }

            var result = GeometryCreationUtilities.CreateBlendGeometry(firstLoop, secondLoop, vertPairs);

            solids.Add(result);

            return Value.NewContainer(result);
        }
Beispiel #4
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()));
        }
Beispiel #5
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            Curve thisCurve = (Curve)((Value.Container)args[0]).Item;

            if (thisCurve == null)
            {
                throw new Exception("Not enough reference points to make a curve.");
            }

            Type CurveType = typeof(Autodesk.Revit.DB.Curve);

            MethodInfo[] curveInstanceMethods = CurveType.GetMethods(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);

            System.String nameOfMethodApproximateByTangentArcs = "ApproximateByTangentArcs";
            List<Curve> resultArcs = null;
            var result = FSharpList<Value>.Empty;

            foreach (MethodInfo m in curveInstanceMethods)
            {
                if (m.Name == nameOfMethodApproximateByTangentArcs)
                {
                    object[] argsM = new object[0];

                    resultArcs = (List<Curve>)m.Invoke(thisCurve, argsM);

                    break;
                }
            }
            for (int indexCurve = resultArcs.Count - 1; indexCurve > -1; indexCurve--)
            {
                result = FSharpList<Value>.Cons(Value.NewContainer(resultArcs[indexCurve]), result);
            }

            return Value.NewList(result);
        }
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            if (SelectedIndex < 0)
            {
                throw new Exception("Please select a mesh node.");
            }

            var node_name = Items[SelectedIndex].Name;

            //             if (InPorts[0].IsConnected)
            //             {
            //                 // send the to the connected node
            //                 return FScheme.Value.NewString(node_name);
            //             }

            var result = FSharpList<FScheme.Value>.Empty;

            if (OutPorts[0].IsConnected)
            {
                // get the data from the connected node
                DynamoMaya.Contract.IService s = MayaCommunication.openChannelToMaya();
                Point3DCollection vertices = s.receiveVertexPositionsFromMaya(node_name);

                foreach (Point3D v in vertices)
                {
                    XYZ pt = new XYZ(v.X, v.Y, v.Z);
                    result = FSharpList<FScheme.Value>.Cons(FScheme.Value.NewContainer(pt), result);
                }

                MayaCommunication.closeChannelToMaya(s);
            }

            return FScheme.Value.NewList(ListModule.Reverse(result));
        }
Beispiel #7
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            var worksheet = (Microsoft.Office.Interop.Excel.Worksheet)((FScheme.Value.Container)args[0]).Item;

            Microsoft.Office.Interop.Excel.Range range = worksheet.UsedRange;

            int rows = range.Rows.Count;
            int cols = range.Columns.Count;

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

            for (int r = 1; r <= rows; r++)
            {
                var row = new List<FScheme.Value>();

                for (int c = 1; c <= cols; c++)
                {
                    row.Add(FScheme.Value.NewContainer(range.Cells[r, c].Value2));
                }

                rowData.Add(FScheme.Value.NewList(Utils.SequenceToFSharpList(row)));
            }

            return FScheme.Value.NewList(Utils.SequenceToFSharpList(rowData));
        }
Beispiel #8
0
        //protected override void OnRunCancelled()
        //{
        //    if (delayThread != null && delayThread.IsAlive)
        //        delayThread.Abort();
        //}
        public override Expression Evaluate(FSharpList<Expression> args)
        {
            int delay = (int)((Expression.Number)args[0]).Item;

            if (delayThread == null || !delayThread.IsAlive)
            {
                delayThread = new Thread(new ThreadStart(
                    delegate
                    {
                        Thread.Sleep(delay);

                        if (this.Bench.RunCancelled)
                            return;

                        while (this.Bench.Running)
                        {
                            Thread.Sleep(1);
                            if (this.Bench.RunCancelled)
                                return;
                        }

                        this.IsDirty = true;
                    }
                ));

                delayThread.Start();
            }

            return Expression.NewNumber(1);
        }
Beispiel #9
0
        public override void Evaluate(FSharpList<Value> args, Dictionary<PortData, Value> outPuts)
        {
            var crv1 = (Curve)((Value.Container)args[0]).Item;
            var crv2 = (Curve)((Value.Container)args[1]).Item;

            IntersectionResultArray xsects;
            SetComparisonResult result = crv1.Intersect(crv2, out xsects);

            var xyz = FSharpList<Value>.Empty;
            var u = FSharpList<Value>.Empty;
            var v = FSharpList<Value>.Empty;

            if (xsects != null)
            {
                foreach (IntersectionResult ir in xsects)
                {
                    xyz = FSharpList<Value>.Cons(Value.NewContainer(ir.XYZPoint), xyz);
                    u = FSharpList<Value>.Cons(Value.NewNumber(ir.UVPoint.U), u);
                    v = FSharpList<Value>.Cons(Value.NewNumber(ir.UVPoint.V), v);

                }

            }

            outPuts[_vPort] = Value.NewList(v);
            outPuts[_uPort] = Value.NewList(u);
            outPuts[_xyzPort] = Value.NewList(xyz);
            outPuts[_resultPort] = Value.NewString(result.ToString());
        }
 public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
 {
     dynRevitSettings.ElementsContainers.Push(ElementsContainer);
     var result = base.Evaluate(args);
     dynRevitSettings.ElementsContainers.Pop();
     return result;
 }
Beispiel #11
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            var min = ((FScheme.Value.Number)args[0]).Item;
            var max = ((FScheme.Value.Number)args[1]).Item;

            return FScheme.Value.NewContainer(DSCoreNodes.Domain.ByMinimumAndMaximum(min, max));
        }
Beispiel #12
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            Transform t = Transform.Identity;
            transforms.Add(t);

            return Value.NewContainer(t);
        }
Beispiel #13
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            //Level elements take in one double for the z elevation (height)f
            var h = (double)((FScheme.Value.Number)args[0]).Item;
            var name = ((FScheme.Value.String)args[1]).Item;

            Autodesk.Revit.DB.Level lev;

            if (this.Elements.Any())
            {
                if (dynUtils.TryGetElement(this.Elements[0], out lev))
                {
                    lev.Elevation = h;
                    lev.Name = name;
                }
                else
                {
                    lev = this.UIDocument.Document.IsFamilyDocument
                        ? this.UIDocument.Document.FamilyCreate.NewLevel(h)
                        : this.UIDocument.Document.Create.NewLevel(h);
                    lev.Name = name;
                    this.Elements[0] = lev.Id;
                }
            }
            else
            {
                lev = this.UIDocument.Document.IsFamilyDocument
                    ? this.UIDocument.Document.FamilyCreate.NewLevel(h)
                    : this.UIDocument.Document.Create.NewLevel(h);
                lev.Name = name;
                this.Elements.Add(lev.Id);
            }

            return FScheme.Value.NewContainer(lev);
        }
Beispiel #14
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            var ptA = ((FScheme.Value.Container)args[0]).Item;
            var radX = (double)((FScheme.Value.Number)args[1]).Item;
            var radY = (double)((FScheme.Value.Number)args[2]).Item;

            Autodesk.Revit.DB.Ellipse ell = null;

            if (ptA is XYZ)
            {
                ell = dynRevitSettings.Doc.Application.Application.Create.NewEllipse(
                    //ptA, radX, radY, XYZ.BasisX, XYZ.BasisY, 0, 2 * Math.PI
                  (XYZ)ptA, radX, radY, XYZ.BasisX, XYZ.BasisY, 0, 2 * RevitPI
               );

            }
            else if (ptA is ReferencePoint)
            {
                ell = dynRevitSettings.Doc.Application.Application.Create.NewEllipse(
                    //ptA, radX, radY, XYZ.BasisX, XYZ.BasisY, 0, 2 * Math.PI
               (XYZ)((ReferencePoint)ptA).Position, radX, radY, XYZ.BasisX, XYZ.BasisY, 0, 2 * RevitPI
                );
            }
            else if (ptA is Transform)
            {
                Transform trf = ptA as Transform;
                XYZ center = trf.Origin;
                ell = dynRevitSettings.Doc.Application.Application.Create.NewEllipse(
                    //ptA, radX, radY, XYZ.BasisX, XYZ.BasisY, 0, 2 * Math.PI
                     center, radX, radY, trf.BasisX, trf.BasisY, 0, 2 * RevitPI
                  );
            }

            return FScheme.Value.NewContainer(ell);
        }
Beispiel #15
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            var input = args[0];

            //If we are receiving a list, we must create levels for each double in the list.
            if (input.IsList)
            {
                throw new NotImplementedException();
            }
            //If we're not receiving a list, we will just assume we received one double height.
            else
            {
                double x = ((FScheme.Value.Number) input).Item;

                int i0 = SimplexHelper.FastFloor(x);
            int i1 = i0 + 1;
            double x0 = x - i0;
            double x1 = x0 - 1.0f;

            double n0, n1;

            double t0 = 1.0f - x0 * x0;
            t0 *= t0;
            n0 = t0 * t0 * SimplexHelper.Grad(SimplexHelper.perm[i0 & 0xff], x0);

            double t1 = 1.0f - x1 * x1;
            t1 *= t1;
            n1 = t1 * t1 * SimplexHelper.Grad(SimplexHelper.perm[i1 & 0xff], x1);
            // The maximum value of this noise is 8*(3/4)^4 = 2.53125
            // A factor of 0.395 scales to fit exactly within [-1,1]
                return FScheme.Value.NewNumber(0.395f*(n0 + n1));

            }
        }
        public override Value Evaluate(FSharpList<Value> args)
        {
            ParticleSystem particleSystem = (ParticleSystem)((Value.Container)args[0]).Item;

            var result = FSharpList<Value>.Empty;

            ParticleSpring s;
            Particle springEnd1;
            Particle springEnd2;
            XYZ springXYZ1;
            XYZ springXYZ2;
            Line springLine;

            //create a geometry curve from each spring
            for (int i = 0; i < particleSystem.numberOfSprings(); i++)
            {
                s = particleSystem.getSpring(i);
                springEnd1 = s.getOneEnd();
                springEnd2 = s.getTheOtherEnd();

                springXYZ1 = springEnd1.getPosition();
                springXYZ2 = springEnd2.getPosition();
                springLine = dynRevitSettings.Doc.Application.Application.Create.NewLineBound(springXYZ1, springXYZ2);

                result = FSharpList<Value>.Cons(Value.NewContainer(springLine), result);
            }

            return Value.NewList(result);
        }
Beispiel #17
0
        //protected override void OnRunCancelled()
        //{
        //    if (delayThread != null && delayThread.IsAlive)
        //        delayThread.Abort();
        //}
        public override Value Evaluate(FSharpList<Value> args)
        {
            int delay = (int)((Value.Number)args[0]).Item;

            if (delayThread == null || !delayThread.IsAlive)
            {
                delayThread = new Thread(new ThreadStart(
                    delegate
                    {
                        Thread.Sleep(delay);

                        if (Controller.RunCancelled)
                            return;

                        while (Controller.Running)
                        {
                            Thread.Sleep(1);
                            if (Controller.RunCancelled)
                                return;
                        }

                        this.RequiresRecalc = true;
                    }
                ));

                delayThread.Start();
            }

            return Value.NewNumber(1);
        }
Beispiel #18
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            var t = (Transform)((FScheme.Value.Container)args[0]).Item;
            double width = ((FScheme.Value.Number)args[1]).Item;
            double height = ((FScheme.Value.Number)args[2]).Item;

            //ccw from upper right
            var p0 = new XYZ(width / 2, height / 2, 0);
            var p3 = new XYZ(-width / 2, height / 2, 0);
            var p2 = new XYZ(-width / 2, -height / 2, 0);
            var p1 = new XYZ(width / 2, -height / 2, 0);

            p0 = t.OfPoint(p0);
            p1 = t.OfPoint(p1);
            p2 = t.OfPoint(p2);
            p3 = t.OfPoint(p3);

            var l1 = dynRevitSettings.Doc.Application.Application.Create.NewLineBound(p0, p1);
            var l2 = dynRevitSettings.Doc.Application.Application.Create.NewLineBound(p1, p2);
            var l3 = dynRevitSettings.Doc.Application.Application.Create.NewLineBound(p2, p3);
            var l4 = dynRevitSettings.Doc.Application.Application.Create.NewLineBound(p3, p0);

            var cl = new Autodesk.Revit.DB.CurveLoop();
            cl.Append(l1);
            cl.Append(l2);
            cl.Append(l3);
            cl.Append(l4);

            return FScheme.Value.NewContainer(cl);
        }
Beispiel #19
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            var f = ((FScheme.Value.Function)args[0]).Item;
            var x = ((FScheme.Value.Number)args[1]).Item;
            var max_its = (int) Math.Max(1, ((FScheme.Value.Number) args[2]).Item);

            var count = 0;
            var change = 1e10;
            var max_change = 1e-5;
            var h = 1e-5;

            // use newton's method
            while (count < max_its && change > max_change)
            {
                var fx = InvokeFunction(f, x);
                var fxh = InvokeFunction(f, x + h);
                var dfx = (fxh - fx)/h;

                var x1 = x - fx/dfx;
                change = x - x1;
                x = x1;

                count++;
            }

            return FScheme.Value.NewNumber(x);
        }
Beispiel #20
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            if (((Value.Number)args[0]).Item == 1)
            {
                if (port != null)
                {
                    bool isOpen = true;

                    if (isOpen == true)
                    {
                        if (!port.IsOpen)
                        {
                            port.Open();
                        }

                    }
                    else if (isOpen == false)
                    {
                        if (port.IsOpen)
                            port.Close();
                    }
                }
            }

            return Value.NewContainer(port); // pass the port downstream
        }
Beispiel #21
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            var crv1 = (Curve)((Value.Container)args[0]).Item;
            var crv2 = (Curve)((Value.Container)args[1]).Item;

            IntersectionResultArray xsects = new IntersectionResultArray();
            SetComparisonResult result = crv1.Intersect(crv2, out xsects);
            var results = FSharpList<Value>.Empty;

            var xsect_results = FSharpList<Value>.Empty;
            if (xsects != null)
            {
                foreach (IntersectionResult ir in xsects)
                {
                    var xsect = FSharpList<Value>.Empty;
                    xsect = FSharpList<Value>.Cons(Value.NewNumber(ir.UVPoint.U), xsect);
                    xsect = FSharpList<Value>.Cons(Value.NewNumber(ir.UVPoint.V), xsect);
                    xsect = FSharpList<Value>.Cons(Value.NewContainer(ir.XYZPoint), xsect);
                    xsect_results = FSharpList<Value>.Cons(Value.NewList(xsect), xsect_results);

                    pts.Add(ir.XYZPoint);
                }

            }
            results = FSharpList<Value>.Cons(Value.NewList(xsect_results), results);
            results = FSharpList<Value>.Cons(Value.NewString(result.ToString()), results);

            return Value.NewList(results);
        }
Beispiel #22
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            var ptA = ((FScheme.Value.Container)args[0]).Item;
            var radius = (double)((FScheme.Value.Number)args[1]).Item;
            var start = (double)((FScheme.Value.Number)args[2]).Item;
            var end = (double)((FScheme.Value.Number)args[3]).Item;

            Arc a = null;

            if (ptA is XYZ)
            {
                a = dynRevitSettings.Doc.Application.Application.Create.NewArc(
                   (XYZ)ptA, radius, start, end, XYZ.BasisX, XYZ.BasisY
                );
            }
            else if (ptA is ReferencePoint)
            {
                a = dynRevitSettings.Doc.Application.Application.Create.NewArc(
                   (XYZ)((ReferencePoint)ptA).Position, radius, start, end, XYZ.BasisX, XYZ.BasisY
                );
            }
            else if (ptA is Transform)
            {
                Transform trf = ptA as Transform;
                XYZ center = trf.Origin;
                a = dynRevitSettings.Doc.Application.Application.Create.NewArc(
                             center, radius, start, end, trf.BasisX, trf.BasisY
                );
            }

            return FScheme.Value.NewContainer(a);
        }
Beispiel #23
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            Surface s = (Surface)((Value.Container)args[0]).Item;

            double a = s.area();

            return Value.NewNumber(a);
        }
Beispiel #24
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            double u, v;
            u = ((FScheme.Value.Number)args[0]).Item;
            v = ((FScheme.Value.Number)args[1]).Item;

            return FScheme.Value.NewContainer(new UV(u, v));
        }
Beispiel #25
0
        public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args)
        {
            var param = args[1];
            if (param.IsString)
            {
                var paramName = ((FScheme.Value.String)param).Item;

                var input = args[0];
                if (input.IsList)
                {
                    var fiList = (input as FScheme.Value.List).Item;
                    return FScheme.Value.NewList(
                        Utils.SequenceToFSharpList(
                            fiList.Select(
                                x =>
                                getParam(
                                    (FamilySymbol)((FScheme.Value.Container)x).Item,
                                    paramName
                                    )
                                )
                            )
                        );
                }
                else
                {
                    var fi = (FamilySymbol)((FScheme.Value.Container)input).Item;

                    return getParam(fi, paramName);
                }
            }
            else
            {
                var paramDef = (Definition)((FScheme.Value.Container)param).Item;

                var input = args[0];
                if (input.IsList)
                {
                    var fiList = (input as FScheme.Value.List).Item;
                    return FScheme.Value.NewList(
                        Utils.SequenceToFSharpList(
                            fiList.Select(
                                x =>
                                getParam(
                                    (FamilySymbol)((FScheme.Value.Container)x).Item,
                                    paramDef
                                    )
                                )
                            )
                        );
                }
                else
                {
                    var fi = (FamilySymbol)((FScheme.Value.Container)input).Item;

                    return getParam(fi, paramDef);
                }
            }
        }
Beispiel #26
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            var a = (int) Math.Round(((Value.Number) args[0]).Item);
            var r = (int) Math.Round(((Value.Number)args[1]).Item);
            var g = (int) Math.Round(((Value.Number)args[2]).Item);
            var b = (int) Math.Round(((Value.Number)args[3]).Item);

            return Value.NewContainer(System.Drawing.Color.FromArgb(a, r, g, b));
        }
 void IRunner.OnShrink
   ( FSharpList<object> args
   , FSharpFunc<FSharpList<object>, string> everyShrink
   )
 {   var msg = everyShrink.Invoke(args);
     if (!silent)
     {   Console.Write(msg);
     }
 }
Beispiel #28
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            //Grab our inputs and turn them into XYZs.
            XYZ ptA = this.getXYZ(((Value.Container)args[0]).Item);
            XYZ ptB = this.getXYZ(((Value.Container)args[1]).Item);

            //Return the calculated distance.
            return Value.NewNumber(ptA.DistanceTo(ptB));
        }
Beispiel #29
0
        public override Value Evaluate(FSharpList<Value> args)
        {
            //Grab our inputs and turn them into XYZs.
            XYZ ptA = this.getXYZ(((Value.Container)args[0]).Item);
            XYZ ptB = this.getXYZ(((Value.Container)args[1]).Item);

            //Return the calculated distance.
            return Value.NewContainer(Units.Length.FromFeet(ptA.DistanceTo(ptB), dynSettings.Controller.UnitsManager));
        }
Beispiel #30
0
        ///<summary>
        ///Auto-generated evaulate method for Dynamo node wrapping Autodesk.Revit.Creation.FamilyItemFactory.NewRadialDimension
        ///</summary>
        public override Value Evaluate(FSharpList<Value> args)
        {
            foreach (var e in this.Elements)
            {
                this.DeleteElement(e);
            }

            return dynRevitUtils.InvokeAPIMethod(this, args, base_type, pi, mi, return_type);
        }
Beispiel #31
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            SpatialFieldManager sfm;

            sfm = SpatialFieldManager.GetSpatialFieldManager(dynRevitSettings.Doc.ActiveView);

            if (sfm != null)
            {
                dynRevitSettings.SpatialFieldManagerUpdated = sfm;
            }
            else
            {
                sfm = SpatialFieldManager.CreateSpatialFieldManager(dynRevitSettings.Doc.ActiveView, (int)((Value.Number)args[0]).Item);
            }

            return(Value.NewContainer(sfm));
        }
Beispiel #32
0
    public static int main(string[] argv)
    {
        IDisposable disposable = default(IDisposable);

        using (Program.disposable())
        {
            Console.WriteLine("Hello 1");
            disposable = Program.disposable();
        }
        using (disposable)
        {
            IEnumerable <int> seq = Program.getSeq();
            using (IEnumerator <int> enumerator = seq.GetEnumerator())
            {
                while (true)
                {
                    if (!enumerator.MoveNext())
                    {
                        break;
                    }
                    int k = enumerator.Current;
                    Console.WriteLine(k);
                }
            }
            FSharpList <int> fSharpList = Program.getList();
            FSharpList <int> tailOrNull = fSharpList.TailOrNull;
            while (true)
            {
                if (tailOrNull == null)
                {
                    break;
                }
                int j = fSharpList.HeadOrDefault;
                Console.WriteLine(j);
                fSharpList = tailOrNull;
                tailOrNull = fSharpList.TailOrNull;
            }
            int[] array = Program.getArray();
            for (int l = 0; l < array.Length; l++)
            {
                int i = array[l];
                Console.WriteLine(i);
            }
            return(0);
        }
    }
Beispiel #33
0
        static void Main(string[] args)
        {
            var numbers = FSharpList <int> .Cons(
                1,
                FSharpList <int> .Cons(2,
                                       FSharpList <int> .Cons(
                                           3,
                                           FSharpList <int> .Empty)));

            Console.WriteLine(string.Join(", ", numbers));

            var fsharpPoint = new FSharpLibrary.Point(1, 2, 3);
            var csharpPoint = new CsharpPoint(1, 2, 3);

            FSharpLibrary.Shape shape = FSharpLibrary.Shape.NewCircle(1);
            Console.WriteLine($"Is this a rectangle: {shape.IsRectangle}");
        }
        public void One()
        {
            string             man      = "A1";
            SortedSet <string> expected = new SortedSet <string> {
                "B1"
            };
            List <Tuple <string, string> > CSarpPairs = new List <Tuple <string, string> >
            {
                new Tuple <string, string>("A1", "B1")
            };
            FSharpList <Tuple <string, string> > FSarpPairs = ListModule.OfSeq(CSarpPairs);

            string             result           = printChildren(FSarpPairs, man, "");
            SortedSet <string> resultCollection = Functions.ConvertToSet(result);

            CollectionAssert.AreEqual(expected, resultCollection);
        }
Beispiel #35
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            string path = ((Value.String)args[0]).Item;
            string text = ((Value.String)args[1]).Item;

            try
            {
                File.WriteAllText(path, text);
            }
            catch (Exception e)
            {
                DynamoLogger.Instance.Log(e);
                return(Value.NewNumber(0));
            }

            return(Value.NewNumber(1));
        }
 public void WriteValue(IValueWriter valueWriter, FSharpList <T> value)
 {
     if (value is null)
     {
         valueWriter.DirectWrite(null);
     }
     else if (valueWriter is IValueWriter <FSharpList <T> > writer)
     {
         writer.WriteValue(value);
     }
     else
     {
         valueWriter.WriteArray(new FSharpListRW <T> {
             content = value
         });
     }
 }
Beispiel #37
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            GeometryList geometry = new GeometryList();

            System.String file_name = ((Value.String)args[0]).Item;
            var           input     = (args[1] as Value.List).Item;

            foreach (Value v in input)
            {
                Geometry g = ((Value.Container)v).Item as Geometry;
                geometry.Add(g);
            }

            ASMExporter.export_geometry(file_name, geometry);

            return(args[1]);
        }
Beispiel #38
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            var pts = ((Value.List)args[0]).Item.Select(
                x => ((XYZ)((Value.Container)x).Item)).ToList();

            if (pts.Count <= 1)
            {
                throw new Exception("Not enough reference points to make a curve.");
            }

            var ns = dynRevitSettings.Revit.Application.Create.NewNurbSpline(
                pts, Enumerable.Repeat(1.0, pts.Count).ToList());

            crvs.Add(ns);

            return(Value.NewContainer(ns));
        }
Beispiel #39
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            Curve  crv = (Curve)((Value.Container)args[0]).Item;
            double p   = (double)((Value.Number)args[1]).Item;

            Transform t = Transform.Identity;

            if (crv != null)
            {
                t        = crv.ComputeDerivatives(p, true);
                t.BasisX = t.BasisX.Normalize();
                t.BasisZ = t.BasisZ.Normalize();
                t.BasisY = t.BasisX.CrossProduct(t.BasisZ);
            }

            return(Value.NewContainer(t));
        }
Beispiel #40
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            storedPath = ((Value.String)args[0]).Item;

            if (File.Exists(storedPath))
            {
                string contents;

                contents = File.ReadAllText(storedPath);

                return(Value.NewString(contents));
            }
            else
            {
                return(Value.NewString(""));
            }
        }
        public FSharpList <T> ToFSharpList()
        {
            FSharpList <T> result = FSharpList <T> .Empty;

            result = CopyToList(result, chunk, chunkPos);

            while (!chunks.IsEmpty)
            {
                chunk  = chunks.HeadOrDefault;
                chunks = chunks.TailOrNull;
                result = CopyToList(result, chunk, chunk.Length);
            }

            chunk = Array.Empty <T>();

            return(result);
        }
Beispiel #42
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            var origin  = (XYZ)((Value.Container)args[0]).Item;
            var up      = (XYZ)((Value.Container)args[1]).Item;
            var forward = (XYZ)((Value.Container)args[2]).Item;

            Transform t = Transform.Identity;

            t.Origin = origin;
            t.BasisZ = up.Normalize();
            t.BasisY = forward.Normalize();
            t.BasisX = forward.CrossProduct(up).Normalize();

            return(Value.NewContainer(
                       t
                       ));
        }
Beispiel #43
0
            public override void Evaluate(FSharpList <FScheme.Value> args, Dictionary <PortData, FScheme.Value> outPuts)
            {
                if (OutPortData.Count > 1)
                {
                    var query = (Evaluate(args) as FScheme.Value.List).Item.Zip(
                        OutPortData, (value, data) => new { value, data });

                    foreach (var result in query)
                    {
                        outPuts[result.data] = result.value;
                    }
                }
                else
                {
                    base.Evaluate(args, outPuts);
                }
            }
Beispiel #44
0
        public void Defect_MAGN_942_Equal()
        {
            DynamoModel model    = Controller.DynamoModel;
            string      openPath = Path.Combine(GetTestDirectory(), @"core\DynamoDefects\Defect_MAGN_942_Equal.dyn");

            model.Open(openPath);

            dynSettings.Controller.RunExpression(null);
            var equal = model.CurrentWorkspace.NodeFromWorkspace <Map>("3806c656-56bd-4878-9082-b2d27644abd1");
            FSharpList <FScheme.Value> actual = equal.GetValue(0).GetListFromFSchemeValue();

            Assert.AreEqual(11, actual.Length);

            Assert.AreEqual(0, actual[0].GetDoubleFromFSchemeValue());
            Assert.AreEqual(1, actual[5].GetDoubleFromFSchemeValue());
            Assert.AreEqual(0, actual[10].GetDoubleFromFSchemeValue());
        }
Beispiel #45
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            string path = ((Value.String)args[0]).Item;
            string text = ((Value.String)args[1]).Item;

            try
            {
                File.WriteAllText(path, text);
            }
            catch (Exception e)
            {
                dynSettings.Controller.DynamoViewModel.Log(e);
                return(Value.NewNumber(0));
            }

            return(Value.NewNumber(1));
        }
Beispiel #46
0
        public void TestSplitStringNormalInput()
        {
            DynamoModel model        = Controller.DynamoModel;
            string      testFilePath = Path.Combine(localDynamoStringTestFloder, "TestSplitString_normal.dyn");

            model.Open(testFilePath);
            dynSettings.Controller.RunExpression(null);
            var watch = model.CurrentWorkspace.NodeFromWorkspace <Watch>("f72f6210-b32f-4dc4-9b2a-61f0144a0109");

            String expected1 = "today";
            String expected2 = "yesterday";

            FSharpList <FScheme.Value> splitedStrings = watch.GetValue(0).GetListFromFSchemeValue();

            Assert.AreEqual(expected1, splitedStrings[0].GetStringFromFSchemeValue());
            Assert.AreEqual(expected2, splitedStrings[1].GetStringFromFSchemeValue());
        }
        public void FSharpListTest_2_Success()
        {
            var collection = FSharpList <int> .Empty;

            collection = new FSharpList <int>(0, collection);
            collection = new FSharpList <int>(1, collection);
            var target = this.CreateTarget <FSharpList <int> >();

            using (var buffer = new MemoryStream())
            {
                target.Pack(buffer, collection);
                buffer.Position = 0;
                var unpacked = target.Unpack(buffer);
                buffer.Position = 0;
                Assert.That(unpacked.ToArray(), Is.EqualTo(collection.ToArray()));
            }
        }
Beispiel #48
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            Autodesk.Revit.DB.Analysis.SpatialFieldManager SpatialFieldManager;

            SpatialFieldManager = Autodesk.Revit.DB.Analysis.SpatialFieldManager.GetSpatialFieldManager(dynRevitSettings.Doc.ActiveView);

            if (SpatialFieldManager != null)
            {
                dynRevitSettings.SpatialFieldManagerUpdated = SpatialFieldManager;
            }
            else
            {
                SpatialFieldManager = Autodesk.Revit.DB.Analysis.SpatialFieldManager.CreateSpatialFieldManager(dynRevitSettings.Doc.ActiveView, (int)((Value.Number)args[0]).Item);
            }

            return(Value.NewContainer(SpatialFieldManager));
        }
Beispiel #49
0
        public override FScheme.Value Evaluate(FSharpList <FScheme.Value> args)
        {
            var pts = ((FScheme.Value.List)args[0]).Item.Select(
                x => ((ReferencePoint)((FScheme.Value.Container)x).Item).Position
                ).ToList();

            if (pts.Count <= 1)
            {
                throw new Exception("Not enough reference points to make a curve.");
            }

            var ns = UIDocument.Application.Application.Create.NewNurbSpline(
                pts, Enumerable.Repeat(1.0, pts.Count).ToList());

            ModelNurbSpline c;

            if (Elements.Any() && dynUtils.TryGetElement(Elements[0], out c))
            {
                ModelCurve.setCurveMethod(c, ns); //c.GeometryCurve = ns;
            }
            else
            {
                Elements.Clear();

                double    rawParam = ns.ComputeRawParameter(.5);
                Transform t        = ns.ComputeDerivatives(rawParam, false);

                XYZ norm = t.BasisZ;

                if (norm.GetLength() == 0)
                {
                    norm = XYZ.BasisZ;
                }

                Autodesk.Revit.DB.Plane       p  = new Autodesk.Revit.DB.Plane(norm, t.Origin);
                Autodesk.Revit.DB.SketchPlane sp = this.UIDocument.Document.FamilyCreate.NewSketchPlane(p);
                //sps.Add(sp);

                c = UIDocument.Document.FamilyCreate.NewModelCurve(ns, sp) as ModelNurbSpline;

                Elements.Add(c.Id);
            }

            return(FScheme.Value.NewContainer(c));
        }
Beispiel #50
0
        public void SliceList()
        {
            dynSettings.Controller.DynamoModel.CreateNode(0, 0, "Partition List");

            //Create a List
            //For a list of 0..20, this will have 21 elements
            //Slicing by 5 should return 6 lists, the last containing one element
            var list = Utils.SequenceToFSharpList(Enumerable.Range(0, 21).Select(x => FScheme.Value.NewNumber(x)));

            var sliceNode = (Slice)dynSettings.Controller.DynamoModel.Nodes.First(x => x is Slice);
            var args      = FSharpList <FScheme.Value> .Empty;

            args = FSharpList <FScheme.Value> .Cons(FScheme.Value.NewNumber(5), args);

            args = FSharpList <FScheme.Value> .Cons(FScheme.Value.NewList(list), args);

            var res = sliceNode.Evaluate(args);

            //confirm we have a list
            Assert.IsTrue(res.IsList);

            //confirm the correct number of sublists
            Assert.AreEqual(5, ((FScheme.Value.List)res).Item.Count());

            //test if you pass in an empty list
            //should return just one list - the original
            args = FSharpList <FScheme.Value> .Empty;
            args = FSharpList <FScheme.Value> .Cons(FScheme.Value.NewNumber(5), args);

            args = FSharpList <FScheme.Value> .Cons(FScheme.Value.NewList(FSharpList <FScheme.Value> .Empty), args);

            res = sliceNode.Evaluate(args);
            Assert.AreEqual(0, ((FScheme.Value.List)res).Item.Count());

            //test if you pass in a list wwith less elements than the
            //slice, you should just get back the same list
            list = Utils.SequenceToFSharpList(Enumerable.Range(0, 1).Select(x => FScheme.Value.NewNumber(x)));
            args = FSharpList <FScheme.Value> .Empty;
            args = FSharpList <FScheme.Value> .Cons(FScheme.Value.NewNumber(5), args);

            args = FSharpList <FScheme.Value> .Cons(FScheme.Value.NewList(list), args);

            res = sliceNode.Evaluate(args);
            Assert.AreEqual(1, ((FScheme.Value.List)res).Item.Count());
        }
        public void ParticularScenario()
        {
            /// Here's what happened (unless I'm crazy):
            /// I was dealt 10, king
            /// dealer had 10, 3
            /// I checked double down
            /// I must have hit (though should've stayed) because I got a 2 (bust)
            /// dealer was then dealt 5 (total 18)
            /// I showed winnings at 20

            // player hand (bust)
            var tenOfClub     = Blackjack.Card.NewValueCard(10, Blackjack.Suit.Club);
            var kingOfDiamond = Blackjack.Card.NewKing(Blackjack.Suit.Diamond);
            var twoOfDiamond  = Blackjack.Card.NewValueCard(2, Blackjack.Suit.Diamond);
            var playerHand    = FSharpList.Create(new Card[] { tenOfClub, kingOfDiamond, twoOfDiamond });

            // dealer hand
            var tenOfHeart   = Blackjack.Card.NewValueCard(10, Blackjack.Suit.Heart);
            var threeOfSpade = Blackjack.Card.NewValueCard(3, Blackjack.Suit.Spade);
            var dealerHand   = FSharpList.Create(new Card[] { tenOfHeart, threeOfSpade });

            // create the deck without dealt cards.
            var shuffledDeck    = Blackjack.functions_and_stuff.Shuffle();
            var listOfUsedCards = new List <Card> {
                tenOfClub, kingOfDiamond, twoOfDiamond, tenOfHeart, threeOfSpade                                              /*, fiveOfSpade*/
            };

            foreach (var card in shuffledDeck)
            {
                if (!listOfUsedCards.Contains(card))
                {
                    listOfUsedCards.Add(card);
                }
            }

            var currentDeck          = FSharpList.Create(listOfUsedCards.ToArray());
            var hands                = new Blackjack.Hands(dealerHand, playerHand, currentDeck);
            var game                 = new Blackjack.Game.NewGameState(currentDeck);
            var dealingToPlayerState = new Blackjack.Game.DealingAdditionalCardsToPlayerState(currentDeck, 10, hands, true);
            var transformAgain       = Game.BlackJackGame.DealingAdditionalCardsToDealer.NewDealingAdditionalCardsToPlayer(dealingToPlayerState);          // why is this necessary???
            var newGame              = Blackjack.Game.CheckForWinner(transformAgain);

            Assert.IsTrue(newGame.IsGameOver);
            Assert.AreEqual(-20, ((Blackjack.Game.BlackJackGame.GameOver)newGame).Item.Winnings);                // ugly cast
        }
Beispiel #52
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            bool isRefCurve = Convert.ToBoolean(((Value.Number)args[1]).Item);

            //Build a sequence that unwraps the input list from it's Value form.
            IEnumerable <ReferencePoint> refPts = ((Value.List)args[0]).Item.Select(
                x => (ReferencePoint)((Value.Container)x).Item
                );

            //Add all of the elements in the sequence to a ReferencePointArray.
            ReferencePointArray refPtArr = new ReferencePointArray();

            foreach (var refPt in refPts)
            {
                refPtArr.Append(refPt);
            }

            //Standard logic for updating an old result, if it exists.
            if (this.Elements.Any())
            {
                Element e;
                if (dynUtils.TryGetElement(this.Elements[0], typeof(CurveByPoints), out e))
                {
                    c = e as CurveByPoints;
                    c.SetPoints(refPtArr);
                }
                else
                {
                    //TODO: This method of handling bad elements may cause problems. Instead of overwriting
                    //      index in Elements, might be better to just add it the Elements and then do
                    //      this.DeleteElement(id, true) on the old index.
                    c = this.UIDocument.Document.FamilyCreate.NewCurveByPoints(refPtArr);
                    this.Elements[0] = c.Id;
                }
            }
            else
            {
                c = this.UIDocument.Document.FamilyCreate.NewCurveByPoints(refPtArr);
                this.Elements.Add(c.Id);
            }

            c.IsReferenceLine = isRefCurve;

            return(Value.NewContainer(c));
        }
Beispiel #53
0
        private void setBoxes(FSharpList <Tuple <int, bool> > list)
        {
            int index = 0;

            foreach (Rectangle p in ChexGrid.Children)
            {
                var tp = list[index++];
                if (tp.Item2)
                {
                    p.Fill = checkColor;
                }
                else
                {
                    p.Fill = neighborColors[tp.Item1];
                }
                p.Tag = tp;
            }
        }
Beispiel #54
0
        public override Value Evaluate(FSharpList <Value> args)
        {
            var pts = (args[0] as Value.List).Item;

            var        ptList = AsGenericList <XYZ>(pts);
            XYZ        meanPt;
            List <XYZ> orderedEigenvectors;

            PrincipalComponentsAnalysis(ptList, out meanPt, out orderedEigenvectors);

            var results = FSharpList <Value> .Empty;

            results = FSharpList <Value> .Cons(Value.NewContainer(meanPt), results);

            results = FSharpList <Value> .Cons(Value.NewContainer(orderedEigenvectors[0]), results);

            return(Value.NewList(results));
        }
Beispiel #55
0
        public void ListGraph()
        {
            //     7 --> 6 --> 5 --> 4 --> 3 --> 2 --> 1
            FSharpList <int> expected            = ListModule.OfArray(new[] { 7, 6, 5, 4, 3, 2, 1 });
            FSharpList <Tuple <int, int> > input = ListModule.OfArray(new[]
            {
                new Tuple <int, int>(2, 1),
                new Tuple <int, int>(3, 2),
                new Tuple <int, int>(4, 3),
                new Tuple <int, int>(5, 4),
                new Tuple <int, int>(6, 5),
                new Tuple <int, int>(7, 6)
            });

            FSharpList <int> result = sortGraph <int>(input);

            Assert.AreEqual(expected, result);
        }
Beispiel #56
0
        private Dictionary <string, HalLink> HeapTokenLinks(FSharpList <Tuple <string, FSharpList <String> > > heap, string contextKey, HttpRequest request)
        {
            // Request.Url.Scheme
            Dictionary <string, HalLink> links;

            if (heap.IsEmpty)
            {
                links = new Dictionary <string, HalLink>();
                links.Add("eval", TokenLink("eval", contextKey, request));
            }
            else
            {
                links = HeapTokenLinks(heap.Tail, contextKey, request);
                links.Add(heap.Head.Item1, TokenLink(heap.Head.Item1, contextKey, request));
            }

            return(links);
        }
Beispiel #57
0
 private static void VisitDeclarations(FSharpList <SynModuleDecl> decls)
 {
     foreach (SynModuleDecl declaration in decls)
     {
         if (declaration.IsLet)
         {
             foreach (var binding in ((SynModuleDecl.Let)declaration).bindings)
             {
                 VisitPattern(binding.headPat);
                 VisitExpression(binding.expr);
             }
         }
         else
         {
             Console.WriteLine(" - not supported declaration: " + declaration);
         }
     }
 }
Beispiel #58
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");
            }
        }
Beispiel #59
0
        private static GeneticModels.SimulationResult WrapStateToResult(States.GameState state)
        {
            // Use dirty trick with wrapping state into simulation result to use it in view.

            var states = new FSharpList <States.GameState>(
                state, FSharpList <States.GameState> .Empty
                );

            var indiviaualWorld = new GeneticModels.IndividualWorldResult(0.0, states);

            var results = new FSharpList <GeneticModels.IndividualWorldResult>(
                indiviaualWorld, FSharpList <GeneticModels.IndividualWorldResult> .Empty
                );

            var brain = new GeneticModels.ActorChromosome(FSharpList <double> .Empty, 0);

            return(new GeneticModels.SimulationResult(0.0, results, brain));
        }
        public void Draw(FSharpMap <FieldCoords, FieldState> state, FSharpList <Tuple <FieldCoords, FSharpOption <FieldCoords>, FieldCoords> > validMoves)
        {
            State       = state;
            _ValidMoves = validMoves;

            Bitmap   bmp    = new Bitmap(_CanvasSize, _CanvasSize);
            Graphics canvas = Graphics.FromImage(bmp);

            DrawGrid(canvas);
            DrawFields(canvas);
            //DrawPossibleMoves(canvas);
            //DrawCoords(canvas);

            canvas.Flush();
            canvas.Dispose();

            _MainPictureBox.Image = bmp;
        }