buildgraph: add support vor levelconnectors
This commit is contained in:
parent
3779398d16
commit
516d7921ce
2 changed files with 33 additions and 0 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
from itertools import permutations
|
||||||
|
|
||||||
from c3nav.mapdata.models import Level
|
from c3nav.mapdata.models import Level
|
||||||
from c3nav.routing.graph.connection import GraphConnection
|
from c3nav.routing.graph.connection import GraphConnection
|
||||||
from c3nav.routing.graph.level import GraphLevel
|
from c3nav.routing.graph.level import GraphLevel
|
||||||
|
@ -7,6 +9,7 @@ class Graph():
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.levels = {}
|
self.levels = {}
|
||||||
self.connections = []
|
self.connections = []
|
||||||
|
self.levelconnector_points = {}
|
||||||
|
|
||||||
def build(self):
|
def build(self):
|
||||||
for level in Level.objects.all():
|
for level in Level.objects.all():
|
||||||
|
@ -14,7 +17,19 @@ class Graph():
|
||||||
|
|
||||||
for level in self.levels.values():
|
for level in self.levels.values():
|
||||||
level.build()
|
level.build()
|
||||||
|
|
||||||
|
self.connect_levelconnectors()
|
||||||
|
|
||||||
|
for level in self.levels.values():
|
||||||
level.draw_png()
|
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):
|
def add_connection(self, from_point, to_point):
|
||||||
self.connections.append(GraphConnection(self, from_point, to_point))
|
self.connections.append(GraphConnection(self, from_point, to_point))
|
||||||
|
|
|
@ -53,6 +53,24 @@ class GraphLevel():
|
||||||
for from_point, to_point in permutations(points, 2):
|
for from_point, to_point in permutations(points, 2):
|
||||||
from_point.connect_to(to_point)
|
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:
|
for room in self.rooms:
|
||||||
room.connect_points()
|
room.connect_points()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue