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); } }
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); } } }
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); } } }
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"); }