Ejemplo n.º 1
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            //NOTE: This meshing class only mesh geometry with straight lines. It may be twisted, but cant be curved
            //This is the meshing component for CASE 1.

            // ---variables-- -

            Brep           brp          = new Brep();
            List <Point3d> cornersList  = new List <Point3d>();
            int            u            = 1;
            int            v            = 1;
            int            w            = 1;
            double         removeVolume = 0;

            // --- input ---

            if (!DA.GetData(0, ref brp))
            {
                return;
            }
            if (!DA.GetDataList(1, cornersList))
            {
                return;
            }
            if (!DA.GetData(2, ref u))
            {
                return;
            }
            if (!DA.GetData(3, ref v))
            {
                return;
            }
            if (!DA.GetData(4, ref w))
            {
                return;
            }
            if (!DA.GetData(5, ref removeVolume))
            {
                return;
            }

            // --- solve ---

            if (u < 1 || v < 1 || w < 1) //None of the sides can be divided in less than one part
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "One of the input parameters is less than one.");
                return;
            }

            //Getting vertices for brep
            Point3d[] cornerPoints = brp.DuplicateVertices();
            cornerPoints = RoundPoints(cornerPoints); //Round off to remove inaccuries

            List <Point3d> corners = RoundPointsList(cornersList);

            var tuple = CreateMesh(cornerPoints, u, v, w);

            List <List <Point3d> > elementPoints = tuple.Item1;
            List <List <int> >     connectivity  = tuple.Item2;
            List <List <Line> >    edgeMesh      = tuple.Item3;
            List <List <Brep> >    surfacesMesh  = tuple.Item4;
            List <Node>            nodes         = tuple.Item5;
            List <Element>         elements      = tuple.Item6;
            List <Point3d>         globalPoints  = tuple.Item7;

            int sizeOfMatrix = 3 * (u + 1) * (v + 1) * (w + 1);

            //Setting values for Mesh class
            MeshGeometry mesh = new MeshGeometry(u, v, w);

            mesh.SetConnectivity(connectivity);
            mesh.SetElementPoints(elementPoints);
            mesh.SetEdgesMesh(edgeMesh);
            mesh.SetSurfacesMesh(surfacesMesh);
            mesh.SetSizeOfMatrix(sizeOfMatrix);
            mesh.SetGlobalPoints(globalPoints);
            mesh.SetNodeList(nodes);
            mesh.SetElements(elements);
            mesh.SetOrigBrep(brp);
            mesh.SetBrep(new BrepGeometry(brp));
            mesh.OrderSurfaces(corners);
            mesh.SetOptVolume(removeVolume);

            //---output---

            DA.SetData(0, mesh);
        }
Ejemplo n.º 2
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            {
                //NOTE: This meshing class can mesh any type of geometry as long as it consist of 8 corners and no holes.
                //This is the meshing component for CASE 3.

                // ---variables-- -

                Brep           brp          = new Brep();
                List <Point3d> corners      = new List <Point3d>();
                int            u            = 1;
                int            v            = 1;
                int            w            = 1;
                double         removeVolume = 0;

                // --- input ---

                if (!DA.GetData(0, ref brp))
                {
                    return;
                }
                if (!DA.GetDataList(1, corners))
                {
                    return;
                }
                if (!DA.GetData(2, ref u))
                {
                    return;
                }
                if (!DA.GetData(3, ref v))
                {
                    return;
                }
                if (!DA.GetData(4, ref w))
                {
                    return;
                }
                if (!DA.GetData(5, ref removeVolume))
                {
                    return;
                }

                Curve[] edges       = brp.DuplicateEdgeCurves();
                Curve[] sortedEdges = SortEdges(corners, edges);

                Surface[] surfaces = CreateSortedSurfaces(brp, edges, corners);

                var tuple = CreateMesh(brp, u, v, w, sortedEdges, surfaces);

                List <List <Point3d> > elementPoints = tuple.Item1;
                List <List <int> >     connectivity  = tuple.Item2;
                List <List <Line> >    edgeMesh      = tuple.Item3;
                List <List <Brep> >    surfacesMesh  = tuple.Item4;
                List <Node>            nodes         = tuple.Item5;
                List <Element>         elements      = tuple.Item6;
                List <Point3d>         globalPoints  = tuple.Item7;
                int sizeOfMatrix = 3 * (u + 1) * (v + 1) * (w + 1);


                //Setting values for Mesh class
                MeshGeometry mesh = new MeshGeometry(u, v, w);
                mesh.SetConnectivity(connectivity);
                mesh.SetElementPoints(elementPoints);
                mesh.SetEdgesMesh(edgeMesh);
                mesh.SetSurfacesMesh(surfacesMesh);
                mesh.SetSizeOfMatrix(sizeOfMatrix);
                mesh.SetGlobalPoints(globalPoints);
                mesh.SetNodeList(nodes);
                mesh.SetElements(elements);
                mesh.SetOrigBrep(brp);
                mesh.SetBrep(new BrepGeometry(brp));
                mesh.OrderSurfaces(corners);
                mesh.SetOptVolume(removeVolume);

                //---output---

                DA.SetData(0, mesh);
            }
        }