diff --git a/tests/python/test_meshing.py b/tests/python/test_meshing.py index 7ccfaf4..e5ff00f 100644 --- a/tests/python/test_meshing.py +++ b/tests/python/test_meshing.py @@ -1,4 +1,9 @@ -from dtcc_builder.meshing import mesh_multisurface, mesh_surface, mesh_multisurfaces +from dtcc_builder.meshing import ( + mesh_multisurface, + mesh_surface, + mesh_multisurfaces, + rasterize_mesh, +) import dtcc_io as io from dtcc_model import Mesh, Building, Surface, MultiSurface import numpy as np @@ -201,3 +206,62 @@ def test_mesh_multisurfaces(self): self.assertEqual(len(meshes[1].faces), 6) self.assertAlmostEqual(meshes[1].vertices[:, 2].min(), 0) self.assertAlmostEqual(meshes[1].vertices[:, 2].max(), 7) + + +class TestMeshConvertion(unittest.TestCase): + def test_get_vertices(self): + vertice = np.array( + [ + [0, 0, 5], + [0, 10, 5], + [10, 10, 8], + [10, 0, 8], + [0, 0, 0], + ] + ) + faces = np.array([[0, 1, 2], [0, 2, 3]]) + mesh = Mesh(vertices=vertice, faces=faces) + unique_verices = mesh.unique_vertices() + + self.assertEqual(len(unique_verices), 4) + self.assertEqual(unique_verices[:, 2].min(), 5) + + def test_face_centroids(self): + vertice = np.array( + [ + [0, 0, 5], + [0, 10, 5], + [10, 10, 8], + [10, 0, 8], + [0, 0, 0], + ] + ) + faces = np.array([[0, 1, 2], [0, 2, 3]]) + mesh = Mesh(vertices=vertice, faces=faces) + centroids = mesh.face_centroids() + self.assertEqual(len(centroids), 2) + self.assertAlmostEqual(centroids[0][0], 10 / 3.0) + self.assertAlmostEqual(centroids[0][1], 20 / 3.0) + self.assertAlmostEqual(centroids[0][2], 6) + + def test_rasterize(self): + vertice = np.array( + [ + [0, 0, 5], + [0, 10, 5], + [10, 10, 8], + [10, 0, 8], + ] + ) + faces = np.array([[0, 1, 2], [0, 2, 3]]) + mesh = Mesh(vertices=vertice, faces=faces) + raster = rasterize_mesh(mesh, 1, include_centroids=True) + bounds = raster.bounds + self.assertAlmostEqual(bounds.xmin, 0) + self.assertAlmostEqual(bounds.ymin, 0) + self.assertAlmostEqual(bounds.xmax, 10) + self.assertAlmostEqual(bounds.ymax, 10) + self.assertAlmostEqual( + raster.min, 5, places=1 + ) # roughly equal to 5.03 due to interpolation + self.assertAlmostEqual(raster.max, 8, places=1)