protected override void SolveInstance(IGH_DataAccess DA) { List <Mesh> mesh = new List <Mesh>(); if (DA.GetDataList(0, mesh)) { List <int>[] mc = MeshUtilSimple.MeshCollisions(mesh); DA.SetDataTree(0, GrasshopperUtil.ArrayOfListsToTree(mc)); //Next check overlapping faces only if ngons exists List <Polyline[]>[] mcPlines = new List <Polyline[]> [mc.Length]; for (int i = 0; i < mc.Length; i++) { mcPlines[i] = new List <Polyline[]>(); for (int j = 0; j < mc[i].Count; j++) { //Do it with ngons MeshUtil.GetOverlap(mesh[i], mesh[mc[i][j]], 0.1); } } }//if }
protected override void SolveInstance(IGH_DataAccess DA) { Mesh mesh = new Mesh(); DA.GetData(0, ref mesh); int iteration = DA.Iteration; //Vertex array as number of ngons int n = mesh.Ngons.Count; int[] nodes = Enumerable.Range(0, n).ToArray(); //Get face adjacency List <int>[] adj = mesh.GetNgonFaceAdjacencyOrdered(); //Edges start and end point List <int> edges0 = new List <int>(); List <int> edges1 = new List <int>(); for (int i = 0; i < adj.Length; i++) { edges0.AddRange(adj[i]); edges1.AddRange(Enumerable.Repeat(i, adj[i].Count)); } //Output //V = nodes; //E0 = edges0; //E1 = edges1; DataTree <int> dt0 = new DataTree <int>(); DataTree <int> dt1 = new DataTree <int>(); DataTree <int> dt2 = new DataTree <int>(); dt0.AddRange(nodes, new Grasshopper.Kernel.Data.GH_Path(iteration)); dt1.AddRange(edges0, new Grasshopper.Kernel.Data.GH_Path(iteration)); dt2.AddRange(edges1, new Grasshopper.Kernel.Data.GH_Path(iteration)); DA.SetDataTree(0, GrasshopperUtil.ArrayOfListsToTree(adj, iteration)); DA.SetDataTree(1, dt0); DA.SetDataTree(2, dt1); DA.SetDataTree(3, dt2); }
protected override void SolveInstance(IGH_DataAccess DA) { Mesh mesh = new Mesh(); DA.GetData(0, ref mesh); int iteration = DA.Iteration; //Inputs int[][] tv = mesh.GetNGonsTopoBoundaries(); HashSet <int> tvAll = mesh.GetAllNGonsTopoVertices(); HashSet <int> e = mesh.GetAllNGonEdges(tv); int[] allEArray = e.ToArray(); int[] allvArray = tvAll.ToArray(); //Outputs Point3f[] allVPt = mesh.GetAllNGonsTopoVerticesPoint3F(tvAll); List <int>[] conV = mesh.GetConnectedNgonVertices(allEArray, allvArray); List <Point3d>[] conVP = mesh.GetConnectedNgonPoints(conV); List <Line> lines = new List <Line>(); for (int i = 0; i < conVP.Length; i++) { foreach (Point3d j in conVP[i]) { Point3d p = new Point3d(allVPt[i]); Line l = new Line(p, j); l.Transform(Rhino.Geometry.Transform.Scale(p, 0.25)); lines.Add(l); } } this.PreparePreview(mesh, DA.Iteration, null, false, null, lines); DA.SetDataTree(0, new DataTree <Point3f>(allVPt, new GH_Path(iteration))); DA.SetDataTree(1, GrasshopperUtil.ArrayOfListsToTree(conVP, iteration)); DA.SetDataTree(2, new DataTree <int>(tvAll, new GH_Path(iteration))); DA.SetDataTree(3, GrasshopperUtil.ArrayOfListsToTree(conV, iteration)); }