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 = None
|
||||||
main_building_block_diff = None
|
main_building_block_diff = None
|
||||||
|
|
||||||
last_lower_bound = None
|
current_upper_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
|
|
||||||
for geoms in levels:
|
for geoms in levels:
|
||||||
# hide indoor and outdoor rooms if their access restriction was not unlocked
|
# hide indoor and outdoor rooms if their access restriction was not unlocked
|
||||||
restricted_spaces_indoors = unary_union(
|
restricted_spaces_indoors = unary_union(
|
||||||
|
|
|
@ -53,6 +53,11 @@ class LevelGeometries:
|
||||||
self.default_height = None
|
self.default_height = None
|
||||||
self.door_height = None
|
self.door_height = None
|
||||||
self.min_altitude = None
|
self.min_altitude = None
|
||||||
|
self.max_altitude = None
|
||||||
|
self.max_height = None
|
||||||
|
|
||||||
|
self.lower_bound = None
|
||||||
|
self.upper_bound = None
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<LevelGeometries for Level %s (#%d)>' % (self.short_label, self.pk)
|
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.door_height = int(level.door_height * 1000)
|
||||||
geoms.min_altitude = (min(area.altitude for area in geoms.altitudeareas)
|
geoms.min_altitude = (min(area.altitude for area in geoms.altitudeareas)
|
||||||
if geoms.altitudeareas else geoms.base_altitude)
|
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
|
return geoms
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,7 @@ class LevelRenderData:
|
||||||
primary_level_count = 0
|
primary_level_count = 0
|
||||||
main_level_passed = 0
|
main_level_passed = 0
|
||||||
lowest_important_level = None
|
lowest_important_level = None
|
||||||
|
last_lower_bound = None
|
||||||
for sublevel in reversed(sublevels):
|
for sublevel in reversed(sublevels):
|
||||||
geoms = single_level_geoms[sublevel.pk]
|
geoms = single_level_geoms[sublevel.pk]
|
||||||
|
|
||||||
|
@ -119,6 +120,14 @@ class LevelRenderData:
|
||||||
if main_level_passed < 2:
|
if main_level_passed < 2:
|
||||||
lowest_important_level = sublevel
|
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
|
# 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)
|
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.door_height = old_geoms.door_height
|
||||||
new_geoms.min_altitude = (min(area.altitude for area in new_geoms.altitudeareas)
|
new_geoms.min_altitude = (min(area.altitude for area in new_geoms.altitudeareas)
|
||||||
if new_geoms.altitudeareas else new_geoms.base_altitude)
|
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)
|
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