Ejemplo n.º 1
0
        public void CreateOffsetComponentTest()
        {
            // create the component
            var comp = new GhSA.Components.CreateOffset();

            comp.CreateAttributes();

            Component.SetInput(comp, "0.5");
            Component.SetInput(comp, -0.75, 1);
            Component.SetInput(comp, 1.99, 2);
            Component.SetInput(comp, 0.99, 3);

            // set output data to Gsa-goo type
            GsaOffsetGoo output = (GsaOffsetGoo)Component.GetOutput(comp);

            // cast from -goo to Gsa-GH data type
            GsaOffset offset = new GsaOffset();

            output.CastTo(ref offset);

            Assert.AreEqual(0.5, offset.X1);
            Assert.AreEqual(-0.75, offset.X2);
            Assert.AreEqual(1.99, offset.Y);
            Assert.AreEqual(0.99, offset.Z);
        }
Ejemplo n.º 2
0
        public void TestDuplicateOffset()
        {
            // create new offset
            GsaOffset offset = new GsaOffset();

            offset.X1 = -1.57;
            offset.X2 = 2.5;
            offset.Y  = -4.2;
            offset.Z  = 10.5;

            // duplicate original
            GsaOffset dup = offset.Duplicate();

            // make some changes to original
            offset.X1 = -1000;
            offset.X2 = 0.0025;
            offset.Y  = 42;
            offset.Z  = 0;

            Assert.AreEqual(-1.57, dup.X1);
            Assert.AreEqual(2.5, dup.X2);
            Assert.AreEqual(-4.2, dup.Y);
            Assert.AreEqual(10.5, dup.Z);

            Assert.AreEqual(-1000, offset.X1);
            Assert.AreEqual(0.0025, offset.X2);
            Assert.AreEqual(42, offset.Y);
            Assert.AreEqual(0, offset.Z);
        }
Ejemplo n.º 3
0
        public void TestCreateOffset()
        {
            // create new offset
            GsaOffset offset = new GsaOffset();

            offset.X1 = 1.57;
            offset.X2 = -2.5;
            offset.Y  = 4.2;
            offset.Z  = -10.5;

            Assert.AreEqual(1.57, offset.X1);
            Assert.AreEqual(-2.5, offset.X2);
            Assert.AreEqual(4.2, offset.Y);
            Assert.AreEqual(-10.5, offset.Z);
        }
Ejemplo n.º 4
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GsaOffset offset    = new GsaOffset();
            GsaOffset gsaoffset = new GsaOffset();

            if (DA.GetData(0, ref gsaoffset))
            {
                offset = gsaoffset.Duplicate();
            }
            if (offset != null)
            {
                //inputs
                double x1 = 0;
                if (DA.GetData(1, ref x1))
                {
                    offset.X1 = x1;
                }
                double x2 = 0;
                if (DA.GetData(2, ref x2))
                {
                    offset.X2 = x2;
                }
                double y = 0;
                if (DA.GetData(3, ref y))
                {
                    offset.Y = y;
                }
                double z = 0;
                if (DA.GetData(4, ref z))
                {
                    offset.Z = z;
                }

                //outputs
                DA.SetData(0, new GsaOffsetGoo(offset));
                DA.SetData(1, offset.X1);
                DA.SetData(2, offset.X2);
                DA.SetData(3, offset.Y);
                DA.SetData(4, offset.Z);
            }
        }
Ejemplo n.º 5
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            double    x1         = 0;
            double    x2         = 0;
            double    y          = 0;
            double    z          = 0;
            GH_Number ghOffsetX1 = new GH_Number();

            if (DA.GetData(0, ref ghOffsetX1))
            {
                GH_Convert.ToDouble(ghOffsetX1, out x1, GH_Conversion.Both);
            }
            GH_Number ghOffsetX2 = new GH_Number();

            if (DA.GetData(1, ref ghOffsetX2))
            {
                GH_Convert.ToDouble(ghOffsetX2, out x2, GH_Conversion.Both);
            }
            GH_Number ghOffsetY = new GH_Number();

            if (DA.GetData(2, ref ghOffsetY))
            {
                GH_Convert.ToDouble(ghOffsetY, out y, GH_Conversion.Both);
            }
            GH_Number ghOffsetZ = new GH_Number();

            if (DA.GetData(3, ref ghOffsetZ))
            {
                GH_Convert.ToDouble(ghOffsetZ, out z, GH_Conversion.Both);
            }

            GsaOffset offset = new GsaOffset
            {
                X1 = x1,
                X2 = x2,
                Y  = y,
                Z  = z
            };

            DA.SetData(0, new GsaOffsetGoo(offset.Duplicate()));
        }
        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);
            }
        }
Ejemplo n.º 7
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GsaProp2d gsaProp2d = new GsaProp2d();

            if (DA.GetData(0, ref gsaProp2d))
            {
                GsaProp2d prop = gsaProp2d.Duplicate();

                // #### inputs ####
                // 1 thickness
                string thk = ""; //prop.Prop2d.Thickness;
                if (DA.GetData(1, ref thk))
                {
                    //prop.Prop2d.Thickness = thk;
                }

                // 2 Material
                // to be implemented

                // 3 analysis type
                int analtype = 0; //prop.Prop2d.Thickness;
                if (DA.GetData(3, ref analtype))
                {
                    prop.Prop2d.MaterialAnalysisProperty = analtype;
                }

                // 4 alignment
                string ali = "";
                if (DA.GetData(4, ref ali))
                {
                    // to be implement / GsaAPI can handle alignment / reference surface
                }

                // 5 offset
                GsaOffset offsetGSA = new GsaOffset();
                double    offset    = 0;
                if (DA.GetData(5, ref offsetGSA))
                {
                    //prop.Prop2d.Offeset = offsetGSA.Z;
                }
                else if (DA.GetData(5, ref offset))
                {
                    //prop.Prop2d.Offeset = offset;
                }

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

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

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

                //#### outputs ####
                DA.SetData(0, new GsaProp2dGoo(prop));

                //DA.SetData(1, gsaProp2d.Thickness); // GsaAPI to be updated
                //DA.SetData(2, gsaProp2d.Prop2d.Material); // to be implemented
                DA.SetData(3, prop.Prop2d.MaterialAnalysisProperty); // GsaAPI to be updated
                //DA.SetData(4, gsaProp2d.??); GsaAPI to include alignment / reference surface

                GsaOffset gsaoffset = new GsaOffset();
                //offset.Z = gsaProp2d.Prop2d.Offset; // GsaAPI to include prop2d offset
                DA.SetData(5, gsaoffset);

                DA.SetData(6, prop.ID);
                DA.SetData(7, prop.Prop2d.Name);
                DA.SetData(8, prop.Prop2d.Colour);
            }
        }
Ejemplo n.º 8
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GsaElement3d gsaElement3d = new GsaElement3d();

            if (DA.GetData(0, ref gsaElement3d))
            {
                if (gsaElement3d == null)
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Element3D input is null");
                }
                GsaElement3d elem = gsaElement3d.Duplicate();

                // #### inputs ####

                // no good way of updating location of mesh on the fly //
                // suggest users re-create from scratch //

                // 1 ID
                List <GH_Integer> ghID   = new List <GH_Integer>();
                List <int>        in_ids = new List <int>();
                if (DA.GetDataList(1, ghID))
                {
                    for (int i = 0; i < ghID.Count; i++)
                    {
                        if (i > elem.Elements.Count)
                        {
                            AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "ID input List Length is longer than number of elements." + System.Environment.NewLine + "Excess ID's have been ignored");
                            continue;
                        }
                        if (GH_Convert.ToInt32(ghID[i], out int id, GH_Conversion.Both))
                        {
                            if (in_ids.Contains(id))
                            {
                                if (id > 0)
                                {
                                    AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "ID input(" + i + ") = " + id + " already exist in your input list." + System.Environment.NewLine + "You must provide a list of unique IDs, or set ID = 0 if you want to let GSA handle the numbering");
                                    continue;
                                }
                            }
                            in_ids.Add(id);
                        }
                    }
                }


                List <GH_ObjectWrapper> gh_types = new List <GH_ObjectWrapper>();

                // 2 section
                //List<GsaProp2d> in_prop2Ds = new List<GsaProp2d>();
                //if (DA.GetDataList(2, gh_types))
                //{
                //    for (int i = 0; i< gh_types.Count; i++)
                //    {
                //        if (i > elem.Elements.Count)
                //            AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "PA input List Length is longer than number of elements." + System.Environment.NewLine + "Excess PA's have been ignored");
                //        GH_ObjectWrapper gh_typ = gh_types[i];
                //        GsaProp2d prop2d = new GsaProp2d();
                //        if (gh_typ.Value is GsaProp2dGoo)
                //        {
                //            gh_typ.CastTo(ref prop2d);
                //            in_prop2Ds.Add(prop2d);
                //            elem.Elements[i].Property = 0;
                //        }
                //        else
                //        {
                //            if (GH_Convert.ToInt32(gh_typ.Value, out int idd, GH_Conversion.Both))
                //            {
                //                elem.Elements[i].Property = idd;
                //                elem.Properties[i] = null;
                //            }
                //            else
                //            {
                //                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Unable to convert PA input to a 2D Property of reference integer");
                //                return;
                //            }
                //        }
                //    }
                //}

                // 3 Group
                List <GH_Integer> ghgrp     = new List <GH_Integer>();
                List <int>        in_groups = new List <int>();
                if (DA.GetDataList(3, ghgrp))
                {
                    for (int i = 0; i < ghgrp.Count; i++)
                    {
                        if (i > elem.Elements.Count)
                        {
                            AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Group input List Length is longer than number of elements." + System.Environment.NewLine + "Excess Group numbers have been ignored");
                            continue;
                        }
                        if (GH_Convert.ToInt32(ghgrp[i], out int grp, GH_Conversion.Both))
                        {
                            in_groups.Add(grp);
                        }
                    }
                }


                // 4 name
                List <GH_String> ghnm     = new List <GH_String>();
                List <string>    in_names = new List <string>();
                if (DA.GetDataList(4, ghnm))
                {
                    for (int i = 0; i < ghnm.Count; i++)
                    {
                        if (i > elem.Elements.Count)
                        {
                            AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Name input List Length is longer than number of elements." + System.Environment.NewLine + "Excess Names have been ignored");
                            continue;
                        }
                        if (GH_Convert.ToString(ghnm[i], out string name, GH_Conversion.Both))
                        {
                            in_names.Add(name);
                        }
                    }
                }


                // 5 Colour
                List <GH_Colour>            ghcol      = new List <GH_Colour>();
                List <System.Drawing.Color> in_colours = new List <System.Drawing.Color>();
                if (DA.GetDataList(5, ghcol))
                {
                    for (int i = 0; i < ghcol.Count; i++)
                    {
                        if (i > elem.Elements.Count)
                        {
                            AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Colour input List Length is longer than number of elements." + System.Environment.NewLine + "Excess Colours have been ignored");
                            continue;
                        }
                        if (GH_Convert.ToColor(ghcol[i], out System.Drawing.Color col, GH_Conversion.Both))
                        {
                            in_colours.Add(col);
                        }
                    }
                }

                // 6 Dummy
                List <GH_Boolean> ghdum      = new List <GH_Boolean>();
                List <bool>       in_dummies = new List <bool>();
                if (DA.GetDataList(6, ghdum))
                {
                    for (int i = 0; i < ghdum.Count; i++)
                    {
                        if (i > elem.Elements.Count)
                        {
                            AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Dummy input List Length is longer than number of elements." + System.Environment.NewLine + "Excess Dummy booleans have been ignored");
                            continue;
                        }
                        if (GH_Convert.ToBoolean(ghdum[i], out bool dum, GH_Conversion.Both))
                        {
                            in_dummies.Add(dum);
                        }
                    }
                }


                // loop through all elements and set collected lists.
                // handle too short or too long input lists here
                // for short lists copy last item
                for (int i = 0; i < elem.Elements.Count; i++)
                {
                    //if (in_prop2Ds.Count > 0)
                    //{
                    //    if (i < in_prop2Ds.Count)
                    //        elem.Properties[i] = in_prop2Ds[i];
                    //    else
                    //        elem.Properties[i] = in_prop2Ds[in_prop2Ds.Count - 1];
                    //}

                    if (in_ids.Count > 0)
                    {
                        if (i < in_ids.Count)
                        {
                            elem.ID[i] = in_ids[i];
                        }
                        else
                        {
                            elem.ID[i] = 0; // do not set ID (element number) as it must be unique
                        }
                    }
                    if (in_names.Count > 0)
                    {
                        if (i < in_names.Count)
                        {
                            elem.Elements[i].Name = in_names[i];
                        }
                        else
                        {
                            elem.Elements[i].Name = in_names[in_names.Count - 1];
                        }
                    }
                    if (in_groups.Count > 0)
                    {
                        if (i < in_groups.Count)
                        {
                            elem.Elements[i].Group = in_groups[i];
                        }
                        else
                        {
                            elem.Elements[i].Group = in_groups[in_groups.Count - 1];
                        }
                    }
                    if (in_colours.Count > 0)
                    {
                        if (i < in_colours.Count)
                        {
                            elem.Elements[i].Colour = in_colours[i];
                        }
                        else
                        {
                            elem.Elements[i].Colour = in_colours[in_colours.Count - 1];
                        }
                    }
                    if (in_dummies.Count > 0)
                    {
                        if (i < in_dummies.Count)
                        {
                            elem.Elements[i].IsDummy = in_dummies[i];
                        }
                        else
                        {
                            elem.Elements[i].IsDummy = in_dummies[in_dummies.Count - 1];
                        }
                    }
                }

                // convert mesh to output meshes
                List <Mesh> out_meshes = new List <Mesh>();
                Mesh        x          = elem.NgonMesh;


                List <MeshNgon> ngons = x.GetNgonAndFacesEnumerable().ToList();

                for (int i = 0; i < ngons.Count; i++)
                {
                    Mesh m = new Mesh();
                    m.Vertices.AddVertices(x.Vertices.ToList());
                    List <int> faceindex = ngons[i].FaceIndexList().Select(u => (int)u).ToList();
                    for (int j = 0; j < faceindex.Count; j++)
                    {
                        m.Faces.AddFace(x.Faces[faceindex[j]]);
                    }
                    m.Vertices.CullUnused();
                    m.RebuildNormals();
                    out_meshes.Add(m);
                }


                // #### outputs ####

                DA.SetData(0, new GsaElement3dGoo(elem));
                DA.SetDataList(1, elem.ID);
                DA.SetDataList(2, out_meshes);

                List <GsaOffset>            out_offsets = new List <GsaOffset>();
                List <string>               type        = new List <string>();
                List <string>               out_names   = new List <string>();
                List <int>                  out_groups  = new List <int>();
                List <System.Drawing.Color> out_colours = new List <System.Drawing.Color>();
                List <int>                  pmems       = new List <int>();
                List <bool>                 out_dummies = new List <bool>();
                for (int i = 0; i < elem.Elements.Count; i++)
                {
                    GsaOffset offset1 = new GsaOffset
                    {
                        Z = elem.Elements[i].Offset.Z
                    };
                    out_offsets.Add(offset1);
                    type.Add(elem.Elements[i].TypeAsString());
                    out_names.Add(elem.Elements[i].Name);
                    out_groups.Add(elem.Elements[i].Group);
                    out_colours.Add((System.Drawing.Color)elem.Elements[i].Colour);
                    out_dummies.Add(elem.Elements[i].IsDummy);
                    try { pmems.Add(elem.Elements[i].ParentMember.Member); } catch (Exception) { pmems.Add(0); }
                    ;
                }
                //DA.SetDataList(3, elem.Properties);
                DA.SetDataList(4, out_groups);
                DA.SetDataList(5, type);
                DA.SetDataList(6, out_names);
                DA.SetDataList(7, out_colours);
                DA.SetDataList(8, out_dummies);
                DA.SetDataList(9, pmems);
            }
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GsaElement2d gsaElement2d = new GsaElement2d();

            if (DA.GetData(0, ref gsaElement2d))
            {
                GsaElement2d elem = gsaElement2d.Duplicate();

                // #### inputs ####

                // no good way of updating location of mesh on the fly //
                // suggest users re-create from scratch //

                // 1 section
                List <GH_ObjectWrapper> gh_types = new List <GH_ObjectWrapper>();
                if (DA.GetDataList(2, gh_types))
                {
                    for (int i = 0; i < gh_types.Count; i++)
                    {
                        GH_ObjectWrapper gh_typ = gh_types[i];
                        GsaProp2d        prop2d = new GsaProp2d();
                        if (gh_typ.Value is GsaProp2d)
                        {
                            gh_typ.CastTo(ref prop2d);
                        }
                        else if (gh_typ.Value is GH_Number)
                        {
                            if (GH_Convert.ToInt32((GH_Number)gh_typ.Value, out int idd, GH_Conversion.Both))
                            {
                                prop2d.ID = idd;
                            }
                        }
                        List <GsaProp2d> prop2Ds = new List <GsaProp2d>();
                        for (int j = 0; j < elem.Elements.Count; j++)
                        {
                            prop2Ds.Add(prop2d);
                        }
                        elem.Properties = prop2Ds;
                    }
                }


                // 2 offset
                List <GsaOffset> offset = new List <GsaOffset>();
                if (DA.GetDataList(2, offset))
                {
                    for (int i = 0; i < offset.Count; i++)
                    {
                        elem.Elements[i].Offset.Z = offset[i].Z;
                    }
                }

                // 3 element type / analysis order
                List <GH_Integer> ghinteg = new List <GH_Integer>();
                if (DA.GetDataList(3, ghinteg))
                {
                    for (int i = 0; i < ghinteg.Count; i++)
                    {
                        if (GH_Convert.ToInt32(ghinteg[i], out int type, GH_Conversion.Both))
                        {
                            //elem.Elements[i].Type = Util.Gsa.GsaToModel.Element2dType(type); Note: Type on 2D element should be analysis order - GsaAPI bug?
                        }
                    }
                }

                // 4 ID
                List <GH_Integer> ghID = new List <GH_Integer>();
                if (DA.GetDataList(4, ghID))
                {
                    for (int i = 0; i < ghID.Count; i++)
                    {
                        if (GH_Convert.ToInt32(ghID[i], out int id, GH_Conversion.Both))
                        {
                            elem.ID[i] = id;
                        }
                    }
                }

                // 5 name
                List <GH_String> ghnm = new List <GH_String>();
                if (DA.GetDataList(5, ghnm))
                {
                    for (int i = 0; i < ghnm.Count; i++)
                    {
                        if (GH_Convert.ToString(ghnm[i], out string name, GH_Conversion.Both))
                        {
                            elem.Elements[i].Name = name;
                        }
                    }
                }

                // 6 Group
                List <GH_Integer> ghgrp = new List <GH_Integer>();
                if (DA.GetDataList(6, ghgrp))
                {
                    for (int i = 0; i < ghgrp.Count; i++)
                    {
                        if (GH_Convert.ToInt32(ghgrp[i], out int grp, GH_Conversion.Both))
                        {
                            elem.Elements[i].Group = grp;
                        }
                    }
                }

                // 7 Colour
                List <GH_Colour> ghcol = new List <GH_Colour>();
                if (DA.GetDataList(7, ghcol))
                {
                    for (int i = 0; i < ghcol.Count; i++)
                    {
                        if (GH_Convert.ToColor(ghcol[i], out System.Drawing.Color col, GH_Conversion.Both))
                        {
                            elem.Elements[i].Colour = col;
                        }
                    }
                }


                // #### outputs ####

                DA.SetData(0, new GsaElement2dGoo(elem));
                DA.SetData(1, elem.Mesh);

                List <GsaOffset> offsets = new List <GsaOffset>();
                //List<int> anal = new List<int>();
                List <string> names  = new List <string>();
                List <int>    groups = new List <int>();
                List <System.Drawing.Color> colours = new List <System.Drawing.Color>();
                List <int> pmems = new List <int>();
                for (int i = 0; i < elem.Elements.Count; i++)
                {
                    GsaOffset offset1 = new GsaOffset
                    {
                        Z = elem.Elements[i].Offset.Z
                    };
                    offsets.Add(offset1);
                    //anal.Add(gsaElement2d.Elements[i].Type);
                    names.Add(elem.Elements[i].Name);
                    groups.Add(elem.Elements[i].Group);
                    colours.Add((System.Drawing.Color)elem.Elements[i].Colour);
                    try { pmems.Add(elem.Elements[i].ParentMember.Member); } catch (Exception) { pmems.Add(0); }
                    ;
                }
                DA.SetDataList(2, elem.Properties);
                DA.SetDataList(3, offsets);
                //DA.SetDataList(4, anal);
                DA.SetDataList(5, elem.ID);
                DA.SetDataList(6, names);
                DA.SetDataList(7, groups);
                DA.SetDataList(8, colours);
                DA.SetDataList(9, pmems);
            }
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            GsaMember2d gsaMember2d = new GsaMember2d();

            if (DA.GetData(0, ref gsaMember2d))
            {
                GsaMember2d mem = gsaMember2d.Duplicate();

                // #### inputs ####

                // 1 brep
                Brep brep = mem.Brep; //existing brep

                GH_Brep ghbrep = new GH_Brep();
                if (DA.GetData(1, ref ghbrep))
                {
                    if (GH_Convert.ToBrep(ghbrep, ref brep, GH_Conversion.Both))
                    {
                        mem.Brep = brep;
                    }
                }

                // 2 section
                GH_ObjectWrapper gh_typ = new GH_ObjectWrapper();

                if (DA.GetData(2, ref gh_typ))
                {
                    GsaProp2d prop2d = new GsaProp2d();
                    if (gh_typ.Value is GsaProp2d)
                    {
                        gh_typ.CastTo(ref prop2d);
                    }
                    else if (gh_typ.Value is GH_Number)
                    {
                        if (GH_Convert.ToInt32((GH_Number)gh_typ.Value, out int idd, GH_Conversion.Both))
                        {
                            prop2d.ID = idd;
                        }
                    }
                    mem.Property = prop2d;
                }

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

                // 4 inclusion points
                List <Point3d>  pts   = mem.InclusionPoints;
                List <GH_Point> ghpts = new List <GH_Point>();
                if (DA.GetDataList(4, ghpts))
                {
                    for (int i = 0; i < ghpts.Count; i++)
                    {
                        Point3d pt = new Point3d();
                        if (GH_Convert.ToPoint3d(ghpts[i], ref pt, GH_Conversion.Both))
                        {
                            pts.Add(pt);
                        }
                    }
                }

                // 5 inclusion lines
                CurveList       crvlist = new CurveList(mem.InclusionLines);
                List <Curve>    crvs    = crvlist.ToList();
                List <GH_Curve> ghcrvs  = new List <GH_Curve>();
                if (DA.GetDataList(5, ghcrvs))
                {
                    for (int i = 0; i < ghcrvs.Count; i++)
                    {
                        Curve crv = null;
                        if (GH_Convert.ToCurve(ghcrvs[i], ref crv, GH_Conversion.Both))
                        {
                            crvs.Add(crv);
                        }
                    }
                }

                GsaMember2d tmpmem = new GsaMember2d(brep, crvs, pts)
                {
                    ID       = mem.ID,
                    Member   = mem.Member,
                    Property = mem.Property
                };
                mem = tmpmem;

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

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

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

                // 9 element type / analysis order
                GH_Integer ghinteg = new GH_Integer();
                if (DA.GetData(9, ref ghinteg))
                {
                    if (GH_Convert.ToInt32(ghinteg, out int type, GH_Conversion.Both))
                    {
                        mem.Member.Type2D = Util.Gsa.GsaToModel.Element2dType(type);
                    }
                }

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

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

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

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

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

                // #### outputs ####

                DA.SetData(0, new GsaMember2dGoo(mem));

                DA.SetData(1, mem.Brep);

                DA.SetData(2, mem.Property);

                GsaOffset gsaOffset = new GsaOffset
                {
                    Z = mem.Member.Offset.Z
                };
                DA.SetData(3, gsaOffset);

                DA.SetDataList(4, mem.InclusionPoints);
                DA.SetDataList(5, mem.InclusionLines);

                DA.SetData(6, mem.Member.MeshSize);
                //DA.SetData(7, mem.member.MeshWithOthers);

                DA.SetData(8, mem.Member.Type);
                DA.SetData(9, mem.Member.Type2D);

                DA.SetData(10, mem.ID);
                DA.SetData(11, mem.Member.Name);
                DA.SetData(12, mem.Member.Group);
                DA.SetData(13, mem.Member.Colour);

                DA.SetData(14, mem.Member.IsDummy);
            }
        }
        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);
            }
        }