move lower_bound and upper_bound calculation to renderdata
This commit is contained in:
parent
5818caa665
commit
4e2e8213bc
3 changed files with 26 additions and 21 deletions
|
@ -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(
|
||||
|
|
|
@ -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 '<LevelGeometries for Level %s (#%d)>' % (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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue