| |
| |
|
|
| |
|
|
| import numpy as np |
| import unittest |
| import os |
|
|
| from . import test_data_folder, temporary_files_folder |
|
|
|
|
| class TestVisibility(unittest.TestCase): |
|
|
| @unittest.skip('Too long - skipping for the moment.') |
| def test_qslim_smoke_test(self): |
| from psbody.mesh.mesh import Mesh |
| from psbody.mesh.topology.decimation import qslim_decimator |
| from psbody.mesh.geometry.triangle_area import triangle_area |
|
|
| m = Mesh(filename=os.path.join(test_data_folder, 'female_template.ply')) |
|
|
| ta = triangle_area(m.v, m.f) |
| m.set_face_colors(ta / np.max(ta)) |
|
|
| qslimmer = qslim_decimator(m, factor=0.1) |
| m2 = qslimmer(m) |
| ta = triangle_area(m2.v, m2.f) |
| m2.set_face_colors(ta / np.max(ta)) |
|
|
|
|
| class TestLoopSubdivision(unittest.TestCase): |
|
|
| @unittest.skipIf( |
| not os.path.isfile(os.path.join(test_data_folder, 'female_template.ply')), |
| 'No data file.') |
| def test_loop_subdivision_smoke_test(self): |
| from psbody.mesh import Mesh |
| from psbody.mesh.topology.subdivision import loop_subdivider |
|
|
| m1 = Mesh(filename=os.path.join(test_data_folder, 'female_template.ply')) |
| sdv = loop_subdivider(m1) |
|
|
| self.assertIsNotNone(sdv) |
| self.assertTrue(hasattr(sdv, "faces")) |
|
|
| f_new = sdv.faces |
|
|
| v_new = sdv(m1.v) |
| self.assertIsNotNone(v_new) |
| v_new = v_new.reshape((-1, 3)) |
|
|
| v_new_want_edge = sdv(m1.v, want_edges=True) |
| self.assertIsNotNone(v_new_want_edge) |
| v_new_want_edge = v_new_want_edge.reshape((-1, 3)) |
|
|
| m2 = Mesh(v=v_new, f=f_new) |
|
|
| m1.reset_normals() |
| m2.reset_normals() |
|
|
| m1.write_ply(os.path.join(temporary_files_folder, 'lowres.ply')) |
| m2.write_ply(os.path.join(temporary_files_folder, 'highres.ply')) |
|
|
| if 0: |
| from psbody.mesh import MeshViewers |
| mvs = MeshViewers(shape=(2, 2)) |
| mvs[0][0].set_static_meshes([m1]) |
| m1.f = [] |
| mvs[0][1].set_static_meshes([m1]) |
| mvs[1][0].set_static_meshes([m2]) |
| m2.f = [] |
| mvs[1][1].set_static_meshes([m2]) |
|
|
|
|
| class TestConnectivity(unittest.TestCase): |
|
|
| @unittest.skipIf( |
| not os.path.isfile(os.path.join(test_data_folder, 'female_template.ply')), |
| 'No data file.') |
| def test_connectivity_smoke_test(self): |
|
|
| from psbody.mesh import Mesh |
| from psbody.mesh.topology.connectivity import get_vert_connectivity, get_faces_per_edge |
| m = Mesh(filename=os.path.join(test_data_folder, 'female_template.ply')) |
| vconn = get_vert_connectivity(m) |
| fpe = get_faces_per_edge(m) |
|
|
| self.assertIsNotNone(vconn) |
| self.assertIsNotNone(fpe) |
|
|