Files
Dec2017-Script-Dump/ProBuilderMeshOps-Unity5/ProBuilder2/MeshOperations/pb_Facetize.cs
T
2026-06-04 11:42:34 +02:00

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;
}
}
}