Example #1
0
    public static PolygonTriangulator2D.Triangulation GetTriangulation(PolygonTriangulator2D.Triangulation setting)
    {
        Slicer2DSettingsProfile profile = GetProfile();

        if (profile == null)
        {
            Debug.LogWarning("Profile Settings Are Missing");
            return(setting);
        }

        if (profile.triangulation == Triangulation.Default)
        {
            return(setting);
        }
        else
        {
            int triangulationID = (int)profile.triangulation - 1;
            return((PolygonTriangulator2D.Triangulation)triangulationID);
        }
    }
Example #2
0
    public Mesh CreateMesh(GameObject gameObject, Vector2 UVScale, Vector2 UVOffset, PolygonTriangulator2D.Triangulation triangulation = PolygonTriangulator2D.Triangulation.Advanced)
    {
        if (gameObject.GetComponent <MeshRenderer>() == null)
        {
            gameObject.AddComponent <MeshRenderer>();
        }

        MeshFilter filter = gameObject.GetComponent <MeshFilter> ();

        if (filter == null)
        {
            filter = gameObject.AddComponent <MeshFilter>() as MeshFilter;
        }

        filter.sharedMesh = PolygonTriangulator2D.Triangulate(this, UVScale, UVOffset, triangulation);
        if (filter.sharedMesh == null)
        {
            UnityEngine.Object.Destroy(gameObject);
        }

        return(filter.sharedMesh);
    }
Example #3
0
    public static void SpriteToMesh(GameObject gameObject, VirtualSpriteRenderer spriteRenderer, PolygonTriangulator2D.Triangulation triangulation = PolygonTriangulator2D.Triangulation.Advanced)
    {
        Texture2D texture = null;
        Sprite    sprite  = null;

        if (spriteRenderer.sprite != null)
        {
            sprite  = spriteRenderer.sprite;
            texture = sprite.texture;
        }

        float spriteSheetU = (float)(texture.width) / sprite.rect.width;
        float spriteSheetV = (float)(texture.height) / sprite.rect.height;

        Rect rect   = sprite.rect;
        Rect uvRect = new Rect((float)rect.x / texture.width, (float)rect.y / texture.height, (float)rect.width / texture.width, (float)rect.height / texture.height);

        Vector2 scale = new Vector2(spriteSheetU * rect.width / sprite.pixelsPerUnit, spriteSheetV * rect.height / spriteRenderer.sprite.pixelsPerUnit);

        if (spriteRenderer.flipX)
        {
            scale.x = -scale.x;
        }

        if (spriteRenderer.flipY)
        {
            scale.y = -scale.y;
        }

        float pivotX = sprite.pivot.x / sprite.rect.width - 0.5f;
        float pivotY = sprite.pivot.y / sprite.rect.height - 0.5f;

        float ix = -0.5f + pivotX / spriteSheetU;
        float iy = -0.5f + pivotY / spriteSheetV;

        Vector2 uvOffset = new Vector2(uvRect.center.x + ix, uvRect.center.y + iy);

        Polygon2D polygon2D = Polygon2DList.CreateFromGameObject(gameObject)[0];

        polygon2D.CreateMesh(gameObject, scale, uvOffset, triangulation);

        MeshRenderer meshRenderer = gameObject.GetComponent <MeshRenderer> ();

        if (meshRenderer == null)
        {
            meshRenderer = gameObject.AddComponent <MeshRenderer> ();
        }

        meshRenderer.sharedMaterial             = spriteRenderer.material;
        meshRenderer.sharedMaterial.mainTexture = texture;
        meshRenderer.sharedMaterial.color       = spriteRenderer.color;

        meshRenderer.sortingLayerName = spriteRenderer.sortingLayerName;
        meshRenderer.sortingLayerID   = spriteRenderer.sortingLayerID;
        meshRenderer.sortingOrder     = spriteRenderer.sortingOrder;
    }
Example #4
0
 public Mesh CreateMesh(Vector2 UVScale, Vector2 UVOffset, PolygonTriangulator2D.Triangulation triangulation = PolygonTriangulator2D.Triangulation.Advanced)
 {
     return(PolygonTriangulator2D.Triangulate(this, UVScale, UVOffset, triangulation));
 }
Example #5
0
        public Mesh CreateMesh3D(GameObject gameObject, float zSize, Vector2 UVScale, Vector2 UVOffset, float uvRotation, PolygonTriangulator2D.Triangulation triangulation)
        {
            MeshRenderer meshRenderer = gameObject.GetComponent <MeshRenderer>();

            if (meshRenderer == null)
            {
                meshRenderer = gameObject.AddComponent <MeshRenderer>();
            }

            MeshFilter filter = gameObject.GetComponent <MeshFilter> ();

            if (filter == null)
            {
                filter = gameObject.AddComponent <MeshFilter>() as MeshFilter;
            }

            filter.sharedMesh = PolygonTriangulator2D.Triangulate3D(this, zSize, UVScale, UVOffset, uvRotation, triangulation);
            if (filter.sharedMesh == null)
            {
                UnityEngine.Object.Destroy(gameObject);
            }

            return(filter.sharedMesh);
        }
Example #6
0
    public static Mesh CreateMesh(List <Polygon2D> polygons, GameObject gameObject, Vector2 UVScale, Vector2 UVOffset, PolygonTriangulator2D.Triangulation triangulation = PolygonTriangulator2D.Triangulation.Advanced)
    {
        if (gameObject.GetComponent <MeshRenderer>() == null)
        {
            gameObject.AddComponent <MeshRenderer>();
        }

        MeshFilter filter = gameObject.GetComponent <MeshFilter> ();

        if (filter == null)
        {
            filter = gameObject.AddComponent <MeshFilter>() as MeshFilter;
        }

        CombineInstance[] combine = new CombineInstance[polygons.Count];
        for (int i = 0; i < polygons.Count; i++)
        {
            Polygon2D poly = polygons[i];

            combine[i].mesh      = PolygonTriangulator2D.Triangulate(poly, UVScale, UVOffset, triangulation);
            combine[i].transform = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, 0), Vector3.one);
        }

        Mesh mesh = new Mesh();

        mesh.CombineMeshes(combine);

        filter.sharedMesh = mesh;
        if (filter.sharedMesh == null)
        {
            UnityEngine.Object.Destroy(gameObject);
        }

        return(filter.sharedMesh);
    }