collect excludables per room

This commit is contained in:
Laura Klünder 2016-12-19 20:23:44 +01:00
parent 782fd9138f
commit 84301dc719
2 changed files with 15 additions and 3 deletions

View file

@ -284,14 +284,22 @@ class GraphLevel():
def collect_arealocation_points(self): def collect_arealocation_points(self):
self.arealocation_points = {} self.arealocation_points = {}
for room in self.rooms:
room.excludables = []
for name, arealocation in self._built_arealocations.items(): for name, arealocation in self._built_arealocations.items():
mpl_area = shapely_to_mpl(arealocation) mpl_area = shapely_to_mpl(arealocation)
rooms = [room for room in self.rooms rooms = [room for room in self.rooms
if any(room.mpl_clear.intersects_path(exterior, filled=True) for exterior in mpl_area.exteriors)] 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) 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 points = tuple(point for point in possible_points if mpl_area.contains_point(point.xy))
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 # Drawing
ctype_colors = { ctype_colors = {

View file

@ -28,6 +28,7 @@ class GraphRoom():
self.room_transfer_points = None self.room_transfer_points = None
self.distances = np.zeros((1, )) self.distances = np.zeros((1, ))
self.ctypes = None self.ctypes = None
self.excludables = None
def serialize(self): def serialize(self):
return ( return (
@ -37,12 +38,14 @@ class GraphRoom():
self.room_transfer_points, self.room_transfer_points,
self.distances, self.distances,
self.ctypes, self.ctypes,
self.excludables,
) )
@classmethod @classmethod
def unserialize(cls, level, data): def unserialize(cls, level, data):
room = cls(level) 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) room.areas = tuple(GraphArea(room, *area) for area in areas)
return room return room
@ -212,6 +215,7 @@ class GraphRoom():
self.areas = tuple(self.areas) self.areas = tuple(self.areas)
self.points = tuple(point.i for point in self._built_points) 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.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)} mapping = {point.i: i for i, point in enumerate(self._built_points)}