Beispiel #1
0
        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
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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));
        }