Beispiel #1
0
    public override void OnInspectorGUI()
    {
        Island island = (Island)target;

        island.IslandSourceMesh = EditorGUILayout.ObjectField(island.IslandSourceMesh, typeof(Mesh), true) as Mesh;

        island.SectionsX = EditorGUILayout.IntField("Slices X", island.SectionsX);
        island.SectionsY = EditorGUILayout.IntField("Slices Y", island.SectionsY);

        if (GUILayout.Button("Slice Mesh"))
        {
            if (island.IslandSourceMesh != null)
            {
                Mesh[,] meshes = MeshSlice.Slice(island.IslandSourceMesh, island.SectionsX, island.SectionsY, true, true);

                GameObject meshesObject = GameObjectHelper.FindChild(island.gameObject, "meshes", true);

                int i = 0;
                foreach (var mesh in meshes)
                {
                    mesh.Optimize();
                    GameObject newObject = new GameObject("island_slice_" + i);
                    newObject.transform.parent        = meshesObject.transform;
                    newObject.transform.localPosition = Vector3.zero;
                    newObject.AddComponent <MeshRenderer>();

                    MeshFilter filter = newObject.AddComponent <MeshFilter>();
                    filter.mesh = mesh;
                    i++;
                }
            }
        }

        if (GUILayout.Button("Reset"))
        {
            island.m_triangles.Clear();


            MeshSlice.Triangle tri = new MeshSlice.Triangle();
            tri.p0 = new Vector2(-1.0f, -1.0f);
            tri.p1 = new Vector2(1.0f, -1.0f);
            tri.p2 = new Vector2(0.0f, 1.0f);
            island.m_triangles.Add(tri);
        }

        if (GUILayout.Button("Slice"))
        {
            List <MeshSlice.Triangle> tris = island.m_triangles;

            List <MeshSlice.Triangle> outTris = new List <MeshSlice.Triangle>();

            Vector2 v0, v1;

            foreach (var tri in tris)
            {
                if (MathsHelper.LineTriIntersect(island.sliceStart, island.sliceEnd, tri.p0, tri.p1, tri.p2, out v0, out v1))
                {
                    outTris.AddRange(MeshSlice.SliceTri(tri, island.sliceStart, island.sliceEnd));
                }
                else
                {
                    outTris.Add(tri);
                }
            }

            island.m_triangles = outTris;
        }
    }