add option to center 3d exports and enable it by default

This commit is contained in:
Laura Klünder 2017-11-14 13:40:19 +01:00
parent 7e206d9a0a
commit ae8de940b8
3 changed files with 10 additions and 4 deletions

View file

@ -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,

View file

@ -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:

View file

@ -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])