buildgraph: add GraphLevel.arealocation_points
This commit is contained in:
parent
ed0f168a77
commit
6cc8c27ffa
1 changed files with 23 additions and 1 deletions
|
@ -10,6 +10,7 @@ from c3nav.routing.point import GraphPoint
|
|||
from c3nav.routing.room import GraphRoom
|
||||
from c3nav.routing.utils.base import get_nearest_point
|
||||
from c3nav.routing.utils.draw import _ellipse_bbox, _line_coords
|
||||
from c3nav.routing.utils.mpl import shapely_to_mpl
|
||||
|
||||
|
||||
class GraphLevel():
|
||||
|
@ -21,6 +22,7 @@ class GraphLevel():
|
|||
self.points = []
|
||||
self.room_transfer_points = None
|
||||
self.level_transfer_points = None
|
||||
self.arealocation_points = None
|
||||
|
||||
def serialize(self):
|
||||
return (
|
||||
|
@ -28,10 +30,11 @@ class GraphLevel():
|
|||
self.points,
|
||||
self.room_transfer_points,
|
||||
self.level_transfer_points,
|
||||
self.arealocation_points,
|
||||
)
|
||||
|
||||
def unserialize(self, data):
|
||||
rooms, self.points, self.room_transfer_points, self.level_transfer_points = data
|
||||
rooms, self.points, self.room_transfer_points, self.level_transfer_points, self.arealocation_points = data
|
||||
self.rooms = tuple(GraphRoom.unserialize(self, room) for room in rooms)
|
||||
|
||||
# Building the Graph
|
||||
|
@ -58,8 +61,11 @@ class GraphLevel():
|
|||
for room in self.rooms:
|
||||
room.build_connections()
|
||||
|
||||
self.collect_arealocations()
|
||||
|
||||
print('%d points' % len(self._built_points))
|
||||
print('%d room transfer points' % len(self._built_room_transfer_points))
|
||||
print('%d area locations' % len(self._built_arealocations))
|
||||
|
||||
def connection_count(self):
|
||||
return sum(room.connection_count() for room in self.rooms)
|
||||
|
@ -121,15 +127,31 @@ class GraphLevel():
|
|||
room._built_points.append(point)
|
||||
self.graph.add_levelconnector_point(levelconnector, point)
|
||||
|
||||
def collect_arealocations(self):
|
||||
self._built_arealocations = {}
|
||||
for arealocation in self.level.arealocations.all():
|
||||
self._built_arealocations[arealocation.name] = shapely_to_mpl(arealocation.geometry)
|
||||
|
||||
def finish_build(self):
|
||||
self.rooms = tuple(self.rooms)
|
||||
self.points = np.array(tuple(point.i for point in self._built_points))
|
||||
self.room_transfer_points = np.array(tuple(point.i for point in self._built_room_transfer_points))
|
||||
self.level_transfer_points = np.array(tuple(i for i in self.points if i in self.graph.level_transfer_points))
|
||||
|
||||
self.collect_arealocation_points()
|
||||
|
||||
for room in self.rooms:
|
||||
room.finish_build()
|
||||
|
||||
def collect_arealocation_points(self):
|
||||
self.arealocation_points = {}
|
||||
for name, mpl_arealocation in self._built_arealocations.items():
|
||||
rooms = [room for room in self.rooms
|
||||
if room.mpl_clear.intersects_path(mpl_arealocation.exterior, filled=True)]
|
||||
possible_points = set(sum((room._built_points for room in rooms), []))
|
||||
self.arealocation_points[name] = np.array(tuple(point.i for point in possible_points
|
||||
if mpl_arealocation.contains_point(point.xy)))
|
||||
|
||||
# Drawing
|
||||
def draw_png(self, points=True, lines=True):
|
||||
filename = os.path.join(settings.RENDER_ROOT, 'base-level-%s.png' % self.level.name)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue