diff --git a/src/c3nav/mapdata/permissions.py b/src/c3nav/mapdata/permissions.py index bad811c2..870ccf21 100644 --- a/src/c3nav/mapdata/permissions.py +++ b/src/c3nav/mapdata/permissions.py @@ -1,3 +1,5 @@ +from collections import OrderedDict + from django.conf import settings from django.utils.translation import ugettext_lazy as _ from rest_framework.exceptions import PermissionDenied @@ -45,6 +47,17 @@ def get_public_private_area(level): return public_area, private_area +def get_excludables_includables(): + excludables = [] + includables = [] + if settings.DEBUG: + excludables.append((':public', _('public areas'))) + includables.append((':nonpublic', _('non-public areas'))) + else: + pass + return OrderedDict(excludables), OrderedDict(includables) + + class LockedMapFeatures(BasePermission): def has_object_permission(self, request, view, obj): if isinstance(obj, Source): diff --git a/src/c3nav/routing/level.py b/src/c3nav/routing/level.py index e3112e71..25877877 100644 --- a/src/c3nav/routing/level.py +++ b/src/c3nav/routing/level.py @@ -136,8 +136,8 @@ class GraphLevel(): self._built_arealocations[':public'] = public_area self._built_excludables[':public'] = public_area - self._built_arealocations[':private'] = private_area - self._built_excludables[':private'] = private_area + self._built_arealocations[':nonpublic'] = private_area + self._built_excludables[':nonpublic'] = private_area # add points inside arealocations to be able to route to its borders for excludable in self._built_arealocations.values(): diff --git a/src/c3nav/routing/room.py b/src/c3nav/routing/room.py index 5428025c..25d3ed58 100644 --- a/src/c3nav/routing/room.py +++ b/src/c3nav/routing/room.py @@ -263,29 +263,26 @@ class GraphRoom(): return roomrouter def _build_router(self, ctypes, public, nonpublic, avoid, include): - distances = np.amin(self.distances[ctypes, :, :], axis=0) - orig_distances = None - if include: - orig_distances = distances.copy() + distances = np.amin(self.distances[ctypes, :, :], axis=0).astype(np.float32) + factors = np.ones_like(distances, dtype=np.float16) if ':public' in self.excludables and not public: points, = self.excludable_points[self.excludables.index(':public')].nonzero() - distances[points[:, None], points] *= 1000 + factors[points[:, None], points] = 1000 - if ':private' in self.excludables and not nonpublic: - points, = self.excludable_points[self.excludables.index(':private')].nonzero() - print(points) - distances[points[:, None], points] = np.inf + if ':nonpublic' in self.excludables and not nonpublic: + points, = self.excludable_points[self.excludables.index(':nonpublic')].nonzero() + factors[points[:, None], points] = np.inf if avoid: - points, = self.excludable_points[avoid, :].any(axis=0).nonzero() - distances[points[:, None], points] *= 1000 + points, = self.excludable_points[avoid].any(axis=0).nonzero() + factors[points[:, None], points] = 1000 if include: - points, = self.excludable_points[include, :].any(axis=0).nonzero() - distances[points[:, None], points] = orig_distances[points[:, None], points] + points, = self.excludable_points[include].any(axis=0).nonzero() + factors[points[:, None], points] = 1 - g_sparse = csgraph_from_dense(distances, null_value=np.inf) + g_sparse = csgraph_from_dense(distances*factors, null_value=np.inf) shortest_paths, predecessors = shortest_path(g_sparse, return_predecessors=True) return RoomRouter(shortest_paths, predecessors) diff --git a/src/c3nav/routing/route.py b/src/c3nav/routing/route.py index c5b69ed0..21ca3852 100644 --- a/src/c3nav/routing/route.py +++ b/src/c3nav/routing/route.py @@ -53,7 +53,6 @@ class Route: @staticmethod def describe_point(point): - print(point.arealocations) locations = sorted(AreaLocation.objects.filter(location_type__in=('room', 'level', 'area'), name__in=point.arealocations), key=AreaLocation.get_sort_key, reverse=True) diff --git a/src/c3nav/site/templates/site/fragment_route.html b/src/c3nav/site/templates/site/fragment_route.html index da548964..59efc397 100644 --- a/src/c3nav/site/templates/site/fragment_route.html +++ b/src/c3nav/site/templates/site/fragment_route.html @@ -53,7 +53,6 @@ {% endif %} - {% endfor %} diff --git a/src/c3nav/site/templates/site/main.html b/src/c3nav/site/templates/site/main.html index 2b89ff30..95dea3bb 100644 --- a/src/c3nav/site/templates/site/main.html +++ b/src/c3nav/site/templates/site/main.html @@ -13,7 +13,7 @@ {% trans "Destination" as heading %} {% include 'site/fragment_location.html' with name='destination' location=destination heading=heading %} -
+ {% for name, includable in includables %} + + {% endfor %} + {% for name, excludable in excludables %} + + {% endfor %} +
+