private Mesh TriangulateMesh()
{
if (verts.Count > 2) {
var tnMesh = new TriangleNet.Mesh();
var input = new TriangleNet.Geometry.InputGeometry();
var localVertices = verts.Select(v => spriteRenderer.transform.InverseTransformPoint(v.position)).ToArray();
for(int i = 0; i < verts.Count; i++) {
verts[i].index = i;
input.AddPoint(verts[i].position.x, verts[i].position.y);
}
foreach(var seg in segments) {
if(!seg.IsDeleted())
input.AddSegment(seg.first.index, seg.second.index);
}
foreach(var hole in holes) {
input.AddHole(hole.x, hole.y);
}
tnMesh.Triangulate(input);
try {
Mesh mesh = new Mesh();
mesh.vertices = localVertices;
mesh.triangles = tnMesh.Triangles.ToUnityMeshTriangleIndices();
mesh.uv = genUV(mesh.vertices);
mesh.RecalculateBounds();
mesh.RecalculateNormals();
return mesh;
}
catch {
Debug.LogError("Mesh topology was wrong. Make sure you dont have intersecting edges.");
throw;
}
} else {
return null;
}
}