using System; using System.Collections.Generic; using System.Linq; using ProBuilder2.Common; namespace ProBuilder2.MeshOperations { // Token: 0x02000010 RID: 16 public static class pb_Facetize { // Token: 0x06000093 RID: 147 RVA: 0x0000C6F4 File Offset: 0x0000AAF4 public static pb_ActionResult Facetize(this pb_Object pb, IList faces, out pb_Face[] newFaces) { List list = new List(pb_Vertex.GetVertices(pb, null)); Dictionary dictionary = pb.sharedIndices.ToDictionary(); List list2 = new List(); foreach (pb_Face pb_Face in faces) { List list3 = pb_Facetize.BreakFaceIntoTris(pb_Face, list, dictionary); list2.AddRange(list3); } pb_FaceRebuildData.Apply(list2, pb, list, null, dictionary, null); pb.DeleteFaces(faces); pb.ToMesh(); newFaces = list2.Select((pb_FaceRebuildData x) => x.face).ToArray(); return new pb_ActionResult(Status.Success, string.Format("Triangulated {0} {1}", faces.Count, (faces.Count >= 2) ? "Faces" : "Face")); } // Token: 0x06000094 RID: 148 RVA: 0x0000C7F0 File Offset: 0x0000ABF0 private static List BreakFaceIntoTris(pb_Face face, List vertices, Dictionary lookup) { int[] indices = face.indices; int num = indices.Length; List list = new List(num / 3); for (int i = 0; i < num; i += 3) { pb_FaceRebuildData pb_FaceRebuildData = new pb_FaceRebuildData(); pb_FaceRebuildData.face = new pb_Face(face); pb_FaceRebuildData.face.SetIndices(new int[] { 0, 1, 2 }); pb_FaceRebuildData.vertices = new List { vertices[indices[i]], vertices[indices[i + 1]], vertices[indices[i + 2]] }; pb_FaceRebuildData.sharedIndices = new List { lookup[indices[i]], lookup[indices[i + 1]], lookup[indices[i + 2]] }; list.Add(pb_FaceRebuildData); } return list; } } }