routing: stuffedareas

This commit is contained in:
Laura Klünder 2016-12-27 01:49:23 +01:00
parent 3a44985840
commit 4c547326bf
4 changed files with 19 additions and 2 deletions

View file

@ -47,6 +47,9 @@ class GraphArea():
if self.mpl_clear.intersects_path(path):
return None, None, None
if self.room.stuffedareas.intersects_path(path, filled=True):
distance *= 2.5
# stair checker
angle = coord_angle(point1, point2)
stair_direction_up = None

View file

@ -69,6 +69,7 @@ class GraphLevel():
self.create_elevatorlevels()
self.collect_arealocations()
self.collect_stuffedareas()
self._built_points = sum((room._built_points for room in self.rooms), [])
self._built_points.extend(self._built_room_transfer_points)
@ -156,6 +157,15 @@ class GraphLevel():
for interior in polygon.interiors:
room._add_ring(interior, want_left=False)
def collect_stuffedareas(self):
self._built_stuffedareas = self.level.geometries.stuffedareas
for polygon in assert_multipolygon(self._built_stuffedareas.buffer(0.05, join_style=JOIN_STYLE.mitre)):
for room in self.rooms:
room._add_ring(polygon.exterior, want_left=True)
for interior in polygon.interiors:
room._add_ring(interior, want_left=False)
def create_doors(self):
doors = self.level.geometries.doors
doors = assert_multipolygon(doors)

View file

@ -29,6 +29,7 @@ class GraphRoom():
self.distances = np.zeros((1, ))
self.ctypes = None
self.excludables = None
self.stuffedareas = None
def serialize(self):
return (
@ -40,13 +41,14 @@ class GraphRoom():
self.ctypes,
self.excludables,
self.excludable_points,
self.stuffedareas,
)
@classmethod
def unserialize(cls, level, data):
room = cls(level)
(room.mpl_clear, areas, room.points, room.room_transfer_points,
room.distances, room.ctypes, room.excludables, room.excludable_points) = data
room.distances, room.ctypes, room.excludables, room.excludable_points, room.stuffedareas) = data
room.areas = tuple(GraphArea(room, *area) for area in areas)
return room
@ -206,6 +208,8 @@ class GraphRoom():
if self._built_is_elevatorlevel:
return
self.stuffedareas = shapely_to_mpl(self.level._built_stuffedareas.intersection(self._built_geometry))
for area in self.areas:
area.build_connections()

View file

@ -82,7 +82,7 @@ def shapely_to_mpl(geometry):
"""
if isinstance(geometry, Polygon):
return MplPolygonPath(geometry)
elif isinstance(geometry, MultiPolygon):
elif isinstance(geometry, MultiPolygon) or geometry.is_empty:
return MplMultipolygonPath(geometry)
raise TypeError