public static Mesh Triangulate2D(Polygon2D polygon, Vector2 UVScale, Vector2 UVOffset, Triangulation triangulation) { polygon.Normalize(); Mesh result = null; switch (triangulation) { case Triangulation.Advanced: Slicer2D.Profiler.IncAdvancedTriangulation(); float GC = Slicer2D.Settings.GetGarbageCollector(); if (GC > 0 & polygon.GetArea() < GC) { Debug.LogWarning("Smart Utility 2D: Slice was removed because it was too small"); return(null); } Polygon2D newPolygon = new Polygon2D(PreparePolygon.Get(polygon)); if (newPolygon.pointsList.Count < 3) { Debug.LogWarning("Smart Utility 2D: Mesh is too small for advanced triangulation, using simplified triangulations instead (size: " + polygon.GetArea() + ")"); result = PerformTriangulation(polygon, UVScale, UVOffset); return(result); } foreach (Polygon2D hole in polygon.holesList) { newPolygon.AddHole(new Polygon2D(PreparePolygon.Get(hole, -1))); } result = PerformTriangulation(newPolygon, UVScale, UVOffset); break; case Triangulation.Legacy: Slicer2D.Profiler.IncLegacyTriangulation(); List <Vector2> list = new List <Vector2>(); foreach (Vector2D p in polygon.pointsList) { list.Add(p.ToVector2()); } result = Triangulator.Create(list.ToArray(), UVScale, UVOffset); return(result); } return(result); }