58 lines
2.0 KiB
C#
58 lines
2.0 KiB
C#
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<pb_Face> faces, out pb_Face[] newFaces)
|
|
{
|
|
List<pb_Vertex> list = new List<pb_Vertex>(pb_Vertex.GetVertices(pb, null));
|
|
Dictionary<int, int> dictionary = pb.sharedIndices.ToDictionary();
|
|
List<pb_FaceRebuildData> list2 = new List<pb_FaceRebuildData>();
|
|
foreach (pb_Face pb_Face in faces)
|
|
{
|
|
List<pb_FaceRebuildData> 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<pb_Face>();
|
|
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<pb_FaceRebuildData> BreakFaceIntoTris(pb_Face face, List<pb_Vertex> vertices, Dictionary<int, int> lookup)
|
|
{
|
|
int[] indices = face.indices;
|
|
int num = indices.Length;
|
|
List<pb_FaceRebuildData> list = new List<pb_FaceRebuildData>(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<pb_Vertex>
|
|
{
|
|
vertices[indices[i]],
|
|
vertices[indices[i + 1]],
|
|
vertices[indices[i + 2]]
|
|
};
|
|
pb_FaceRebuildData.sharedIndices = new List<int>
|
|
{
|
|
lookup[indices[i]],
|
|
lookup[indices[i + 1]],
|
|
lookup[indices[i + 2]]
|
|
};
|
|
list.Add(pb_FaceRebuildData);
|
|
}
|
|
return list;
|
|
}
|
|
}
|
|
}
|