From f2b0fc26b1920dd1c5e6226d56673774693383d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 14 Nov 2017 21:11:22 +0100 Subject: [PATCH] don't render altitudearea polyhedrons within columns --- src/c3nav/mapdata/render/data.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/c3nav/mapdata/render/data.py b/src/c3nav/mapdata/render/data.py index bc084a0e..8c70c48d 100644 --- a/src/c3nav/mapdata/render/data.py +++ b/src/c3nav/mapdata/render/data.py @@ -80,6 +80,9 @@ class HybridGeometry: add_faces={crop_id: tuple(mesh.filter(**kwargs) for mesh in faces) for crop_id, faces in self.add_faces.items()}) + def remove_faces(self, faces): + self.faces = tuple((subfaces-faces) for subfaces in self.faces) + @property def is_empty(self): return not self.faces and not any(self.add_faces.values()) @@ -114,6 +117,12 @@ class AltitudeAreaGeometries: self.colors = {color: {key: HybridGeometry.create(geom, face_centers) for key, geom in areas.items()} for color, areas in self.colors.items()} + def remove_faces(self, faces): + self.geometry.remove_faces(faces) + for areas in self.colors.values(): + for area in areas.values(): + area.remove_faces(faces) + def create_polyhedrons(self, create_polyhedron, crops): altitude = self.altitude self.geometry.build_polyhedron(create_polyhedron, @@ -593,6 +602,10 @@ class LevelGeometries: for area, height in self.heightareas) vertex_wall_heights = vertex_altitudes + vertex_heights + # remove altitude area faces inside walls + for area in self.altitudeareas: + area.remove_faces(reduce(operator.or_, self.walls.faces, set())) + # create polyhedrons self.walls_base = HybridGeometry(self.walls.geom, self.walls.faces) self.walls_bottom = HybridGeometry(self.walls.geom, self.walls.faces)