diff --git a/src/c3nav/mapdata/render/engines/base3d.py b/src/c3nav/mapdata/render/engines/base3d.py index b9be88b2..2c7f2516 100644 --- a/src/c3nav/mapdata/render/engines/base3d.py +++ b/src/c3nav/mapdata/render/engines/base3d.py @@ -1,9 +1,10 @@ from itertools import chain +from typing import Optional import numpy as np from c3nav.mapdata.render.data import HybridGeometry -from c3nav.mapdata.render.engines.base import RenderEngine +from c3nav.mapdata.render.engines.base import FillAttribs, RenderEngine, StrokeAttribs class Base3DEngine(RenderEngine): @@ -22,13 +23,13 @@ class Base3DEngine(RenderEngine): def _append_to_vertices(self, vertices, append=None): if append is not None: append = np.array(append, dtype=np.float32).flatten() - vertices = np.hstack(( + vertices = np.dstack(( vertices, - append.reshape(1, append.size).repeat(vertices.shape[0], 0) + append.reshape(1, append.size).repeat(vertices.shape[0]*3, 0).reshape((-1, 3, append.size)) )) return vertices def _place_geometry(self, geometry: HybridGeometry, append=None): faces = np.vstack(tuple(chain(geometry.faces, *geometry.add_faces.values()))) - vertices = faces.reshape(-1, 3) * self.np_scale + self.np_offset + vertices = faces * self.np_scale + self.np_offset return self._append_to_vertices(vertices, append).flatten() diff --git a/src/c3nav/mapdata/render/engines/opengl.py b/src/c3nav/mapdata/render/engines/opengl.py index ccda607a..95973f87 100644 --- a/src/c3nav/mapdata/render/engines/opengl.py +++ b/src/c3nav/mapdata/render/engines/opengl.py @@ -166,10 +166,10 @@ class OpenGLEngine(Base3DEngine): lines = unary_union(lines).buffer(width, cap_style=CAP_STYLE.flat, join_style=JOIN_STYLE.mitre) vertices, faces = triangulate_polygon(lines) - triangles = np.hstack((vertices[faces.flatten()], np.full((faces.size, 1), fill_value=altitude))) - vertices = np.vstack(triangles).astype(np.float32) * self.np_scale + self.np_offset + triangles = np.dstack((vertices[faces], np.full((faces.size, 1), fill_value=altitude).reshape((-1, 3, 1)))) + triangles = triangles.astype(np.float32) * self.np_scale + self.np_offset - return self._append_to_vertices(vertices, append).flatten() + return self._append_to_vertices(triangles, append).flatten() worker = OpenGLWorker()