ensure ramps affect obstacles correctly
This commit is contained in:
parent
b9977676d6
commit
eac6048fe3
1 changed files with 11 additions and 2 deletions
|
@ -176,7 +176,7 @@ class LevelRenderData:
|
||||||
levels = tuple(Level.objects.prefetch_related('altitudeareas', 'buildings', 'doors', 'spaces',
|
levels = tuple(Level.objects.prefetch_related('altitudeareas', 'buildings', 'doors', 'spaces',
|
||||||
'spaces__holes', 'spaces__areas', 'spaces__columns',
|
'spaces__holes', 'spaces__areas', 'spaces__columns',
|
||||||
'spaces__obstacles', 'spaces__lineobstacles',
|
'spaces__obstacles', 'spaces__lineobstacles',
|
||||||
'spaces__groups'))
|
'spaces__groups', 'spaces__ramps'))
|
||||||
|
|
||||||
single_level_geoms = {}
|
single_level_geoms = {}
|
||||||
interpolators = {}
|
interpolators = {}
|
||||||
|
@ -293,6 +293,11 @@ class LevelRenderData:
|
||||||
if new_geoms.walls.is_empty and not new_geoms.altitudeareas:
|
if new_geoms.walls.is_empty and not new_geoms.altitudeareas:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
new_geoms.ramps = tuple(
|
||||||
|
ramp for ramp in (crop_to.intersection(ramp) for ramp in old_geoms.ramps)
|
||||||
|
if not ramp.is_empty
|
||||||
|
)
|
||||||
|
|
||||||
new_geoms.heightareas = tuple(
|
new_geoms.heightareas = tuple(
|
||||||
(area, height) for area, height in ((crop_to.intersection(area), height)
|
(area, height) for area, height in ((crop_to.intersection(area), height)
|
||||||
for area, height in old_geoms.heightareas)
|
for area, height in old_geoms.heightareas)
|
||||||
|
@ -420,6 +425,7 @@ class LevelGeometries:
|
||||||
self.restricted_spaces_indoors = None
|
self.restricted_spaces_indoors = None
|
||||||
self.restricted_spaces_outdoors = None
|
self.restricted_spaces_outdoors = None
|
||||||
self.affected_area = None
|
self.affected_area = None
|
||||||
|
self.ramps = []
|
||||||
|
|
||||||
self.vertices = None
|
self.vertices = None
|
||||||
self.faces = None
|
self.faces = None
|
||||||
|
@ -501,6 +507,8 @@ class LevelGeometries:
|
||||||
lineobstacle.buffered_geometry.intersection(space.walkable_geom)
|
lineobstacle.buffered_geometry.intersection(space.walkable_geom)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
geoms.ramps.extend(ramp.geometry for ramp in space.ramps.all())
|
||||||
|
|
||||||
heightareas.setdefault(int((space.height or level.default_height)*1000), []).append(space.geometry)
|
heightareas.setdefault(int((space.height or level.default_height)*1000), []).append(space.geometry)
|
||||||
colors.pop(None, None)
|
colors.pop(None, None)
|
||||||
|
|
||||||
|
@ -569,7 +577,7 @@ class LevelGeometries:
|
||||||
def get_geometries(self):
|
def get_geometries(self):
|
||||||
# omit heightareas as these are never drawn
|
# omit heightareas as these are never drawn
|
||||||
return chain(chain(*(area.get_geometries() for area in self.altitudeareas)), (self.walls, self.doors,),
|
return chain(chain(*(area.get_geometries() for area in self.altitudeareas)), (self.walls, self.doors,),
|
||||||
self.restricted_spaces_indoors.values(), self.restricted_spaces_outdoors.values(),
|
self.restricted_spaces_indoors.values(), self.restricted_spaces_outdoors.values(), self.ramps,
|
||||||
(geom for altitude, geom in self.short_walls))
|
(geom for altitude, geom in self.short_walls))
|
||||||
|
|
||||||
def create_hybrid_geometries(self, face_centers):
|
def create_hybrid_geometries(self, face_centers):
|
||||||
|
@ -770,6 +778,7 @@ class LevelGeometries:
|
||||||
|
|
||||||
# unset heightareas, they are no loinger needed
|
# unset heightareas, they are no loinger needed
|
||||||
self.all_walls = None
|
self.all_walls = None
|
||||||
|
self.ramps = None
|
||||||
self.heightareas = None
|
self.heightareas = None
|
||||||
self.vertices = None
|
self.vertices = None
|
||||||
self.faces = None
|
self.faces = None
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue