add full_levels render option
This commit is contained in:
parent
5707b0c15c
commit
f9cea4dbbc
3 changed files with 24 additions and 3 deletions
|
@ -54,11 +54,14 @@ class Command(BaseCommand):
|
|||
help=_('levels to render, e.g. 0,1,2 or * for all levels (default)'))
|
||||
parser.add_argument('--permissions', default='0', type=self.permissions_value,
|
||||
help=_('permissions, e.g. 2,3 or * for all permissions or 0 for none (default)'))
|
||||
parser.add_argument('--full-levels', action='store_const', const=True, default=False,
|
||||
help=_('render all levels completely'))
|
||||
|
||||
def handle(self, *args, **options):
|
||||
(minx, miny), (maxx, maxy) = Source.max_bounds()
|
||||
for level in options['levels']:
|
||||
renderer = MapRenderer(level.pk, minx, miny, maxx, maxy, access_permissions=options['permissions'])
|
||||
renderer = MapRenderer(level.pk, minx, miny, maxx, maxy, access_permissions=options['permissions'],
|
||||
full_levels=options['full_levels'])
|
||||
|
||||
stl = renderer.render(STLEngine)
|
||||
data = stl.render()
|
||||
|
|
|
@ -223,6 +223,8 @@ class LevelRenderData:
|
|||
if not new_area.is_empty:
|
||||
new_geoms.restricted_spaces_outdoors[access_restriction] = new_area
|
||||
|
||||
new_geoms.pk = old_geoms.pk
|
||||
new_geoms.on_top_of_id = old_geoms.on_top_of_id
|
||||
new_geoms.default_height = old_geoms.default_height
|
||||
|
||||
new_geoms.build_mesh()
|
||||
|
@ -280,6 +282,8 @@ class LevelGeometries:
|
|||
self.restricted_spaces_outdoors = None
|
||||
self.affected_area = None
|
||||
|
||||
self.pk = None
|
||||
self.on_top_of_id = None
|
||||
self.default_height = None
|
||||
|
||||
@staticmethod
|
||||
|
@ -369,6 +373,8 @@ class LevelGeometries:
|
|||
geoms.walls = buildings_geom.difference(spaces_geom).difference(doors_geom)
|
||||
|
||||
# general level infos
|
||||
geoms.pk = level.pk
|
||||
geoms.on_top_of_id = level.on_top_of_id
|
||||
geoms.default_height = level.default_height
|
||||
|
||||
return geoms
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
from itertools import chain
|
||||
|
||||
from django.core.cache import cache
|
||||
from django.utils.functional import cached_property
|
||||
from shapely import prepared
|
||||
|
@ -10,7 +12,7 @@ from c3nav.mapdata.render.engines.base import FillAttribs, StrokeAttribs
|
|||
|
||||
|
||||
class MapRenderer:
|
||||
def __init__(self, level, minx, miny, maxx, maxy, scale=1, access_permissions=None):
|
||||
def __init__(self, level, minx, miny, maxx, maxy, scale=1, access_permissions=None, full_levels=False):
|
||||
self.level = level.pk if isinstance(level, Level) else level
|
||||
self.minx = minx
|
||||
self.miny = miny
|
||||
|
@ -18,6 +20,7 @@ class MapRenderer:
|
|||
self.maxy = maxy
|
||||
self.scale = scale
|
||||
self.access_permissions = set(access_permissions) if access_permissions else set()
|
||||
self.full_levels = full_levels
|
||||
|
||||
self.width = int(round((maxx - minx) * scale))
|
||||
self.height = int(round((maxy - miny) * scale))
|
||||
|
@ -71,7 +74,16 @@ class MapRenderer:
|
|||
|
||||
bbox = prepared.prep(self.bbox)
|
||||
|
||||
for geoms in self.level_render_data.levels:
|
||||
if self.full_levels:
|
||||
levels = tuple(chain(*(
|
||||
tuple(sublevel for sublevel in LevelRenderData.get(level.pk).levels
|
||||
if sublevel.pk == level.pk or sublevel.on_top_of_id == level.pk)
|
||||
for level in self.level_render_data.levels if level.on_top_of_id is None
|
||||
)))
|
||||
else:
|
||||
levels = self.level_render_data.levels
|
||||
|
||||
for geoms in levels:
|
||||
if not bbox.intersects(geoms.affected_area):
|
||||
continue
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue