diff --git a/src/c3nav/mapdata/management/commands/rendermap.py b/src/c3nav/mapdata/management/commands/rendermap.py index 8835d6e0..fa1dec78 100644 --- a/src/c3nav/mapdata/management/commands/rendermap.py +++ b/src/c3nav/mapdata/management/commands/rendermap.py @@ -58,6 +58,8 @@ class Command(BaseCommand): 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')) + parser.add_argument('--no-center', action='store_const', const=True, default=False, + help=_('do not center the output')) def handle(self, *args, **options): (minx, miny), (maxx, maxy) = Source.max_bounds() @@ -65,7 +67,7 @@ class Command(BaseCommand): renderer = MapRenderer(level.pk, minx, miny, maxx, maxy, access_permissions=options['permissions'], full_levels=options['full_levels']) - stl = renderer.render(get_engine(options['filetype'])) + stl = renderer.render(get_engine(options['filetype']), center=not options['no_center']) data = stl.render() filename = os.path.join(settings.RENDER_ROOT, 'level_%s_%s.%s' % (level.short_label, diff --git a/src/c3nav/mapdata/render/engines/base3d.py b/src/c3nav/mapdata/render/engines/base3d.py index f4056735..631d146a 100644 --- a/src/c3nav/mapdata/render/engines/base3d.py +++ b/src/c3nav/mapdata/render/engines/base3d.py @@ -11,13 +11,17 @@ from c3nav.mapdata.render.engines.base import FillAttribs, RenderEngine, StrokeA class Base3DEngine(RenderEngine): is_3d = True - def __init__(self, *args, **kwargs): + def __init__(self, *args, center=True, **kwargs): super().__init__(*args, **kwargs) self.vertices = [] self.np_scale = np.array((self.scale, self.scale, self.scale)) self.np_offset = np.array((-self.minx * self.scale, -self.miny * self.scale, 0)) + if center: + self.np_offset -= np.array(((self.minx - self.maxx) * self.scale / 2, + (self.miny - self.maxy) * self.scale / 2, + 0)) def _add_geometry(self, geometry, fill: Optional[FillAttribs], stroke: Optional[StrokeAttribs], **kwargs): if fill is not None: diff --git a/src/c3nav/mapdata/render/renderer.py b/src/c3nav/mapdata/render/renderer.py index 7bf535aa..ec4700f3 100644 --- a/src/c3nav/mapdata/render/renderer.py +++ b/src/c3nav/mapdata/render/renderer.py @@ -65,9 +65,9 @@ class MapRenderer: def cache_key(self): return self.update_cache_key + ':' + self.access_cache_key - def render(self, engine_cls): + def render(self, engine_cls, center=True): engine = engine_cls(self.width, self.height, self.minx, self.miny, - scale=self.scale, buffer=1, background='#DCDCDC') + scale=self.scale, buffer=1, background='#DCDCDC', center=center) # add no access restriction to “unlocked“ access restrictions so lookup gets easier unlocked_access_restrictions = self.unlocked_access_restrictions | set([None])