public static void ConnectEdges_MatchesTemplate([ValueSource("shapeTypes")] ShapeType shapeType)
    {
        var mesh = ShapeGenerator.CreateShape(shapeType);

        Assume.That(mesh, Is.Not.Null);

        try
        {
            var face = mesh.facesInternal[0];

            mesh.Connect(new Edge[] { face.edgesInternal[0], face.edgesInternal[1] });
            mesh.ToMesh();
            mesh.Refresh();

#if PB_CREATE_TEST_MESH_TEMPLATES
            TestUtility.SaveAssetTemplate(mesh.mesh, mesh.name);
#endif
            TestUtility.AssertMeshAttributesValid(mesh.mesh);
            var template = TestUtility.GetAssetTemplate <Mesh>(mesh.name);
            Assert.IsNotNull(template);
            TestUtility.AssertMeshesAreEqual(template, mesh.mesh);
        }
        catch (System.Exception e)
        {
            Debug.LogError(e.ToString());
        }
        finally
        {
            UnityEngine.Object.DestroyImmediate(mesh.gameObject);
        }
    }
Example #2
0
        public static void SubdivideFirstFace()
        {
            using (var shapes = new TestUtility.BuiltInPrimitives())
            {
                foreach (var pb in (IEnumerable <ProBuilderMesh>)shapes)
                {
                    var face = pb.facesInternal.FirstOrDefault();
                    Subdivision.Subdivide(pb, new ProBuilder.Face[] { face });
                    pb.ToMesh();
                    pb.Refresh();
#if PB_CREATE_TEST_MESH_TEMPLATES
                    TestUtility.SaveAssetTemplate(pb.mesh, pb.name);
#endif
                    TestUtility.AssertMeshAttributesValid(pb.mesh);
                    var template = TestUtility.GetAssetTemplate <Mesh>(pb.name);
                    Assert.IsNotNull(template);
                    TestUtility.AssertMeshesAreEqual(template, pb.mesh);
                }
            }
        }
Example #3
0
        public static void Connect2Edges()
        {
            using (var shapes = new TestUtility.BuiltInPrimitives())
            {
                foreach (var mesh in (IEnumerable <ProBuilderMesh>)shapes)
                {
                    var face = mesh.facesInternal[0];
                    mesh.Connect(new ProBuilder.Edge[] { face.edgesInternal[0], face.edgesInternal[1] });
                    mesh.ToMesh();
                    mesh.Refresh();

#if PB_CREATE_TEST_MESH_TEMPLATES
                    TestUtility.SaveAssetTemplate(mesh.mesh, mesh.name);
#endif
                    TestUtility.AssertMeshAttributesValid(mesh.mesh);
                    var template = TestUtility.GetAssetTemplate <Mesh>(mesh.name);
                    Assert.IsNotNull(template);
                    TestUtility.AssertMeshesAreEqual(template, mesh.mesh);
                }
            }
        }
Example #4
0
        public static void SubdivideFirstFace_CreatesValidMesh([ValueSource("shapeTypes")] ShapeType shape)
        {
            var pb = ShapeGenerator.CreateShape(shape);

            try
            {
                var face = pb.facesInternal.FirstOrDefault();
                Subdivision.Subdivide(pb, new ProBuilder.Face[] { face });
                pb.ToMesh();
                pb.Refresh();
#if PB_CREATE_TEST_MESH_TEMPLATES
                TestUtility.SaveAssetTemplate(pb.mesh, pb.name);
#endif
                TestUtility.AssertMeshAttributesValid(pb.mesh);
                var template = TestUtility.GetAssetTemplate <Mesh>(pb.name);
                Assert.IsNotNull(template);
                TestUtility.AssertMeshesAreEqual(template, pb.mesh);
            }
            finally
            {
                UObject.DestroyImmediate(pb.gameObject);
            }
        }
        public static void QuadsImportWithCorrectWinding()
        {
            var srcPath = TestUtility.TemporarySavedAssetsDirectory + "maya-cube-quads.fbx";

            // do this song and dance because AssetDatabase.LoadAssetAtPath doesn't seem to work with models in the
            // Package directories
            File.Copy(TestUtility.TemplatesDirectory + "MeshImporter/maya-cube-quads.fbx", srcPath);
            AssetDatabase.Refresh();
            var source       = AssetDatabase.LoadMainAssetAtPath(srcPath);
            var meshImporter = (ModelImporter)AssetImporter.GetAtPath(srcPath);

            meshImporter.globalScale = 100f;
            meshImporter.isReadable  = true;
            meshImporter.SaveAndReimport();

            Assert.IsNotNull(source);

            var instance = (GameObject)UObject.Instantiate(source);
            var result   = new GameObject().AddComponent <ProBuilderMesh>();
            var importer = new MeshImporter(result);

            Assert.IsTrue(importer.Import(instance, new MeshImportSettings()
            {
                quads          = true,
                smoothing      = false,
                smoothingAngle = 1f
            }), "Failed importing mesh");

            result.Rebuild();

            // Assert.IsNotNull doesn't work with  UnityObject magic
            Assert.IsFalse(result.mesh == null);

#if PB_CREATE_TEST_MESH_TEMPLATES
            TestUtility.SaveAssetTemplate(result.mesh, "imported-cube-triangles");
#endif

            TestUtility.AssertMeshesAreEqual(TestUtility.GetAssetTemplate <Mesh>("imported-cube-triangles"), result.mesh);

            UObject.DestroyImmediate(result);

            UObject.DestroyImmediate(instance);
            meshImporter.keepQuads = true;
            meshImporter.SaveAndReimport();
            instance = (GameObject)UObject.Instantiate(source);

            var quadMesh = instance.GetComponent <MeshFilter>().sharedMesh;
            Assert.AreEqual(MeshTopology.Quads, quadMesh.GetTopology(0));

            result   = new GameObject().AddComponent <ProBuilderMesh>();
            importer = new MeshImporter(result);

            Assert.IsTrue(importer.Import(instance, new MeshImportSettings()
            {
                quads          = true,
                smoothing      = false,
                smoothingAngle = 1f
            }), "Failed importing mesh");

            result.Rebuild();

#if PB_CREATE_TEST_MESH_TEMPLATES
            TestUtility.SaveAssetTemplate(result.mesh, "imported-cube-quads");
#endif

            TestUtility.AssertMeshesAreEqual(TestUtility.GetAssetTemplate <Mesh>("imported-cube-quads"), result.mesh);
            UObject.DestroyImmediate(result);
            AssetDatabase.DeleteAsset(TestUtility.TemporarySavedAssetsDirectory + "maya-cube-quads.fbx");
        }