Beispiel #1
0
        public override bool CastFrom(object source)
        {
            // This function is called when Grasshopper needs to convert other data
            // into GsaGridPlane.


            if (source == null)
            {
                return(false);
            }

            //Cast from GsaGridPlane
            if (typeof(GsaGridPlaneSurface).IsAssignableFrom(source.GetType()))
            {
                Value = (GsaGridPlaneSurface)source;
                return(true);
            }

            //Cast from Plane
            Plane pln = new Plane();

            if (GH_Convert.ToPlane(source, ref pln, GH_Conversion.Both))
            {
                GsaGridPlaneSurface gridplane = new GsaGridPlaneSurface(pln);
                this.Value = gridplane;
                return(true);
            }

            return(false);
        }
Beispiel #2
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GH_Point ghpt = new GH_Point();

            if (DA.GetData(0, ref ghpt))
            {
                Point3d pt = new Point3d();
                if (GH_Convert.ToPoint3d(ghpt, ref pt, GH_Conversion.Both))
                {
                    GH_Plane gH_Plane  = new GH_Plane();
                    Plane    localAxis = Plane.WorldXY;
                    if (DA.GetData(1, ref gH_Plane))
                    {
                        GH_Convert.ToPlane(gH_Plane, ref localAxis, GH_Conversion.Both);
                    }

                    GsaNode node = new GsaNode(pt);

                    GsaBool6 bool6 = new GsaBool6();
                    if (DA.GetData(2, ref bool6))
                    {
                        x  = bool6.X;
                        y  = bool6.Y;
                        z  = bool6.Z;
                        xx = bool6.XX;
                        yy = bool6.YY;
                        zz = bool6.ZZ;
                    }

                    GsaSpring spring = new GsaSpring();
                    if (DA.GetData(3, ref spring))
                    {
                        node.Spring = spring;
                    }

                    node.LocalAxis = localAxis;

                    node.Node.Restraint.X  = x;
                    node.Node.Restraint.Y  = y;
                    node.Node.Restraint.Z  = z;
                    node.Node.Restraint.XX = xx;
                    node.Node.Restraint.YY = yy;
                    node.Node.Restraint.ZZ = zz;

                    DA.SetData(0, new GsaNodeGoo(node.Duplicate()));
                }
            }
        }
Beispiel #3
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GH_ObjectWrapper gh_typ = new GH_ObjectWrapper();

            if (DA.GetData(0, ref gh_typ))
            {
                GsaNode gsaNode = new GsaNode();
                Point3d tempPt  = new Point3d();
                if (gh_typ.Value is GsaNodeGoo)
                {
                    gh_typ.CastTo(ref gsaNode);
                    if (gsaNode == null)
                    {
                        AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Node input is null");
                    }
                    if (gsaNode.Node == null)
                    {
                        AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Node input is null");
                    }
                }
                else if (GH_Convert.ToPoint3d(gh_typ.Value, ref tempPt, GH_Conversion.Both))
                {
                    gsaNode = new GsaNode(tempPt);
                }
                else
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Unable to convert input to Node");
                    return;
                }
                GsaNode node = gsaNode.Duplicate();

                // #### inputs ####

                // 1 ID
                GH_Integer ghInt = new GH_Integer();
                if (DA.GetData(1, ref ghInt))
                {
                    if (GH_Convert.ToInt32(ghInt, out int id, GH_Conversion.Both))
                    {
                        node.ID = id;
                    }
                }

                // 2 Point
                GH_Point ghPt = new GH_Point();
                if (DA.GetData(2, ref ghPt))
                {
                    Point3d pt = new Point3d();
                    if (GH_Convert.ToPoint3d(ghPt, ref pt, GH_Conversion.Both))
                    {
                        node.Point           = pt;
                        node.Node.Position.X = pt.X;
                        node.Node.Position.Y = pt.Y;
                        node.Node.Position.Z = pt.Z;
                    }
                }

                // 3 plane
                GH_Plane ghPln = new GH_Plane();
                if (DA.GetData(3, ref ghPln))
                {
                    Plane pln = new Plane();
                    if (GH_Convert.ToPlane(ghPln, ref pln, GH_Conversion.Both))
                    {
                        pln.Origin     = node.Point;
                        node.LocalAxis = pln;
                    }
                }

                // 4 Restraint
                GsaBool6 restraint = new GsaBool6();
                if (DA.GetData(4, ref restraint))
                {
                    node.Node.Restraint.X  = restraint.X;
                    node.Node.Restraint.Y  = restraint.Y;
                    node.Node.Restraint.Z  = restraint.Z;
                    node.Node.Restraint.XX = restraint.XX;
                    node.Node.Restraint.YY = restraint.YY;
                    node.Node.Restraint.ZZ = restraint.ZZ;
                }

                // 5 Spring
                GsaSpring spring = new GsaSpring();
                if (DA.GetData(5, ref spring))
                {
                    if (spring != null)
                    {
                        node.Spring = spring;
                    }
                }

                // 6 Name
                GH_String ghStr = new GH_String();
                if (DA.GetData(6, ref ghStr))
                {
                    if (GH_Convert.ToString(ghStr, out string name, GH_Conversion.Both))
                    {
                        node.Node.Name = name;
                    }
                }

                // 7 Colour
                GH_Colour ghcol = new GH_Colour();
                if (DA.GetData(7, ref ghcol))
                {
                    if (GH_Convert.ToColor(ghcol, out System.Drawing.Color col, GH_Conversion.Both))
                    {
                        node.Colour = col;
                    }
                }

                // #### outputs ####
                DA.SetData(0, new GsaNodeGoo(node));
                DA.SetData(1, node.ID);
                DA.SetData(2, node.Point);
                DA.SetData(3, node.LocalAxis);
                GsaBool6 restraint1 = new GsaBool6
                {
                    X  = node.Node.Restraint.X,
                    Y  = node.Node.Restraint.Y,
                    Z  = node.Node.Restraint.Z,
                    XX = node.Node.Restraint.XX,
                    YY = node.Node.Restraint.YY,
                    ZZ = node.Node.Restraint.ZZ
                };
                DA.SetData(4, restraint1);
                GsaSpring spring1 = new GsaSpring();
                if (node.Spring != null)
                {
                    spring1 = node.Spring.Duplicate();
                }
                DA.SetData(5, new GsaSpringGoo(spring1));
                DA.SetData(6, node.Node.Name);
                DA.SetData(7, node.Colour);
                try { DA.SetDataList(8, node.Node.ConnectedElements); } catch (Exception) { }
                try { DA.SetDataList(9, node.Node.ConnectedMembers); } catch (Exception) { }
            }
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GsaNode gsaNode = new GsaNode();

            if (!DA.GetData(0, ref gsaNode))
            {
                gsaNode = new GsaNode(new Point3d(0, 0, 0));
            }

            if (gsaNode != null)
            {
                // #### inputs ####

                GH_Integer ghInt = new GH_Integer();
                if (DA.GetData(1, ref ghInt))
                {
                    if (GH_Convert.ToInt32(ghInt, out int id, GH_Conversion.Both))
                    {
                        gsaNode.ID = id;
                    }
                }

                GH_String ghStr = new GH_String();
                if (DA.GetData(2, ref ghStr))
                {
                    if (GH_Convert.ToString(ghStr, out string name, GH_Conversion.Both))
                    {
                        gsaNode.Node.Name = name;
                    }
                }

                GH_Point ghPt = new GH_Point();
                if (DA.GetData(3, ref ghPt))
                {
                    Point3d pt = new Point3d();
                    if (GH_Convert.ToPoint3d(ghPt, ref pt, GH_Conversion.Both))
                    {
                        gsaNode.Point           = pt;
                        gsaNode.Node.Position.X = pt.X;
                        gsaNode.Node.Position.Y = pt.Y;
                        gsaNode.Node.Position.Z = pt.Z;
                    }
                }

                GH_Plane ghPln = new GH_Plane();
                if (DA.GetData(4, ref ghPln))
                {
                    Plane pln = new Plane();
                    if (GH_Convert.ToPlane(ghPln, ref pln, GH_Conversion.Both))
                    {
                        pln.Origin        = gsaNode.Point;
                        gsaNode.LocalAxis = pln;
                    }
                }

                GsaBool6 restraint = new GsaBool6();
                if (DA.GetData(5, ref restraint))
                {
                    restraint.X  = gsaNode.Node.Restraint.X;
                    restraint.Y  = gsaNode.Node.Restraint.Y;
                    restraint.Z  = gsaNode.Node.Restraint.Z;
                    restraint.XX = gsaNode.Node.Restraint.XX;
                    restraint.YY = gsaNode.Node.Restraint.YY;
                    restraint.ZZ = gsaNode.Node.Restraint.ZZ;
                }

                GsaSpring spring = new GsaSpring();
                if (DA.GetData(6, ref spring))
                {
                    if (gsaNode.Spring != null)
                    {
                        gsaNode.Spring = spring;
                    }
                }


                // #### outputs ####
                DA.SetData(0, new GsaNodeGoo(gsaNode));

                DA.SetData(1, gsaNode.ID);
                DA.SetData(2, gsaNode.Node.Name);

                DA.SetData(3, gsaNode.Point);

                DA.SetData(4, gsaNode.LocalAxis);

                GsaBool6 restraint1 = new GsaBool6
                {
                    X  = gsaNode.Node.Restraint.X,
                    Y  = gsaNode.Node.Restraint.Y,
                    Z  = gsaNode.Node.Restraint.Z,
                    XX = gsaNode.Node.Restraint.XX,
                    YY = gsaNode.Node.Restraint.YY,
                    ZZ = gsaNode.Node.Restraint.ZZ
                };
                DA.SetData(5, restraint1);

                GsaSpring spring1 = new GsaSpring();
                if (gsaNode.Spring != null)
                {
                    spring1 = gsaNode.Spring.Duplicate();
                }
                DA.SetData(6, new GsaSpringGoo(spring1));

                try { DA.SetDataList(7, gsaNode.Node.ConnectedElements); } catch (Exception) { }

                try { DA.SetDataList(8, gsaNode.Node.ConnectedMembers); } catch (Exception) { }
            }
        }
Beispiel #5
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object can be used to retrieve data from input parameters and
        /// to store data in output parameters.</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var curves     = new DataTree <Polyline>();
            var points     = new DataTree <Point3d>();
            var frames     = new DataTree <Plane>();
            int collisions = 0;

            var gCurves = new GH_Structure <GH_Curve>();
            var gPoints = new GH_Structure <GH_Point>();
            var gFrames = new GH_Structure <GH_Plane>();

            if (!DA.GetDataTree(0, out gPoints))
            {
                return;
            }
            if (!DA.GetDataTree(1, out gFrames))
            {
                return;
            }
            DA.GetData(2, ref collisions);
            if (!DA.GetDataTree(3, out gCurves))
            {
                return;
            }

            var tempPoint = new Point3d();

            foreach (var path in gPoints.Paths)
            {
                var branch = gPoints.get_Branch(path);

                foreach (var item in branch)
                {
                    GH_Convert.ToPoint3d(item, ref tempPoint, GH_Conversion.Both);

                    points.Add(tempPoint, path);
                }
            }

            Curve tempCurve  = null;
            var   tempPoly   = new Polyline();
            var   curvesList = new List <Curve>();

            foreach (var path in gCurves.Paths)
            {
                var branch = gCurves.get_Branch(path);

                foreach (var item in branch)
                {
                    GH_Convert.ToCurve(item, ref tempCurve, GH_Conversion.Both);
                    tempCurve.TryGetPolyline(out tempPoly);

                    curves.Add(tempPoly, path);
                }
            }

            var tempPlane = new Plane();

            foreach (var path in gFrames.Paths)
            {
                var branch = gFrames.get_Branch(path);

                foreach (var item in branch)
                {
                    GH_Convert.ToPlane(item, ref tempPlane, GH_Conversion.Both);
                    frames.Add(tempPlane, path);
                }
            }

            int             branches = curves.BranchCount;
            List <Polyline> listOut  = new List <Polyline>();

            if (branches == 1)
            {
                listOut.AddRange(curves.Branch(0));
            }

            if (branches == 2)
            {
                if (collisions != 0)
                {
                    int branchOneCount = curves.Branch(0).Count;

                    var pointComparer = points.Branch(0)[curves.Branch(0).Count - 1].Z;

                    var comparer = new List <double>();

                    var listOfCurves    = new DataTree <Polyline>();
                    var listOfCurvesOne = new List <Polyline>();
                    var listOfCurvesTwo = new List <Polyline>();

                    listOfCurves.AddRange(curves.Branch(0));

                    var listOfPlanes    = new List <Plane>();
                    var listOfPlanesOne = new List <Plane>();

                    listOfPlanes.AddRange(frames.Branch(0));

                    var pathOne = new GH_Path(1);
                    var pathTwo = new GH_Path(2);

                    for (int i = 0; i < curves.Branch(1).Count; ++i)
                    {
                        comparer.Add(points.Branch(1)[i].Z);

                        if (pointComparer >= comparer[i])
                        {
                            listOfCurves.Add(curves.Branch(1)[i], pathOne);
                        }

                        else
                        {
                            listOfCurvesOne.Add(curves.Branch(1)[i]);
                            listOfPlanesOne.Add(frames.Branch(1)[i]);
                        }
                    }

                    var listOfUnions = RegionUnion(listOfCurves, listOfPlanes);

                    listOut.AddRange(listOfUnions);
                    listOut.AddRange(listOfCurvesOne);
                }

                else
                {
                    for (int i = 0; i < branches; ++i)
                    {
                        listOut.AddRange(curves.Branch(i));
                    }
                }
            }

            if (branches == 3)
            {
                if (collisions != 0)
                {
                    int branchOneCount = curves.Branch(0).Count;

                    var pointComparer    = points.Branch(0)[curves.Branch(0).Count - 1].Z;
                    var pointComparerOne = points.Branch(1)[curves.Branch(1).Count - 1].Z;

                    var comparer = new List <double>();

                    var listOfCurves    = new DataTree <Polyline>();
                    var listOfCurvesOne = new DataTree <Polyline>();
                    var listOfCurvesTwo = new List <Polyline>();

                    listOfCurves.AddRange(curves.Branch(0));

                    var listOfPlanes    = new List <Plane>();
                    var listOfPlanesOne = new List <Plane>();

                    listOfPlanes.AddRange(frames.Branch(0));

                    var pathOne = new GH_Path(1);
                    var pathTwo = new GH_Path(2);

                    for (int i = 0; i < curves.Branch(1).Count; ++i)
                    {
                        comparer.Add(points.Branch(1)[i].Z);

                        if (pointComparer >= comparer[i])
                        {
                            listOfCurves.Add(curves.Branch(1)[i], pathOne);
                        }

                        else
                        {
                            listOfCurvesOne.Add(curves.Branch(1)[i], pathOne);
                            listOfCurvesOne.Add(curves.Branch(2)[i], pathTwo);
                            listOfPlanesOne.Add(frames.Branch(1)[i]);
                        }
                    }

                    var comparerOne = new List <double>();

                    for (int i = 0; i < curves.Branch(2).Count; ++i)
                    {
                        comparerOne.Add(points.Branch(2)[i].Z);

                        if (pointComparer >= comparerOne[i])
                        {
                            listOfCurves.Add(curves.Branch(2)[i], pathTwo);
                        }

                        if (pointComparerOne >= comparerOne[i])
                        {
                        }

                        else
                        {
                            listOfCurvesTwo.Add(curves.Branch(2)[i]);
                        }
                    }

                    List <Polyline> listOfUnionObjs    = RegionUnion(listOfCurves, listOfPlanes);
                    List <Polyline> listOfUnionObjsOne = RegionUnion(listOfCurvesOne, listOfPlanesOne);

                    listOut.AddRange(listOfUnionObjs);
                    listOut.AddRange(listOfUnionObjsOne);
                    listOut.AddRange(listOfCurvesTwo);
                }

                else
                {
                    for (int i = 0; i < branches; ++i)
                    {
                        listOut.AddRange(curves.Branch(i));
                    }
                }
            }

            DA.SetDataList(0, listOut);

            var volume       = new DataTree <Brep>();
            var polyToCurves = new DataTree <Curve>();

            for (int i = 0; i < branches; ++i)
            {
                var path = new GH_Path(i);

                for (int j = 0; j < curves.Branch(i).Count; ++j)
                {
                    polyToCurves.Add(curves.Branch(i)[j].ToNurbsCurve(), path);
                }
            }

            for (int i = 0; i < branches; ++i)
            {
                volume.Add(Brep.CreateFromLoft(polyToCurves.Branch(i), Point3d.Unset, Point3d.Unset, LoftType.Tight, false)[0].CapPlanarHoles(0.0001), new GH_Path(i));
            }

            DA.SetDataTree(1, volume);

            DA.SetData(2, branches);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            Plane pln = Plane.WorldXY;

            // 0 Plane
            GH_Plane gh_pln = new GH_Plane();

            if (DA.GetData(0, ref gh_pln))
            {
                GH_Convert.ToPlane(gh_pln, ref pln, GH_Conversion.Both);
            }

            // create gsa gridplanesurface from plane
            GsaGridPlaneSurface gps = new GsaGridPlaneSurface(pln);

            // 1 Grid plane ID
            GH_Integer ghint = new GH_Integer();

            if (DA.GetData(1, ref ghint))
            {
                int id = 0;
                GH_Convert.ToInt32(ghint, out id, GH_Conversion.Both);
                gps.GridPlaneID = id;
            }

            // 2 Grid elevation
            GH_Number ghnum = new GH_Number();

            if (DA.GetData(2, ref ghnum))
            {
                double elev = 0;
                if (GH_Convert.ToDouble(ghnum, out elev, GH_Conversion.Both))
                {
                    gps.GridPlane.Elevation = elev;

                    // if elevation is set we want to move the plane in it's normal direction
                    Vector3d vec = pln.Normal;
                    vec.Unitize();
                    vec.X *= elev;
                    vec.Y *= elev;
                    vec.Z *= elev;
                    Transform xform = Transform.Translation(vec);
                    pln.Transform(xform);
                    gps.Plane = pln;
                    // note this wont move the Grid Plane Axis gps.Axis
                }
            }

            // 3 Name
            GH_String ghtxt = new GH_String();

            if (DA.GetData(3, ref ghtxt))
            {
                string name = "";
                if (GH_Convert.ToString(ghtxt, out name, GH_Conversion.Both))
                {
                    gps.GridPlane.Name = name;
                }
            }

            // set is story
            if (_mode == FoldMode.General)
            {
                gps.GridPlane.IsStoreyType = false;
            }
            else
            {
                gps.GridPlane.IsStoreyType = true;

                // 4 tolerance above
                GH_Number ghtola = new GH_Number();
                if (DA.GetData(4, ref ghtola))
                {
                    double tola = 0;
                    if (GH_Convert.ToDouble(ghtola, out tola, GH_Conversion.Both))
                    {
                        gps.GridPlane.ToleranceAbove = tola;
                    }
                }

                // 5 tolerance above
                GH_Number ghtolb = new GH_Number();
                if (DA.GetData(5, ref ghtolb))
                {
                    double tolb = 0;
                    if (GH_Convert.ToDouble(ghtolb, out tolb, GH_Conversion.Both))
                    {
                        gps.GridPlane.ToleranceBelow = tolb;
                    }
                }
            }

            DA.SetData(0, new GsaGridPlaneSurfaceGoo(gps));
        }