Beispiel #1
0
        /// <summary>
        /// split input mesh into submeshes based on group ID
        /// **does not** separate disconnected components w/ same group ID
        /// </summary>
        public static DMesh3[] SeparateMeshByGroups(DMesh3 mesh, out int[] groupIDs)
        {
            Dictionary <int, List <int> > meshes = new Dictionary <int, List <int> >();

            foreach (int tid in mesh.TriangleIndices())
            {
                int        gid = mesh.GetTriangleGroup(tid);
                List <int> tris;
                if (meshes.TryGetValue(gid, out tris) == false)
                {
                    tris        = new List <int>();
                    meshes[gid] = tris;
                }
                tris.Add(tid);
            }

            DMesh3[] result = new DMesh3[meshes.Count];
            groupIDs = new int[meshes.Count];
            int k = 0;

            foreach (var pair in meshes)
            {
                groupIDs[k] = pair.Key;
                List <int> tri_list = pair.Value;
                result[k++] = DSubmesh3.QuickSubmesh(mesh, tri_list);
            }

            return(result);
        }