From 4e2e8213bc2ac38c40f1152ebbaf5ab82e378c98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Thu, 6 Dec 2018 17:37:54 +0100 Subject: [PATCH] move lower_bound and upper_bound calculation to renderdata --- src/c3nav/mapdata/render/engines/openscad.py | 22 +------------------- src/c3nav/mapdata/render/geometry/level.py | 10 +++++++++ src/c3nav/mapdata/render/renderdata.py | 15 +++++++++++++ 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/c3nav/mapdata/render/engines/openscad.py b/src/c3nav/mapdata/render/engines/openscad.py index 87f4b6a4..55246bfb 100644 --- a/src/c3nav/mapdata/render/engines/openscad.py +++ b/src/c3nav/mapdata/render/engines/openscad.py @@ -71,27 +71,7 @@ class OpenSCADEngine(Base3DEngine): main_building_block = None main_building_block_diff = None - last_lower_bound = None - for geoms in reversed(levels): - if geoms.on_top_of_id is not None: - continue - - altitudes = [geoms.base_altitude] - for altitudearea in geoms.altitudeareas: - altitudes.append(altitudearea.altitude) - if altitudearea.altitude2 is not None: - altitudes.append(altitudearea.altitude2) - - if last_lower_bound is None: - altitude = max(altitudes) - height = max((height for (geometry, height) in geoms.heightareas), default=geoms.default_height) - last_lower_bound = altitude+height - - geoms.upper_bound = last_lower_bound - geoms.lower_bound = min(altitudes)-700 - last_lower_bound = geoms.lower_bound - - current_upper_bound = last_lower_bound + current_upper_bound = None for geoms in levels: # hide indoor and outdoor rooms if their access restriction was not unlocked restricted_spaces_indoors = unary_union( diff --git a/src/c3nav/mapdata/render/geometry/level.py b/src/c3nav/mapdata/render/geometry/level.py index 5c9e9645..213b5244 100644 --- a/src/c3nav/mapdata/render/geometry/level.py +++ b/src/c3nav/mapdata/render/geometry/level.py @@ -53,6 +53,11 @@ class LevelGeometries: self.default_height = None self.door_height = None self.min_altitude = None + self.max_altitude = None + self.max_height = None + + self.lower_bound = None + self.upper_bound = None def __repr__(self): return '' % (self.short_label, self.pk) @@ -211,6 +216,11 @@ class LevelGeometries: geoms.door_height = int(level.door_height * 1000) geoms.min_altitude = (min(area.altitude for area in geoms.altitudeareas) if geoms.altitudeareas else geoms.base_altitude) + geoms.max_altitude = (max(area.altitude for area in geoms.altitudeareas) + if geoms.altitudeareas else geoms.base_altitude) + geoms.max_height = (min(height for area, height in geoms.heightareas) + if geoms.heightareas else geoms.default_height) + geoms.lower_bound = geoms.min_altitude-700 return geoms diff --git a/src/c3nav/mapdata/render/renderdata.py b/src/c3nav/mapdata/render/renderdata.py index e052fd9a..eb8ff87d 100644 --- a/src/c3nav/mapdata/render/renderdata.py +++ b/src/c3nav/mapdata/render/renderdata.py @@ -102,6 +102,7 @@ class LevelRenderData: primary_level_count = 0 main_level_passed = 0 lowest_important_level = None + last_lower_bound = None for sublevel in reversed(sublevels): geoms = single_level_geoms[sublevel.pk] @@ -119,6 +120,14 @@ class LevelRenderData: if main_level_passed < 2: lowest_important_level = sublevel + # make upper bounds + if geoms.on_top_of_id is None: + if last_lower_bound is None: + geoms.upper_bound = geoms.max_altitude+geoms.max_height + else: + geoms.upper_bound = last_lower_bound + last_lower_bound = geoms.lower_bound + # set crop area if we area on the second primary layer from top or below level_crop_to[sublevel.pk] = Cropper(crop_to if primary_level_count > 1 else None) @@ -249,6 +258,12 @@ class LevelRenderData: new_geoms.door_height = old_geoms.door_height new_geoms.min_altitude = (min(area.altitude for area in new_geoms.altitudeareas) if new_geoms.altitudeareas else new_geoms.base_altitude) + new_geoms.max_altitude = (max(area.altitude for area in new_geoms.altitudeareas) + if new_geoms.altitudeareas else new_geoms.base_altitude) + new_geoms.max_height = (min(height for area, height in new_geoms.heightareas) + if new_geoms.heightareas else new_geoms.default_height) + new_geoms.lower_bound = old_geoms.lower_bound + new_geoms.upper_bound = old_geoms.upper_bound new_geoms.build_mesh(interpolators.get(level.pk) if sublevel.pk == level.pk else None)