2016-12-04 12:50:32 +01:00
|
|
|
from itertools import permutations
|
|
|
|
|
2016-12-03 19:09:39 +01:00
|
|
|
from c3nav.mapdata.models import Level
|
|
|
|
from c3nav.routing.graph.connection import GraphConnection
|
|
|
|
from c3nav.routing.graph.level import GraphLevel
|
|
|
|
|
|
|
|
|
|
|
|
class Graph():
|
|
|
|
def __init__(self):
|
|
|
|
self.levels = {}
|
|
|
|
self.connections = []
|
2016-12-04 12:50:32 +01:00
|
|
|
self.levelconnector_points = {}
|
2016-12-03 19:09:39 +01:00
|
|
|
|
|
|
|
def build(self):
|
|
|
|
for level in Level.objects.all():
|
|
|
|
self.levels[level.name] = GraphLevel(self, level)
|
|
|
|
|
|
|
|
for level in self.levels.values():
|
|
|
|
level.build()
|
2016-12-04 12:50:32 +01:00
|
|
|
|
|
|
|
self.connect_levelconnectors()
|
|
|
|
|
|
|
|
for level in self.levels.values():
|
2016-12-03 19:09:39 +01:00
|
|
|
level.draw_png()
|
|
|
|
|
2016-12-04 12:50:32 +01:00
|
|
|
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)
|
|
|
|
|
2016-12-03 19:09:39 +01:00
|
|
|
def add_connection(self, from_point, to_point):
|
|
|
|
self.connections.append(GraphConnection(self, from_point, to_point))
|