add option to include/exclude areas to UI
This commit is contained in:
parent
1c10ce443a
commit
91b9bc92b8
7 changed files with 70 additions and 23 deletions
|
@ -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():
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue