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); }
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); } }