Inheritance: MonoBehaviour
Esempio n. 1
0
    public override void OnInspectorGUI()
    {
        HMeshRenderer myTarget = (HMeshRenderer)target;

        DrawDefaultInspector();
        if (GUILayout.Button("UpdateMesh"))
        {
            myTarget.UpdateMesh();
        }
        if (GUILayout.Button("Create HMesh plane"))
        {
            myTarget.CreateHMesh();
            myTarget.UpdateMesh();
        }
        if (GUILayout.Button("Create HMesh triangle"))
        {
            myTarget.CreateHMeshTriangle();
            myTarget.UpdateMesh();
        }
        if (GUILayout.Button("Create HMesh Quad"))
        {
            myTarget.CreateHMeshQuad();
            myTarget.UpdateMesh();
        }
        if (GUILayout.Button("Apply transform"))
        {
            myTarget.ApplyTransform();
            myTarget.UpdateMesh();
        }
    }
Esempio n. 2
0
 // Use this for initialization
 void Start()
 {
     UpdateMenu();
     hmesh = new HMesh();
     hmesh.CreateTriangle(new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 0, 0));
     hmeshRenderer       = FindObjectOfType <HMeshRenderer>();
     hmeshRenderer.hmesh = hmesh;
     hmeshRenderer.UpdateMesh();
 }
Esempio n. 3
0
    public override void OnInspectorGUI()
    {
        HMeshRenderer myTarget = (HMeshRenderer)target;

        DrawDefaultInspector();
        if (GUILayout.Button("UpdateMesh"))
        {
            myTarget.UpdateMesh();
        }
        if (GUILayout.Button("Create HMesh plane"))
        {
            myTarget.CreateHMesh();
            myTarget.UpdateMesh();
        }
        if (GUILayout.Button("Create HMesh triangle"))
        {
            myTarget.CreateHMeshTriangle();
            myTarget.UpdateMesh();
        }
        if (GUILayout.Button("Create HMesh Quad"))
        {
            myTarget.CreateHMeshQuad();
            myTarget.UpdateMesh();
        }
        if (GUILayout.Button("Create HMesh 2-gon"))
        {
            var res = myTarget.CreateHMeshNGon(2);
            myTarget.UpdateMesh();
            Debug.Log(res.ToString());
        }
        if (GUILayout.Button("Create HMesh Hexagon"))
        {
            var res = myTarget.CreateHMeshNGon(6);
            myTarget.UpdateMesh();
            Debug.Log(res.ToString());
        }
        if (GUILayout.Button("Create HMesh Octogon"))
        {
            var res = myTarget.CreateHMeshNGon(8);
            myTarget.UpdateMesh();
            Debug.Log(res.ToString());
        }
        if (GUILayout.Button("Create HMesh Non convex"))
        {
            var res = myTarget.CreateHMeshNGon(32);
            foreach (var ver in res.GetVertices())
            {
                if (ver.position.z < 0)
                {
                    var pos = ver.positionD;
                    pos.z        *= -1;
                    pos          *= 0.8;
                    ver.positionD = pos;
                }
            }
            myTarget.UpdateMesh();
            Debug.Log(res.ToString());
        }
        if (GUILayout.Button("RandomRotation"))
        {
            HMesh res            = myTarget.hmesh;
            var   randomRotation = Random.rotation;
            foreach (var v in res.GetVerticesRaw())
            {
                v.position = randomRotation * v.position;
            }
            myTarget.UpdateMesh();
            Debug.Log(res.ToString());
        }
        if (GUILayout.Button("Triangulate"))
        {
            var res = myTarget.Triangulate();
            myTarget.UpdateMesh();
            Debug.Log(res.ToString());
        }
        if (GUILayout.Button("Triangulate step"))
        {
            var res = myTarget.Triangulate(true);
            myTarget.UpdateMesh();
            Debug.Log(res.ToString());
        }

        if (GUILayout.Button("Apply transform"))
        {
            myTarget.ApplyTransform();
            myTarget.UpdateMesh();
        }
        if (GUILayout.Button("Set default colors "))
        {
            myTarget.colors = new Color[]
            {
                Color.red,
                Color.green,
                Color.blue,
                Color.yellow,
                Color.cyan,
                Color.grey
            };
        }

        if (GUILayout.Button("Build from obj"))
        {
            string objTest = "# Blender v2.78 (sub 0) OBJ File: ''\n" +
                             "# www.blender.org\n" +
                             "mtllib quad.mtl\n" +
                             "o Plane\n" +
                             "v -1.000000 0.000000 1.000000\n" +
                             "v 0.000000 0.000000 0.000000\n" +
                             "v -1.000000 0.000000 -1.000000\n" +
                             "v 1.000000 0.000000 -1.000000\n" +
                             "v 1.000000 0.000000 1.000000\n" +
                             "vn 0.0000 1.0000 0.0000\n" +
                             "usemtl None\n" +
                             "s off\n" +
                             "f 1//1 2//1 3//1\n" +
                             "f 4//1 2//1 5//1\n";
            myTarget.hmesh = new HMesh();
            myTarget.hmesh.BuildFromObj(objTest);
            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }
        if (GUILayout.Button("Build from obj - multi color"))
        {
            string objTest = "# Blender v2.78 (sub 0) OBJ File: ''\n" +
                             "# www.blender.org\n" +
                             "mtllib untitled.mtl\n" +
                             "o Plane\n" +
                             "v -1.000000 0.000000 1.000000\n" +    //
                             "v 1.000000 1.000000 1.000000\n" +     // vertex moved
                             "v -1.000000 0.000000 -1.000000\n" +   //
                             "v 1.000000 0.000000 -1.000000\n" +    //
                             "v 0.000000 0.000000 0.000000\n" +     //
                             "vn 0.0000 1.0000 0.0000\n" +
                             "usemtl None\n" +
                             "s off\n" +
                             "f 1//1 2//1 5//1\n" +
                             "f 4//1 3//1 5//1\n" +
                             "f 5//1 2//1 4//1\n" +
                             "f 5//1 3//1 1//1\n" +
                             "";
            myTarget.hmesh = new HMesh();
            myTarget.hmesh.BuildFromObj(objTest);
            myTarget.hmesh.GetFacesRaw()[0].label = 1;
            myTarget.hmesh.GetFacesRaw()[2].label = 1;
            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }
        if (GUILayout.Button("Build from obj - flat"))
        {
            string objTest = "# Blender v2.78 (sub 0) OBJ File: ''\n" +
                             "# www.blender.org\n" +
                             "mtllib test.mtl\n" +
                             "    o Plane_Plane.002\n" +
                             "v -1.000000 0.000000 1.000000\n" +
                             "v 0.390552 0.000000 0.390552\n" +
                             "v -0.390552 0.000000 -0.390552\n" +
                             "v 1.000000 0.000000 -1.000000\n" +
                             "vn 0.0000 1.0000 0.0000\n" +
                             "usemtl None\n" +
                             "s off\n" +
                             "f 1//1 2//1 4//1\n" +
                             "f 4//1 3//1 1//1\n";
            myTarget.hmesh = new HMesh();
            myTarget.hmesh.BuildFromObj(objTest);
            myTarget.hmesh.GetFacesRaw()[0].label = 1;
            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }
        if (GUILayout.Button("Build from obj - plane"))
        {
            string objTest = "# Blender v2.78 (sub 0) OBJ File: ''\n" +
                             "# www.blender.org\n" +
                             "mtllib test.mtl\n" +
                             "o Plane\n" +
                             "v -1.000000 0.000000 1.000000\n" +
                             "v 1.000000 0.000000 1.000000\n" +
                             "v -1.000000 0.000000 -1.000000\n" +
                             "v 1.000000 0.000000 -1.000000\n" +
                             "v -1.000000 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 1.000000\n" +
                             "v 1.000000 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 -1.000000\n" +
                             "v 0.000000 0.000000 0.000000\n" +
                             "vn 0.0000 1.0000 0.0000\n" +
                             "usemtl None\n" +
                             "s off\n" +
                             "f 7//1 8//1 9//1\n" +
                             "f 9//1 3//1 5//1\n" +
                             "f 6//1 5//1 1//1\n" +
                             "f 2//1 9//1 6//1\n" +
                             "f 7//1 4//1 8//1\n" +
                             "f 9//1 8//1 3//1\n" +
                             "f 6//1 9//1 5//1\n" +
                             "f 2//1 7//1 9//1";


            myTarget.hmesh = new HMesh();
            myTarget.hmesh.BuildFromObj(objTest);
            foreach (var f in myTarget.hmesh.GetFaces())
            {
                if (f.GetCenter().x > 0)
                {
                    //    f.label = 1;
                }
            }
            myTarget.hmesh.GetFacesRaw()[0].label = 1;
            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }
        if (GUILayout.Button("Build from obj - optimizeable"))
        {
            string objTest = "v -30.025 40.49966 -14.83595\n" +
                             "v -94.63337 40.49973 -147.4859\n" +
                             "v -113.9539 40.49965 15.86017\n" +
                             "v -113.9539 40.49976 -214.1117\n" +
                             "v -94.63337 40.49973 -155.2081\n" +
                             "v -90.32684 40.49973 -147.4859\n" +
                             "v -72.21552 40.49973 -147.4859\n" +
                             "v -55.54735 40.49973 -147.4859\n" +
                             "v -6.504288 40.49969 -76.80889\n" +
                             "v -6.504288 40.49966 0.6029686\n" +
                             "v -6.504288 40.49966 2.818535\n" +
                             "v -6.504288 40.49966 3.218271\n" +
                             "v -6.504288 40.49965 11.65778\n" +
                             "v -31.79999 40.49967 -32.091\n" +
                             "v -31.79999 40.49968 -35.57327\n" +
                             "v -100.9474 40.49968 -35.57016\n" +
                             "v -94.05646 40.49968 -32.09412\n" +
                             "v -44.48075 40.49967 -32.09164\n" +
                             "v -38.34414 40.49967 -32.09133\n" +
                             "v -39.51749 40.49968 -35.57293\n" +
                             "o label0\n" +
                             "f 3 2 4\n" +
                             "f 16 3 17\n" +
                             "f 18 1 19\n" +
                             "f 9 15 14\n" +
                             "f 4 2 5\n" +
                             "f 15 8 7\n" +
                             "f 15 9 8\n" +
                             "f 1 10 9\n" +
                             "f 10 1 11\n" +
                             "f 12 11 1\n" +
                             "f 12 3 13\n" +
                             "f 9 14 1\n" +
                             "f 20 15 7\n" +
                             "f 1 17 12\n" +
                             "f 2 3 16\n" +
                             "f 17 3 12\n" +
                             "f 17 1 18\n" +
                             "f 16 6 2\n" +
                             "f 20 6 16\n" +
                             "f 20 7 6\n" +
                             "f 19 1 14\n" +
                             "o label1\n" +
                             "f 15 20 14\n" +
                             "f 16 18 19\n" +
                             "f 16 17 18\n" +
                             "f 20 19 14\n" +
                             "f 19 20 16\n" +
                             "";


            myTarget.hmesh = new HMesh();
            myTarget.hmesh.BuildFromObj(objTest);
            foreach (var f in myTarget.hmesh.GetFaces())
            {
                if (f.GetCenter().x > 0)
                {
                    //    f.label = 1;
                }
            }
            myTarget.hmesh.GetFacesRaw()[0].label = 1;
            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
        }
        if (GUILayout.Button("Build from obj - degenerate"))
        {
            string objTest = "# Blender v2.78 (sub 0) OBJ File: ''\n" +
                             "# www.blender.org\n" +
                             "mtllib degenerate.mtl\n" +
                             "o Plane\n" +
                             "v -0.477655 -1.045174 1.105640\n" +
                             "v -0.477655 -1.045174 -0.894360\n" +
                             "v -0.477655 -0.480058 0.105640\n" +
                             "v 0.522345 -1.045174 1.105640\n" +
                             "v 0.522345 -1.045174 -0.894360\n" +
                             "v 0.522345 -1.045174 0.105640\n" +
                             "v -0.477655 -1.045174 0.105640\n" +
                             "v 0.522345 -1.045174 0.605640\n" +
                             "v -0.477655 -1.045174 0.105640\n" +
                             "v 0.522345 -1.045174 -0.394360\n" +
                             "vn 0.0000 1.0000 0.0000\n" +
                             "vn 0.0000 0.0000 1.0000\n" +
                             "vn 0.0000 0.0000 -1.0000\n" +
                             "usemtl None\n" +
                             "s off\n" +
                             "f 1//1 4//1 8//1\n" +
                             "f 10//1 2//1 9//1\n" +
                             "f 7//2 6//2 3//2\n" +
                             "f 7//1 8//1 6//1\n" +
                             "f 6//1 10//1 9//1\n" +
                             "f 1//1 8//1 7//1\n" +
                             "f 6//3 9//3 3//3\n" +
                             "f 10//1 5//1 2//1\n";


            myTarget.hmesh = new HMesh();
            myTarget.hmesh.BuildFromObj(objTest);

            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }
        if (GUILayout.Button("Build from obj - flat degenerate 1"))
        {
            string objTest = "# Blender v2.78 (sub 0) OBJ File: ''\n" +
                             "# www.blender.org\n" +
                             "mtllib degenerate1.mtl\n" +
                             "    o degenerate1\n" +
                             "v -1.000000 0.000000 1.000000\n" +
                             "v 1.000000 0.000000 1.000000\n" +
                             "v -1.000000 0.000000 -1.000000\n" +
                             "v 1.000000 0.000000 -1.000000\n" +
                             "v -1.000000 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 1.000000\n" +
                             "v 1.000000 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 -1.000000\n" +
                             "v 0.633916 0.000000 0.000000\n" +
                             "v -0.636292 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 0.000000\n" +
                             "v -0.357594 0.000000 -0.016980\n" +
                             "v -0.357594 0.000000 -0.016980\n" +
                             "v 0.316958 0.000000 0.000000\n" +
                             "vn 0.0000 1.0000 0.0000\n" +
                             "vn 0.0000 -1.0000 0.0000\n" +
                             "usemtl None\n" +
                             "s off\n" +
                             "f 5//1 10//1 14//1 12//1 8//1 3//1\n" +
                             "f 1//1 6//1 11//1 13//1 10//1 5//1\n" +
                             "f 6//1 2//1 7//1 9//1 11//1\n" +
                             "f 11//2 9//2 15//2 12//2 14//2 10//2 13//2\n" +
                             "f 12//1 15//1 9//1 7//1 4//1 8//1\n" +
                             "";


            myTarget.hmesh = new HMesh();
            myTarget.hmesh.BuildFromObj(objTest);

            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }
        if (GUILayout.Button("Build from obj - flat degenerate 2"))
        {
            string objTest = "# Blender v2.78 (sub 0) OBJ File: ''\n" +
                             "# www.blender.org\n" +
                             "mtllib degenerate2.mtl\n" +
                             "    o Degenerate2\n" +
                             "v -1.000000 0.000000 1.000000\n" +
                             "v 1.000000 0.000000 1.000000\n" +
                             "v -1.000000 0.000000 -1.000000\n" +
                             "v 1.000000 0.000000 -1.000000\n" +
                             "v -1.000000 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 1.000000\n" +
                             "v 1.000000 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 -1.000000\n" +
                             "v 0.584243 0.000000 0.000000\n" +
                             "v -0.029986 0.000000 0.012126\n" +
                             "v -0.029986 0.000000 0.012126\n" +
                             "v 0.000000 0.000000 -0.681619\n" +
                             "v -0.180637 0.000000 0.149689\n" +
                             "v -0.029986 0.000000 0.012126\n" +
                             "v -0.046522 0.000000 -0.408366\n" +
                             "v -0.046522 0.000000 -0.408366\n" +
                             "vn -0.0000 1.0000 -0.0000\n" +
                             "usemtl None\n" +
                             "s off\n" +
                             "f 5//1 10//1 16//1 12//1 8//1 3//1\n" +
                             "f 1//1 6//1 11//1 13//1 10//1 5//1\n" +
                             "f 6//1 2//1 7//1 9//1 11//1\n" +
                             "f 11//1 9//1 14//1 15//1 12//1 16//1 10//1 13//1\n" +
                             "f 12//1 15//1 14//1 9//1 7//1 4//1 8//1\n" +
                             "";


            myTarget.hmesh = new HMesh();
            myTarget.hmesh.BuildFromObj(objTest);

            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }
        if (GUILayout.Button("Build from obj - flat degenerate 3"))
        {
            string objTest = "# Blender v2.78 (sub 0) OBJ File: ''\n" +
                             "# www.blender.org\n" +
                             "mtllib degenerate3.mtl\n" +
                             "o Denegerate3\n" +
                             "v -1.000000 0.000000 1.000000\n" +
                             "v 1.000000 0.000000 1.000000\n" +
                             "v -1.000000 0.000000 -1.000000\n" +
                             "v 1.000000 0.000000 -1.000000\n" +
                             "v -1.000000 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 1.000000\n" +
                             "v 1.000000 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 -1.000000\n" +
                             "v 0.809701 0.000000 0.000000\n" +
                             "v -0.795454 0.000000 0.000000\n" +
                             "v 0.000000 0.000000 0.026553\n" +
                             "v 0.000000 0.000000 0.026553\n" +
                             "v 0.417223 0.000000 0.020130\n" +
                             "v 0.531795 0.000000 0.383705\n" +
                             "v 0.628144 -0.000000 -0.286403\n" +
                             "v 0.417223 0.000000 0.020130\n" +
                             "v -0.298932 0.000000 0.031520\n" +
                             "v -0.478770 0.000000 -0.367569\n" +
                             "v -0.622377 0.000000 0.355869\n" +
                             "v -0.298932 0.000000 0.031520\n" +
                             "vn -0.0000 1.0000 -0.0000\n" +
                             "usemtl None\n" +
                             "s off\n" +
                             "f 10//1 19//1 20//1 11//1 13//1 14//1 9//1 15//1 16//1 12//1 17//1 18//1\n" +
                             "f 5//1 10//1 18//1 17//1 12//1 8//1 3//1\n" +
                             "f 1//1 6//1 11//1 20//1 19//1 10//1 5//1\n" +
                             "f 6//1 2//1 7//1 9//1 14//1 13//1 11//1\n" +
                             "f 12//1 16//1 15//1 9//1 7//1 4//1 8//1\n" +
                             "";


            myTarget.hmesh = new HMesh();
            myTarget.hmesh.BuildFromObj(objTest);

            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }
        if (GUILayout.Button("Build from obj - test"))
        {
            string objTest = myTarget.objfile;

            myTarget.hmesh = new HMesh();
            myTarget.hmesh.BuildFromObj(objTest);
            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }

        if (GUILayout.Button("Simplify"))
        {
            int res = HMeshSimplification.SimplifyByCollapse(myTarget.hmesh);
            Debug.Log("Res " + res);
            Debug.Log("Valid " + myTarget.hmesh.IsValid());
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }

        if (GUILayout.Button("Optimize"))
        {
            HMeshOptimizer optimizer = new HMeshOptimizer();
            optimizer.FaceLabelContrain  = myTarget.OptimizeFaceLabelContrain;
            optimizer.FaceNormalContrain = myTarget.OptimizeFaceNormalContrain;
            switch (myTarget.optStategy)
            {
            case OptimizationStrategy.MaximizeMinAngle:
                optimizer.MaximizeMinAngle(myTarget.hmesh, myTarget.OptimizeMinMaxAngleThreshold);
                break;

            case OptimizationStrategy.MinimizeDihedralAngle:
                optimizer.MinimizeDihedralAngle(myTarget.hmesh);
                break;

            case OptimizationStrategy.OptimizeValency:
                optimizer.OptimizeValency(myTarget.hmesh);
                break;
            }
            myTarget.hmesh.IsValid();
            myTarget.UpdateMesh();
            Debug.Log(myTarget.hmesh.CreateDebugData());
        }

        if (GUILayout.Button("Split 2x1x2"))
        {
            var hmesh = EarClipTestEditor.CreateTestMeshPolygon(myTarget.GetComponent <EarClipTest>());
            foreach (var f in hmesh.GetFaces())
            {
                EarClipping.Tesselate(f);
            }
            var meshes = hmesh.ExportSplit(new Vector3i(2, 1, 2));
            foreach (var mesh in meshes)
            {
                GameObject go  = new GameObject("SplitMesh");
                var        mr  = go.AddComponent <MeshRenderer>();
                var        mat = new Material(Shader.Find("Standard"));
                mat.color   = Color.white;
                mr.material = mat;
                var mf = go.AddComponent <MeshFilter>();
                mf.mesh = mesh;
            }
        }

        if (GUILayout.Button("Export OBJ"))
        {
            var fileObj = myTarget.hmesh.ExportObj();
            File.WriteAllText("/Users/mnob/Desktop/export-obj.obj", fileObj);
        }
    }