From ad8d5c8cf5becdad1ae4559e0a136ce79adbf4cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 4 Dec 2016 11:58:46 +0100 Subject: [PATCH] maprenderer: implement Obstacle.crop_to_level --- src/c3nav/mapdata/models/level.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/c3nav/mapdata/models/level.py b/src/c3nav/mapdata/models/level.py index 5b7c2de6..4224ce8d 100644 --- a/src/c3nav/mapdata/models/level.py +++ b/src/c3nav/mapdata/models/level.py @@ -104,7 +104,21 @@ class LevelGeometries(): @cached_property def obstacles(self): - return cascaded_union([obstacle.geometry for obstacle in self.level.obstacles.all()]).intersection(self.mapped) + levels_by_name = {} + obstacles_by_crop_to_level = {} + for obstacle in self.level.obstacles.all(): + level_name = None if obstacle.crop_to_level is None else obstacle.crop_to_level.name + levels_by_name.setdefault(level_name, obstacle.crop_to_level) + obstacles_by_crop_to_level.setdefault(level_name, []).append(obstacle.geometry) + + all_obstacles = [] + for level_name, obstacles in obstacles_by_crop_to_level.items(): + obstacles = cascaded_union(obstacles) + if level_name is not None: + obstacles = obstacles.intersection(levels_by_name[level_name].geometries.mapped) + all_obstacles.append(obstacles) + + return cascaded_union(all_obstacles).intersection(self.mapped) @cached_property def raw_doors(self):