コード例 #1
0
        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);
        }