diff --git a/src/c3nav/routing/level.py b/src/c3nav/routing/level.py index 955c663c..12dee296 100644 --- a/src/c3nav/routing/level.py +++ b/src/c3nav/routing/level.py @@ -284,14 +284,22 @@ class GraphLevel(): def collect_arealocation_points(self): self.arealocation_points = {} + + for room in self.rooms: + room.excludables = [] + for name, arealocation in self._built_arealocations.items(): mpl_area = shapely_to_mpl(arealocation) rooms = [room for room in self.rooms if any(room.mpl_clear.intersects_path(exterior, filled=True) for exterior in mpl_area.exteriors)] possible_points = tuple(point for point in sum((room._built_points for room in rooms), []) if point.room) - self.arealocation_points[name] = tuple(point.i for point in possible_points - if mpl_area.contains_point(point.xy)) + points = tuple(point for point in possible_points if mpl_area.contains_point(point.xy)) + self.arealocation_points[name] = tuple(point.i for point in points) + + if name in self._built_excludables: + for room in set(point.room for point in points): + room.excludables.append(name) # Drawing ctype_colors = { diff --git a/src/c3nav/routing/room.py b/src/c3nav/routing/room.py index 802d9341..f3275bdd 100644 --- a/src/c3nav/routing/room.py +++ b/src/c3nav/routing/room.py @@ -28,6 +28,7 @@ class GraphRoom(): self.room_transfer_points = None self.distances = np.zeros((1, )) self.ctypes = None + self.excludables = None def serialize(self): return ( @@ -37,12 +38,14 @@ class GraphRoom(): self.room_transfer_points, self.distances, self.ctypes, + self.excludables, ) @classmethod def unserialize(cls, level, data): room = cls(level) - room.mpl_clear, areas, room.points, room.room_transfer_points, room.distances, room.ctypes = data + (room.mpl_clear, areas, room.points, room.room_transfer_points, + room.distances, room.ctypes, room.edcludables) = data room.areas = tuple(GraphArea(room, *area) for area in areas) return room @@ -212,6 +215,7 @@ class GraphRoom(): self.areas = tuple(self.areas) self.points = tuple(point.i for point in self._built_points) self.room_transfer_points = tuple(i for i in self.points if i in self.level.room_transfer_points) + self.excludables = tuple(self.excludables) mapping = {point.i: i for i, point in enumerate(self._built_points)}