collect excludables

This commit is contained in:
Laura Klünder 2016-12-19 19:46:07 +01:00
parent 9caaf2a8f0
commit 43efda06e9
2 changed files with 32 additions and 7 deletions

View file

@ -2,9 +2,11 @@ from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from rest_framework.exceptions import PermissionDenied
from rest_framework.permissions import BasePermission
from shapely.geometry import box
from c3nav.mapdata.models import Source
from c3nav.mapdata.utils.cache import get_packages_cached
from c3nav.mapdata.utils.misc import get_dimensions
def get_public_packages():
@ -35,6 +37,14 @@ def filter_queryset_by_package_access(request, queryset):
return queryset if settings.DIRECT_EDITING else queryset.filter(package__in=get_unlocked_packages(request))
def get_public_private_area(level):
width, height = get_dimensions()
everything = box(0, 0, width, height)
public_area = level.public_geometries.areas_and_doors
private_area = everything.difference(public_area)
return public_area, private_area
class LockedMapFeatures(BasePermission):
def has_object_permission(self, request, view, obj):
if isinstance(obj, Source):

View file

@ -9,6 +9,7 @@ from scipy.sparse.csgraph._shortest_path import shortest_path
from scipy.sparse.csgraph._tools import csgraph_from_dense
from shapely.geometry import CAP_STYLE, JOIN_STYLE, LineString
from c3nav.mapdata.permissions import get_public_packages, get_public_private_area
from c3nav.mapdata.utils.geometry import assert_multilinestring, assert_multipolygon
from c3nav.routing.point import GraphPoint
from c3nav.routing.room import GraphRoom
@ -65,14 +66,15 @@ class GraphLevel():
self.create_levelconnectors()
self.create_elevatorlevels()
self.collect_arealocations()
self._built_points = sum((room._built_points for room in self.rooms), [])
self._built_points.extend(self._built_room_transfer_points)
for room in self.rooms:
room.build_connections()
self.collect_arealocations()
print('%d excludables' % len(self._built_excludables))
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))
@ -119,6 +121,24 @@ class GraphLevel():
if room.prepare_build(geometry):
self.rooms.append(room)
def collect_arealocations(self):
public_packages = get_public_packages()
self._built_arealocations = {}
self._built_excludables = {}
for arealocation in self.level.arealocations.all():
self._built_arealocations[arealocation.name] = shapely_to_mpl(arealocation.geometry)
if arealocation.routing_inclusion != 'default' or arealocation.package not in public_packages:
self._built_excludables[arealocation.name] = arealocation.geometry
public_area, private_area = get_public_private_area(self.level)
self._built_arealocations[':public'] = shapely_to_mpl(public_area)
self._built_excludables[':public'] = public_area
self._built_arealocations[':private'] = shapely_to_mpl(private_area)
self._built_excludables[':private'] = private_area
def create_doors(self):
doors = self.level.geometries.doors
doors = assert_multipolygon(doors)
@ -236,11 +256,6 @@ class GraphLevel():
self.graph.add_elevatorlevel_point(elevatorlevel, point)
break
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 = tuple(point.i for point in self._built_points)