buildgraph: add support vor levelconnectors

This commit is contained in:
Laura Klünder 2016-12-04 12:50:32 +01:00
parent 3779398d16
commit 516d7921ce
2 changed files with 33 additions and 0 deletions

View file

@ -1,3 +1,5 @@
from itertools import permutations
from c3nav.mapdata.models import Level
from c3nav.routing.graph.connection import GraphConnection
from c3nav.routing.graph.level import GraphLevel
@ -7,6 +9,7 @@ class Graph():
def __init__(self):
self.levels = {}
self.connections = []
self.levelconnector_points = {}
def build(self):
for level in Level.objects.all():
@ -14,7 +17,19 @@ class Graph():
for level in self.levels.values():
level.build()
self.connect_levelconnectors()
for level in self.levels.values():
level.draw_png()
def add_levelconnector_point(self, levelconnector, point):
self.levelconnector_points.setdefault(levelconnector.name, []).append(point)
def connect_levelconnectors(self):
for levelconnector_name, points in self.levelconnector_points.items():
for from_point, to_point in permutations(points, 2):
self.add_connection(from_point, to_point)
def add_connection(self, from_point, to_point):
self.connections.append(GraphConnection(self, from_point, to_point))

View file

@ -53,6 +53,24 @@ class GraphLevel():
for from_point, to_point in permutations(points, 2):
from_point.connect_to(to_point)
levelconnectors = self.level.geometries.levelconnectors
levelconnectors = assert_multipolygon(levelconnectors)
for levelconnector in self.level.levelconnectors.all():
polygon = levelconnector.geometry
center = polygon.centroid
for room in self.rooms:
if not polygon.intersects(room.geometry):
continue
point = center
if not point.within(room.clear_geometry):
point = get_nearest_point(room.clear_geometry, point)
point = GraphPoint(room, *point.coords[0])
room.points.append(point)
self.graph.add_levelconnector_point(levelconnector, point)
for room in self.rooms:
room.connect_points()