diff --git a/src/c3nav/mapdata/render/data.py b/src/c3nav/mapdata/render/data.py index f79c24a6..d7b8d11a 100644 --- a/src/c3nav/mapdata/render/data.py +++ b/src/c3nav/mapdata/render/data.py @@ -505,6 +505,9 @@ class LevelGeometries: return vertex_values + def _filter_faces(self, faces): + return faces[np.all(np.any(faces[:, (0, 1, 2), :]-faces[:, (2, 0, 1), :], axis=2), axis=1)] + def _create_polyhedron(self, faces, lower, upper, top=True, sides=True, bottom=True): if not any(faces): return () @@ -556,22 +559,24 @@ class LevelGeometries: # top faces if top: - mesh.top = np.dstack((self.vertices[geom_faces], upper[geom_faces])) + mesh.top = self._filter_faces(np.dstack((self.vertices[geom_faces], upper[geom_faces]))) # side faces if sides: - mesh.sides = np.vstack(( + mesh.sides = self._filter_faces(np.vstack(( # upper np.dstack((self.vertices[boundaries[:, (1, 0, 0)]], np.hstack((upper[boundaries[:, (1, 0)]], lower[boundaries[:, (0,)]])))), # lower np.dstack((self.vertices[boundaries[:, (0, 1, 1)]], np.hstack((lower[boundaries[:, (0, 1)]], upper[boundaries[:, (1,)]])))) - )) + ))) # bottom faces if bottom: - mesh.bottom = np.dstack((self.vertices[np.flip(geom_faces, axis=1)], lower[geom_faces])) + mesh.bottom = self._filter_faces( + np.dstack((self.vertices[np.flip(geom_faces, axis=1)], lower[geom_faces])) + ) return tuple((mesh, ))