Esempio n. 1
0
        public void TestCreateBool6()
        {
            // create new bool6
            GsaBool6 b6 = new GsaBool6();

            b6.X  = true;
            b6.Y  = true;
            b6.Z  = true;
            b6.XX = true;
            b6.YY = true;
            b6.ZZ = true;

            Assert.IsTrue(b6.X);
            Assert.IsTrue(b6.Y);
            Assert.IsTrue(b6.Z);
            Assert.IsTrue(b6.XX);
            Assert.IsTrue(b6.YY);
            Assert.IsTrue(b6.ZZ);

            b6.X  = false;
            b6.Y  = false;
            b6.Z  = false;
            b6.XX = false;
            b6.YY = false;
            b6.ZZ = false;

            Assert.IsFalse(b6.X);
            Assert.IsFalse(b6.Y);
            Assert.IsFalse(b6.Z);
            Assert.IsFalse(b6.XX);
            Assert.IsFalse(b6.YY);
            Assert.IsFalse(b6.ZZ);
        }
Esempio n. 2
0
        public void TestCreateGsaNodeRestrained()
        {
            // create new Bool6
            GsaBool6 bool6 = new GsaBool6
            {
                X  = true,
                Y  = false,
                Z  = true,
                XX = false,
                YY = true,
                ZZ = false
            };

            // create new node from point with bool6 restraint
            GsaNode node = new GsaNode(new Point3d(5.3, 9.9, 2017), bool6);

            Assert.AreEqual(5.3, node.Point.X);
            Assert.AreEqual(9.9, node.Point.Y);
            Assert.AreEqual(2017, node.Point.Z);
            Assert.IsTrue(node.Node.Restraint.X);
            Assert.IsFalse(node.Node.Restraint.Y);
            Assert.IsTrue(node.Node.Restraint.Z);
            Assert.IsFalse(node.Node.Restraint.XX);
            Assert.IsTrue(node.Node.Restraint.YY);
            Assert.IsFalse(node.Node.Restraint.ZZ);
        }
Esempio n. 3
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GsaBool6 mybool  = new GsaBool6();
            GsaBool6 gsabool = new GsaBool6();

            if (DA.GetData(0, ref gsabool))
            {
                mybool = gsabool.Duplicate();
            }
            if (mybool != null)
            {
                //inputs
                bool x = new bool();
                if (DA.GetData(1, ref x))
                {
                    mybool.X = x;
                }
                bool y = new bool();
                if (DA.GetData(2, ref y))
                {
                    mybool.Y = y;
                }
                bool z = new bool();
                if (DA.GetData(3, ref z))
                {
                    mybool.Z = z;
                }
                bool xx = new bool();
                if (DA.GetData(4, ref xx))
                {
                    mybool.XX = xx;
                }
                bool yy = new bool();
                if (DA.GetData(5, ref yy))
                {
                    mybool.YY = yy;
                }
                bool zz = new bool();
                if (DA.GetData(6, ref zz))
                {
                    mybool.ZZ = zz;
                }

                //outputs
                DA.SetData(0, new GsaBool6Goo(mybool));
                DA.SetData(1, mybool.X);
                DA.SetData(2, mybool.Y);
                DA.SetData(3, mybool.Z);
                DA.SetData(4, mybool.XX);
                DA.SetData(5, mybool.YY);
                DA.SetData(6, mybool.ZZ);
            }
        }
Esempio n. 4
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GH_Boolean ghBolX = new GH_Boolean();

            if (DA.GetData(0, ref ghBolX))
            {
                GH_Convert.ToBoolean(ghBolX, out x, GH_Conversion.Both); //use Grasshopper to convert, these methods covers many cases and are consistent
            }
            GH_Boolean ghBolY = new GH_Boolean();

            if (DA.GetData(1, ref ghBolY))
            {
                GH_Convert.ToBoolean(ghBolY, out y, GH_Conversion.Both);
            }
            GH_Boolean ghBolZ = new GH_Boolean();

            if (DA.GetData(2, ref ghBolZ))
            {
                GH_Convert.ToBoolean(ghBolZ, out z, GH_Conversion.Both);
            }
            GH_Boolean ghBolXX = new GH_Boolean();

            if (DA.GetData(3, ref ghBolXX))
            {
                GH_Convert.ToBoolean(ghBolXX, out xx, GH_Conversion.Both);
            }
            GH_Boolean ghBolYY = new GH_Boolean();

            if (DA.GetData(4, ref ghBolYY))
            {
                GH_Convert.ToBoolean(ghBolYY, out yy, GH_Conversion.Both);
            }
            GH_Boolean ghBolZZ = new GH_Boolean();

            if (DA.GetData(5, ref ghBolZZ))
            {
                GH_Convert.ToBoolean(ghBolZZ, out zz, GH_Conversion.Both);
            }
            GsaBool6 bool6 = new GsaBool6
            {
                X  = x,
                Y  = y,
                Z  = z,
                XX = xx,
                YY = yy,
                ZZ = zz
            };

            DA.SetData(0, new GsaBool6Goo(bool6.Duplicate())); // output as Goo-type for consistency.
        }
Esempio n. 5
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()));
                }
            }
        }
Esempio n. 6
0
        public void TestCreateGsaElem1dGetReleases()
        {
            // create new line
            Line ln = new Line(new Point3d(1, 4, 6), new Point3d(-2, 3, -5));

            // create element
            GsaElement1d elem = new GsaElement1d(new LineCurve(ln));

            GsaBool6 rel1 = elem.ReleaseStart;

            Assert.IsFalse(rel1.X);
            Assert.IsFalse(rel1.Y);
            Assert.IsFalse(rel1.Z);
            Assert.IsFalse(rel1.XX);
            Assert.IsFalse(rel1.YY);
            Assert.IsFalse(rel1.ZZ);
        }
Esempio n. 7
0
        public void TestCreateGsaNodeIdRestrainLocAxis()
        {
            // create new Bool6
            GsaBool6 bool6 = new GsaBool6
            {
                X  = false,
                Y  = true,
                Z  = false,
                XX = true,
                YY = false,
                ZZ = true
            };
            // create new rhino plane for local axis
            Plane pln = Plane.WorldZX;

            // set ID
            int id = 44;

            // create new node from point with id, bool6 restraint and plane local axis:
            GsaNode node = new GsaNode(new Point3d(-40, -3.654, -99), id, bool6, pln);

            Assert.AreEqual(-40, node.Point.X);
            Assert.AreEqual(-3.654, node.Point.Y);
            Assert.AreEqual(-99, node.Point.Z);

            Assert.AreEqual(44, node.ID);

            Assert.IsFalse(node.Node.Restraint.X);
            Assert.IsTrue(node.Node.Restraint.Y);
            Assert.IsFalse(node.Node.Restraint.Z);
            Assert.IsTrue(node.Node.Restraint.XX);
            Assert.IsFalse(node.Node.Restraint.YY);
            Assert.IsTrue(node.Node.Restraint.ZZ);

            // the local plane origin point should be moved to the node position
            Assert.AreEqual(-40, node.LocalAxis.OriginX);
            Assert.AreEqual(-3.654, node.LocalAxis.OriginY);
            Assert.AreEqual(-99, node.LocalAxis.OriginZ);
            Assert.AreEqual(0, node.LocalAxis.Normal.X);
            Assert.AreEqual(1, node.LocalAxis.Normal.Y);
            Assert.AreEqual(0, node.LocalAxis.Normal.Z);
        }
Esempio n. 8
0
        public void TestDuplicateBool6()
        {
            // create new bool6
            GsaBool6 origB6 = new GsaBool6();

            origB6.X  = true;
            origB6.Y  = false;
            origB6.Z  = true;
            origB6.XX = false;
            origB6.YY = true;
            origB6.ZZ = false;

            // duplicate
            GsaBool6 dup = origB6.Duplicate();

            // make some changes to original
            origB6.X  = false;
            origB6.Y  = true;
            origB6.Z  = false;
            origB6.XX = true;
            origB6.YY = false;
            origB6.ZZ = true;

            Assert.IsTrue(dup.X);
            Assert.IsFalse(dup.Y);
            Assert.IsTrue(dup.Z);
            Assert.IsFalse(dup.XX);
            Assert.IsTrue(dup.YY);
            Assert.IsFalse(dup.ZZ);

            Assert.IsFalse(origB6.X);
            Assert.IsTrue(origB6.Y);
            Assert.IsFalse(origB6.Z);
            Assert.IsTrue(origB6.XX);
            Assert.IsFalse(origB6.YY);
            Assert.IsTrue(origB6.ZZ);
        }
Esempio n. 9
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)
        {
            GH_Curve ghcrv = new GH_Curve();

            if (DA.GetData(0, ref ghcrv))
            {
                if (ghcrv == null)
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Curve input is null");
                }
                Curve crv = null;
                if (GH_Convert.ToCurve(ghcrv, ref crv, GH_Conversion.Both))
                {
                    GsaMember1d mem = new GsaMember1d(crv);

                    GsaBool6 rel1 = new GsaBool6
                    {
                        X  = x1,
                        Y  = y1,
                        Z  = z1,
                        XX = xx1,
                        YY = yy1,
                        ZZ = zz1
                    };

                    mem.ReleaseStart = rel1;

                    GsaBool6 rel2 = new GsaBool6
                    {
                        X  = x2,
                        Y  = y2,
                        Z  = z2,
                        XX = xx2,
                        YY = yy2,
                        ZZ = zz2
                    };
                    mem.ReleaseEnd = rel2;

                    // 1 section
                    GH_ObjectWrapper gh_typ  = new GH_ObjectWrapper();
                    GsaSection       section = new GsaSection();
                    if (DA.GetData(1, ref gh_typ))
                    {
                        if (gh_typ.Value is GsaSectionGoo)
                        {
                            gh_typ.CastTo(ref section);
                            mem.Section = section;
                        }
                        else
                        {
                            if (GH_Convert.ToInt32(gh_typ.Value, out int idd, GH_Conversion.Both))
                            {
                                mem.Member.Property = idd;
                            }
                            else
                            {
                                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Unable to convert PB input to a Section Property of reference integer");
                                return;
                            }
                        }
                    }

                    DA.SetData(0, new GsaMember1dGoo(mem));
                }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GsaElement1d gsaElement1d = new GsaElement1d();

            if (DA.GetData(0, ref gsaElement1d))
            {
                GsaElement1d elem = gsaElement1d.Duplicate();

                // #### inputs ####
                // 1 curve
                GH_Line ghcrv = new GH_Line();
                if (DA.GetData(1, ref ghcrv))
                {
                    Line crv = new Line();
                    if (GH_Convert.ToLine(ghcrv, ref crv, GH_Conversion.Both))
                    {
                        LineCurve    ln      = new LineCurve(crv);
                        GsaElement1d tmpelem = new GsaElement1d(ln)
                        {
                            ID           = elem.ID,
                            Element      = elem.Element,
                            ReleaseEnd   = elem.ReleaseEnd,
                            ReleaseStart = elem.ReleaseStart
                        };
                        elem = tmpelem;
                    }
                }

                // 2 section
                GH_ObjectWrapper gh_typ = new GH_ObjectWrapper();
                if (DA.GetData(2, ref gh_typ))
                {
                    GsaSection section = new GsaSection();
                    if (gh_typ.Value is GsaSection)
                    {
                        gh_typ.CastTo(ref section);
                    }
                    else if (gh_typ.Value is GH_Number)
                    {
                        if (GH_Convert.ToInt32((GH_Number)gh_typ.Value, out int idd, GH_Conversion.Both))
                        {
                            section.ID = idd;
                        }
                    }
                    elem.Section = section;
                }

                // 3 offset
                GsaOffset offset = new GsaOffset();
                if (DA.GetData(3, ref offset))
                {
                    elem.Element.Offset.X1 = offset.X1;
                    elem.Element.Offset.X2 = offset.X2;
                    elem.Element.Offset.Y  = offset.Y;
                    elem.Element.Offset.Z  = offset.Z;
                }

                // 4 start release
                GsaBool6 start = new GsaBool6();
                if (DA.GetData(4, ref start))
                {
                    elem.ReleaseStart = start; //should handle setting the release in elem.Element.SetRelease
                }

                // 5 end release
                GsaBool6 end = new GsaBool6();
                if (DA.GetData(5, ref end))
                {
                    elem.ReleaseEnd = end; //should handle setting the release in elem.Element.SetRelease
                }

                // 6 orientation angle
                GH_Number ghangle = new GH_Number();
                if (DA.GetData(6, ref ghangle))
                {
                    if (GH_Convert.ToDouble(ghangle, out double angle, GH_Conversion.Both))
                    {
                        elem.Element.OrientationAngle = angle;
                    }
                }

                // 7 orientation node
                GH_Integer ghori = new GH_Integer();
                if (DA.GetData(7, ref ghori))
                {
                    if (GH_Convert.ToInt32(ghori, out int orient, GH_Conversion.Both))
                    {
                        elem.Element.OrientationNode = orient;
                    }
                }

                // 8 type
                GH_Integer ghinteg = new GH_Integer();
                if (DA.GetData(8, ref ghinteg))
                {
                    if (GH_Convert.ToInt32(ghinteg, out int type, GH_Conversion.Both))
                    {
                        elem.Element.Type = Util.Gsa.GsaToModel.Element1dType(type);
                    }
                }

                // 9 ID
                GH_Integer ghID = new GH_Integer();
                if (DA.GetData(9, ref ghID))
                {
                    if (GH_Convert.ToInt32(ghID, out int id, GH_Conversion.Both))
                    {
                        elem.ID = id;
                    }
                }

                // 10 name
                GH_String ghnm = new GH_String();
                if (DA.GetData(10, ref ghnm))
                {
                    if (GH_Convert.ToString(ghnm, out string name, GH_Conversion.Both))
                    {
                        elem.Element.Name = name;
                    }
                }

                // 11 Group
                GH_Integer ghgrp = new GH_Integer();
                if (DA.GetData(11, ref ghgrp))
                {
                    if (GH_Convert.ToInt32(ghgrp, out int grp, GH_Conversion.Both))
                    {
                        elem.Element.Group = grp;
                    }
                }

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

                // #### outputs ####
                DA.SetData(0, new GsaElement1dGoo(elem));

                DA.SetData(1, elem.Line);
                DA.SetData(2, elem.Section);

                GsaOffset offset1 = new GsaOffset
                {
                    X1 = elem.Element.Offset.X1,
                    X2 = elem.Element.Offset.X2,
                    Y  = elem.Element.Offset.Y,
                    Z  = elem.Element.Offset.Z
                };
                DA.SetData(3, offset1);

                DA.SetData(4, elem.ReleaseStart);
                DA.SetData(5, elem.ReleaseEnd);

                DA.SetData(6, elem.Element.OrientationAngle);
                DA.SetData(7, elem.Element.OrientationNode);

                DA.SetData(8, elem.Element.Type);

                DA.SetData(9, elem.ID);
                DA.SetData(10, elem.Element.Name);
                DA.SetData(11, elem.Element.Group);
                DA.SetData(12, elem.Element.Colour);

                try { DA.SetData(13, elem.Element.ParentMember.Member); } catch (Exception) { }
                //DA.SetData(16, gsaElement1d.Element.IsDummy);
            }
        }
        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) { }
            }
        }
Esempio n. 13
0
        public static void DrawReleases(GH_PreviewWireArgs args, PolyCurve crv, double angle, GsaBool6 start, GsaBool6 end)
        {
            if (start == null | end == null)
            {
                return;
            }
            #region translation start
            if (start.X == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.05);
                    scale = crv.GetLength();
                }
                else
                {
                    pt = crv.PointAtLength(0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                pln.Rotate(angle, pln.Normal);
                Vector3d vec1 = new Vector3d(pln.XAxis);
                vec1.Unitize();
                vec1 = new Vector3d(vec1.X * 0.025 * scale, vec1.Y * 0.025 * scale, vec1.Z * 0.025 * scale);
                Vector3d vec2 = new Vector3d(vec1);
                vec2.Reverse();
                Transform xf1 = Rhino.Geometry.Transform.Translation(vec1);
                Transform xf2 = Rhino.Geometry.Transform.Translation(vec2);
                Point3d   pt1 = new Point3d(pt);
                pt1.Transform(xf1);
                Point3d pt2 = new Point3d(pt);
                pt2.Transform(xf2);
                Vector3d vec = new Vector3d(pln.Normal);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.25 * scale, vec.Y * 0.25 * scale, vec.Z * 0.25 * scale);
                Line ln1 = new Line(pt1, vec);
                args.Pipeline.DrawLine(ln1, UI.Colour.Support);
                Line ln2 = new Line(pt2, vec);
                args.Pipeline.DrawLine(ln2, UI.Colour.Support);
            }
            if (start.Y == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.05);
                    scale = crv.GetLength();
                }
                else
                {
                    pt = crv.PointAtLength(0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                pln.Rotate(angle, pln.Normal);
                Vector3d vec1 = new Vector3d(pln.XAxis);
                vec1.Unitize();
                vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale);
                Vector3d vec2 = new Vector3d(vec1);
                vec2.Reverse();
                Transform xf1 = Rhino.Geometry.Transform.Translation(vec1);
                Transform xf2 = Rhino.Geometry.Transform.Translation(vec2);
                Point3d   pt1 = new Point3d(pt);
                pt1.Transform(xf1);
                Point3d pt2 = new Point3d(pt);
                pt2.Transform(xf2);
                Vector3d vec3 = new Vector3d(pln.Normal);
                vec3.Unitize();
                vec3 = new Vector3d(vec3.X * 0.025 * scale, vec3.Y * 0.025 * scale, vec3.Z * 0.025 * scale);
                Vector3d vec4 = new Vector3d(vec3);
                vec4.Reverse();
                Transform xf3  = Rhino.Geometry.Transform.Translation(vec3);
                Transform xf4  = Rhino.Geometry.Transform.Translation(vec4);
                Point3d   pt3A = new Point3d(pt1);
                pt3A.Transform(xf3);
                Point3d pt3B = new Point3d(pt2);
                pt3B.Transform(xf3);
                Point3d pt4A = new Point3d(pt1);
                pt4A.Transform(xf4);
                Point3d pt4B = new Point3d(pt2);
                pt4B.Transform(xf4);

                Vector3d vec = new Vector3d(pln.XAxis);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale);
                Vector3d vecRev = new Vector3d(vec);
                vecRev.Reverse();
                Line ln1A = new Line(pt3A, vec);
                args.Pipeline.DrawLine(ln1A, UI.Colour.Support);
                Line ln1B = new Line(pt3B, vecRev);
                args.Pipeline.DrawLine(ln1B, UI.Colour.Support);
                Line ln2A = new Line(pt4A, vec);
                args.Pipeline.DrawLine(ln2A, UI.Colour.Support);
                Line ln2B = new Line(pt4B, vecRev);
                args.Pipeline.DrawLine(ln2B, UI.Colour.Support);
            }
            if (start.Z == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.05);
                    scale = crv.GetLength();
                }
                else
                {
                    pt = crv.PointAtLength(0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                pln.Rotate(angle, pln.Normal);
                Vector3d vec1 = new Vector3d(pln.YAxis);
                vec1.Unitize();
                vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale);
                Vector3d vec2 = new Vector3d(vec1);
                vec2.Reverse();
                Transform xf1 = Rhino.Geometry.Transform.Translation(vec1);
                Transform xf2 = Rhino.Geometry.Transform.Translation(vec2);
                Point3d   pt1 = new Point3d(pt);
                pt1.Transform(xf1);
                Point3d pt2 = new Point3d(pt);
                pt2.Transform(xf2);
                Vector3d vec3 = new Vector3d(pln.Normal);
                vec3.Unitize();
                vec3 = new Vector3d(vec3.X * 0.025 * scale, vec3.Y * 0.025 * scale, vec3.Z * 0.025 * scale);
                Vector3d vec4 = new Vector3d(vec3);
                vec4.Reverse();
                Transform xf3  = Rhino.Geometry.Transform.Translation(vec3);
                Transform xf4  = Rhino.Geometry.Transform.Translation(vec4);
                Point3d   pt3A = new Point3d(pt1);
                pt3A.Transform(xf3);
                Point3d pt3B = new Point3d(pt2);
                pt3B.Transform(xf3);
                Point3d pt4A = new Point3d(pt1);
                pt4A.Transform(xf4);
                Point3d pt4B = new Point3d(pt2);
                pt4B.Transform(xf4);

                Vector3d vec = new Vector3d(pln.YAxis);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale);
                Vector3d vecRev = new Vector3d(vec);
                vecRev.Reverse();
                Line ln1A = new Line(pt3A, vec);
                args.Pipeline.DrawLine(ln1A, UI.Colour.Support);
                Line ln1B = new Line(pt3B, vecRev);
                args.Pipeline.DrawLine(ln1B, UI.Colour.Support);
                Line ln2A = new Line(pt4A, vec);
                args.Pipeline.DrawLine(ln2A, UI.Colour.Support);
                Line ln2B = new Line(pt4B, vecRev);
                args.Pipeline.DrawLine(ln2B, UI.Colour.Support);
            }
            #endregion
            #region translation end
            if (end.X == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.95);
                    scale = crv.GetLength();
                }
                else
                {
                    double len = crv.GetLength();
                    pt = crv.PointAtLength(len - 0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.98, out pln);
                pln.Rotate(angle, pln.Normal);
                Vector3d vec1 = new Vector3d(pln.XAxis);
                vec1.Unitize();
                vec1 = new Vector3d(vec1.X * 0.025 * scale, vec1.Y * 0.025 * scale, vec1.Z * 0.025 * scale);
                Vector3d vec2 = new Vector3d(vec1);
                vec2.Reverse();
                Transform xf1 = Rhino.Geometry.Transform.Translation(vec1);
                Transform xf2 = Rhino.Geometry.Transform.Translation(vec2);
                Point3d   pt1 = new Point3d(pt);
                pt1.Transform(xf1);
                Point3d pt2 = new Point3d(pt);
                pt2.Transform(xf2);
                Vector3d vec = new Vector3d(pln.Normal);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.25 * scale, vec.Y * 0.25 * scale, vec.Z * 0.25 * scale);
                vec.Reverse();
                Line ln1 = new Line(pt1, vec);
                args.Pipeline.DrawLine(ln1, UI.Colour.Support);
                Line ln2 = new Line(pt2, vec);
                args.Pipeline.DrawLine(ln2, UI.Colour.Support);
            }
            if (end.Y == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.95);
                    scale = crv.GetLength();
                }
                else
                {
                    double len = crv.GetLength();
                    pt = crv.PointAtLength(len - 0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                pln.Rotate(angle, pln.Normal);
                Vector3d vec1 = new Vector3d(pln.XAxis);
                vec1.Unitize();
                vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale);
                Vector3d vec2 = new Vector3d(vec1);
                vec2.Reverse();
                Transform xf1 = Rhino.Geometry.Transform.Translation(vec1);
                Transform xf2 = Rhino.Geometry.Transform.Translation(vec2);
                Point3d   pt1 = new Point3d(pt);
                pt1.Transform(xf1);
                Point3d pt2 = new Point3d(pt);
                pt2.Transform(xf2);
                Vector3d vec3 = new Vector3d(pln.Normal);
                vec3.Unitize();
                vec3 = new Vector3d(vec3.X * 0.025 * scale, vec3.Y * 0.025 * scale, vec3.Z * 0.025 * scale);
                Vector3d vec4 = new Vector3d(vec3);
                vec4.Reverse();
                Transform xf3  = Rhino.Geometry.Transform.Translation(vec3);
                Transform xf4  = Rhino.Geometry.Transform.Translation(vec4);
                Point3d   pt3A = new Point3d(pt1);
                pt3A.Transform(xf3);
                Point3d pt3B = new Point3d(pt2);
                pt3B.Transform(xf3);
                Point3d pt4A = new Point3d(pt1);
                pt4A.Transform(xf4);
                Point3d pt4B = new Point3d(pt2);
                pt4B.Transform(xf4);

                Vector3d vec = new Vector3d(pln.XAxis);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale);
                Vector3d vecRev = new Vector3d(vec);
                vecRev.Reverse();
                Line ln1A = new Line(pt3A, vec);
                args.Pipeline.DrawLine(ln1A, UI.Colour.Support);
                Line ln1B = new Line(pt3B, vecRev);
                args.Pipeline.DrawLine(ln1B, UI.Colour.Support);
                Line ln2A = new Line(pt4A, vec);
                args.Pipeline.DrawLine(ln2A, UI.Colour.Support);
                Line ln2B = new Line(pt4B, vecRev);
                args.Pipeline.DrawLine(ln2B, UI.Colour.Support);
            }
            if (end.Z == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.95);
                    scale = crv.GetLength();
                }
                else
                {
                    double len = crv.GetLength();
                    pt = crv.PointAtLength(len - 0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                pln.Rotate(angle, pln.Normal);
                Vector3d vec1 = new Vector3d(pln.YAxis);
                vec1.Unitize();
                vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale);
                Vector3d vec2 = new Vector3d(vec1);
                vec2.Reverse();
                Transform xf1 = Rhino.Geometry.Transform.Translation(vec1);
                Transform xf2 = Rhino.Geometry.Transform.Translation(vec2);
                Point3d   pt1 = new Point3d(pt);
                pt1.Transform(xf1);
                Point3d pt2 = new Point3d(pt);
                pt2.Transform(xf2);
                Vector3d vec3 = new Vector3d(pln.Normal);
                vec3.Unitize();
                vec3 = new Vector3d(vec3.X * 0.025 * scale, vec3.Y * 0.025 * scale, vec3.Z * 0.025 * scale);
                Vector3d vec4 = new Vector3d(vec3);
                vec4.Reverse();
                Transform xf3  = Rhino.Geometry.Transform.Translation(vec3);
                Transform xf4  = Rhino.Geometry.Transform.Translation(vec4);
                Point3d   pt3A = new Point3d(pt1);
                pt3A.Transform(xf3);
                Point3d pt3B = new Point3d(pt2);
                pt3B.Transform(xf3);
                Point3d pt4A = new Point3d(pt1);
                pt4A.Transform(xf4);
                Point3d pt4B = new Point3d(pt2);
                pt4B.Transform(xf4);

                Vector3d vec = new Vector3d(pln.YAxis);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale);
                Vector3d vecRev = new Vector3d(vec);
                vecRev.Reverse();
                Line ln1A = new Line(pt3A, vec);
                args.Pipeline.DrawLine(ln1A, UI.Colour.Support);
                Line ln1B = new Line(pt3B, vecRev);
                args.Pipeline.DrawLine(ln1B, UI.Colour.Support);
                Line ln2A = new Line(pt4A, vec);
                args.Pipeline.DrawLine(ln2A, UI.Colour.Support);
                Line ln2B = new Line(pt4B, vecRev);
                args.Pipeline.DrawLine(ln2B, UI.Colour.Support);
            }
            #endregion
            #region rotation start
            if (start.XX == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.05);
                    scale = crv.GetLength();
                }
                else
                {
                    pt = crv.PointAtLength(0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                Vector3d vec = new Vector3d(pln.Normal);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.25 * scale, vec.Y * 0.25 * scale, vec.Z * 0.25 * scale);
                Line ln1 = new Line(pt, vec);
                args.Pipeline.DrawLine(ln1, UI.Colour.Release, 3);
            }
            if (start.YY == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.05);
                    scale = crv.GetLength();
                }
                else
                {
                    pt = crv.PointAtLength(0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                pln.Rotate(angle, pln.Normal);
                Vector3d vec1 = new Vector3d(pln.XAxis);
                vec1.Unitize();
                vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale);
                Vector3d vec2 = new Vector3d(vec1);
                vec2.Reverse();
                Transform xf1 = Rhino.Geometry.Transform.Translation(vec1);
                Transform xf2 = Rhino.Geometry.Transform.Translation(vec2);
                Point3d   pt1 = new Point3d(pt);
                pt1.Transform(xf1);
                Point3d pt2 = new Point3d(pt);
                pt2.Transform(xf2);

                Vector3d vec = new Vector3d(pln.XAxis);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale);
                Vector3d vecRev = new Vector3d(vec);
                vecRev.Reverse();
                Line ln1A = new Line(pt1, vec);
                args.Pipeline.DrawLine(ln1A, UI.Colour.Release);
                Line ln1B = new Line(pt2, vecRev);
                args.Pipeline.DrawLine(ln1B, UI.Colour.Release);
            }
            if (start.ZZ == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.05);
                    scale = crv.GetLength();
                }
                else
                {
                    pt = crv.PointAtLength(0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                pln.Rotate(angle, pln.Normal);
                Vector3d vec1 = new Vector3d(pln.YAxis);
                vec1.Unitize();
                vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale);
                Vector3d vec2 = new Vector3d(vec1);
                vec2.Reverse();
                Transform xf1 = Rhino.Geometry.Transform.Translation(vec1);
                Transform xf2 = Rhino.Geometry.Transform.Translation(vec2);
                Point3d   pt1 = new Point3d(pt);
                pt1.Transform(xf1);
                Point3d pt2 = new Point3d(pt);
                pt2.Transform(xf2);

                Vector3d vec = new Vector3d(pln.YAxis);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale);
                Vector3d vecRev = new Vector3d(vec);
                vecRev.Reverse();
                Line ln1A = new Line(pt1, vec);
                args.Pipeline.DrawLine(ln1A, UI.Colour.Release);
                Line ln1B = new Line(pt2, vecRev);
                args.Pipeline.DrawLine(ln1B, UI.Colour.Release);
            }
            #endregion
            #region rotation end
            if (end.XX == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.95);
                    scale = crv.GetLength();
                }
                else
                {
                    double len = crv.GetLength();
                    pt = crv.PointAtLength(len - 0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                Vector3d vec = new Vector3d(pln.Normal);
                vec.Unitize();
                vec.Reverse();
                vec = new Vector3d(vec.X * 0.25 * scale, vec.Y * 0.25 * scale, vec.Z * 0.25 * scale);
                Line ln1 = new Line(pt, vec);
                args.Pipeline.DrawLine(ln1, UI.Colour.Release, 3);
            }
            if (end.YY == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.95);
                    scale = crv.GetLength();
                }
                else
                {
                    double len = crv.GetLength();
                    pt = crv.PointAtLength(len - 0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                pln.Rotate(angle, pln.Normal);
                Vector3d vec1 = new Vector3d(pln.XAxis);
                vec1.Unitize();
                vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale);
                Vector3d vec2 = new Vector3d(vec1);
                vec2.Reverse();
                Transform xf1 = Rhino.Geometry.Transform.Translation(vec1);
                Transform xf2 = Rhino.Geometry.Transform.Translation(vec2);
                Point3d   pt1 = new Point3d(pt);
                pt1.Transform(xf1);
                Point3d pt2 = new Point3d(pt);
                pt2.Transform(xf2);

                Vector3d vec = new Vector3d(pln.XAxis);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale);
                Vector3d vecRev = new Vector3d(vec);
                vecRev.Reverse();
                Line ln1A = new Line(pt1, vec);
                args.Pipeline.DrawLine(ln1A, UI.Colour.Release);
                Line ln1B = new Line(pt2, vecRev);
                args.Pipeline.DrawLine(ln1B, UI.Colour.Release);
            }
            if (end.ZZ == true)
            {
                Point3d pt;
                double  scale = 1;
                if (crv.GetLength() < 1)
                {
                    pt    = crv.PointAtNormalizedLength(0.95);
                    scale = crv.GetLength();
                }
                else
                {
                    double len = crv.GetLength();
                    pt = crv.PointAtLength(len - 0.05);
                }

                Plane pln = new Plane();
                crv.PerpendicularFrameAt(0.02, out pln);
                pln.Rotate(angle, pln.Normal);
                Vector3d vec1 = new Vector3d(pln.YAxis);
                vec1.Unitize();
                vec1 = new Vector3d(vec1.X * 0.05 * scale, vec1.Y * 0.05 * scale, vec1.Z * 0.05 * scale);
                Vector3d vec2 = new Vector3d(vec1);
                vec2.Reverse();
                Transform xf1 = Rhino.Geometry.Transform.Translation(vec1);
                Transform xf2 = Rhino.Geometry.Transform.Translation(vec2);
                Point3d   pt1 = new Point3d(pt);
                pt1.Transform(xf1);
                Point3d pt2 = new Point3d(pt);
                pt2.Transform(xf2);

                Vector3d vec = new Vector3d(pln.YAxis);
                vec.Unitize();
                vec = new Vector3d(vec.X * 0.15 * scale, vec.Y * 0.15 * scale, vec.Z * 0.15 * scale);
                Vector3d vecRev = new Vector3d(vec);
                vecRev.Reverse();
                Line ln1A = new Line(pt1, vec);
                args.Pipeline.DrawLine(ln1A, UI.Colour.Release);
                Line ln1B = new Line(pt2, vecRev);
                args.Pipeline.DrawLine(ln1B, UI.Colour.Release);
            }
            #endregion
        }
Esempio n. 14
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GH_Curve ghcrv = new GH_Curve();

            if (DA.GetData(0, ref ghcrv))
            {
                Curve crv = null;
                if (GH_Convert.ToCurve(ghcrv, ref crv, GH_Conversion.Both))
                {
                    GsaMember1d mem = new GsaMember1d(crv);

                    GsaBool6 rel1 = new GsaBool6
                    {
                        X  = x1,
                        Y  = y1,
                        Z  = z1,
                        XX = xx1,
                        YY = yy1,
                        ZZ = zz1
                    };

                    mem.ReleaseStart = rel1;

                    GsaBool6 rel2 = new GsaBool6
                    {
                        X  = x2,
                        Y  = y2,
                        Z  = z2,
                        XX = xx2,
                        YY = yy2,
                        ZZ = zz2
                    };
                    mem.ReleaseEnd = rel2;

                    // 1 section
                    GH_ObjectWrapper gh_typ  = new GH_ObjectWrapper();
                    GsaSection       section = new GsaSection();
                    if (DA.GetData(1, ref gh_typ))
                    {
                        if (gh_typ.Value is GsaSection)
                        {
                            gh_typ.CastTo(ref section);
                        }
                        else if (gh_typ.Value is GH_Number)
                        {
                            if (GH_Convert.ToInt32((GH_Number)gh_typ.Value, out int idd, GH_Conversion.Both))
                            {
                                section.ID = idd;
                            }
                        }
                    }
                    else
                    {
                        section.ID = 1;
                    }
                    mem.Section = section;

                    DA.SetData(0, new GsaMember1dGoo(mem));
                }
            }
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GsaMember1d gsaMember1d = new GsaMember1d();

            if (DA.GetData(0, ref gsaMember1d))
            {
                GsaMember1d mem = gsaMember1d.Duplicate();

                // #### inputs ####

                // 1 curve
                GH_Curve ghcrv = new GH_Curve();
                if (DA.GetData(1, ref ghcrv))
                {
                    Curve crv = null;
                    if (GH_Convert.ToCurve(ghcrv, ref crv, GH_Conversion.Both))
                    {
                        GsaMember1d tmpmem = new GsaMember1d(crv)
                        {
                            ID           = mem.ID,
                            Member       = mem.Member,
                            ReleaseEnd   = mem.ReleaseEnd,
                            ReleaseStart = mem.ReleaseStart
                        };
                        mem = tmpmem;
                    }
                }

                // 2 section
                GH_ObjectWrapper gh_typ = new GH_ObjectWrapper();
                if (DA.GetData(2, ref gh_typ))
                {
                    GsaSection section = new GsaSection();
                    if (gh_typ.Value is GsaSection)
                    {
                        gh_typ.CastTo(ref section);
                    }
                    else if (gh_typ.Value is GH_Number)
                    {
                        if (GH_Convert.ToInt32((GH_Number)gh_typ.Value, out int idd, GH_Conversion.Both))
                        {
                            section.ID = idd;
                        }
                    }
                    mem.Section = section;
                }


                // 3 type
                GH_Integer ghint = new GH_Integer();
                if (DA.GetData(4, ref ghint))
                {
                    if (GH_Convert.ToInt32(ghint, out int type, GH_Conversion.Both))
                    {
                        mem.Member.Type = Util.Gsa.GsaToModel.Member1dType(type);
                    }
                }

                // 4 element type
                GH_Integer ghinteg = new GH_Integer();
                if (DA.GetData(4, ref ghinteg))
                {
                    if (GH_Convert.ToInt32(ghinteg, out int type, GH_Conversion.Both))
                    {
                        mem.Member.Type1D = Util.Gsa.GsaToModel.Element1dType(type);
                    }
                }

                // 5 offset
                GsaOffset offset = new GsaOffset();
                if (DA.GetData(5, ref offset))
                {
                    mem.Member.Offset.X1 = offset.X1;
                    mem.Member.Offset.X2 = offset.X2;
                    mem.Member.Offset.Y  = offset.Y;
                    mem.Member.Offset.Z  = offset.Z;
                }

                // 6 start release
                GsaBool6 start = new GsaBool6();
                if (DA.GetData(6, ref start))
                {
                    mem.ReleaseStart = start;
                }

                // 7 end release
                GsaBool6 end = new GsaBool6();
                if (DA.GetData(7, ref end))
                {
                    mem.ReleaseEnd = end;
                }

                // 8 orientation angle
                GH_Number ghangle = new GH_Number();
                if (DA.GetData(8, ref ghangle))
                {
                    if (GH_Convert.ToDouble(ghangle, out double angle, GH_Conversion.Both))
                    {
                        mem.Member.OrientationAngle = angle;
                    }
                }

                // 9 orientation node
                GH_Integer ghori = new GH_Integer();
                if (DA.GetData(9, ref ghori))
                {
                    if (GH_Convert.ToInt32(ghori, out int orient, GH_Conversion.Both))
                    {
                        mem.Member.OrientationNode = orient;
                    }
                }

                // 10 mesh size
                GH_Number ghmsz = new GH_Number();
                if (DA.GetData(10, ref ghmsz))
                {
                    if (GH_Convert.ToDouble(ghmsz, out double msz, GH_Conversion.Both))
                    {
                        mem.Member.MeshSize = msz;
                    }
                }

                // 11 mesh with others
                GH_Boolean ghbool = new GH_Boolean();
                if (DA.GetData(11, ref ghbool))
                {
                    if (GH_Convert.ToBoolean(ghbool, out bool mbool, GH_Conversion.Both))
                    {
                        //mem.member.MeshWithOthers
                    }
                }

                // 12 ID
                GH_Integer ghID = new GH_Integer();
                if (DA.GetData(12, ref ghID))
                {
                    if (GH_Convert.ToInt32(ghID, out int id, GH_Conversion.Both))
                    {
                        mem.ID = id;
                    }
                }

                // 13 name
                GH_String ghnm = new GH_String();
                if (DA.GetData(13, ref ghnm))
                {
                    if (GH_Convert.ToString(ghnm, out string name, GH_Conversion.Both))
                    {
                        mem.Member.Name = name;
                    }
                }

                // 14 Group
                GH_Integer ghgrp = new GH_Integer();
                if (DA.GetData(14, ref ghgrp))
                {
                    if (GH_Convert.ToInt32(ghgrp, out int grp, GH_Conversion.Both))
                    {
                        mem.Member.Group = grp;
                    }
                }

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

                // 16 Dummy
                GH_Boolean ghdum = new GH_Boolean();
                if (DA.GetData(16, ref ghdum))
                {
                    if (GH_Convert.ToBoolean(ghdum, out bool dum, GH_Conversion.Both))
                    {
                        mem.Member.IsDummy = dum;
                    }
                }

                // #### outputs ####
                DA.SetData(0, new GsaMember1dGoo(mem));
                DA.SetData(1, mem.PolyCurve);
                DA.SetData(2, mem.Section);

                DA.SetData(3, mem.Member.Type);

                DA.SetData(4, mem.Member.Type1D);

                GsaOffset gsaOffset = new GsaOffset
                {
                    X1 = mem.Member.Offset.X1,
                    X2 = mem.Member.Offset.X2,
                    Y  = mem.Member.Offset.Y,
                    Z  = mem.Member.Offset.Z
                };
                DA.SetData(5, gsaOffset);

                DA.SetData(6, mem.ReleaseStart);
                DA.SetData(7, mem.ReleaseEnd);

                DA.SetData(8, mem.Member.OrientationAngle);
                DA.SetData(9, mem.Member.OrientationNode);

                DA.SetData(10, mem.Member.MeshSize);
                //DA.SetData(11, mem.member.MeshSize); //mesh with others bool

                DA.SetData(12, mem.ID);
                DA.SetData(13, mem.Member.Name);
                DA.SetData(14, mem.Member.Group);
                DA.SetData(15, mem.Member.Colour);

                DA.SetData(16, mem.Member.IsDummy);
            }
        }