team-3/src/c3nav/mapdata/render/engines/stl.py
Laura Klünder b18ea92a9b STLEngine
2017-11-09 21:00:20 +01:00

24 lines
929 B
Python

import numpy as np
from c3nav.mapdata.render.engines.base3d import Base3DEngine
class STLEngine(Base3DEngine):
facet_template = (b' facet normal %f %f %f\n'
b' outer loop\n'
b' vertex %f %f %f\n'
b' vertex %f %f %f\n'
b' vertex %f %f %f\n'
b' endloop\n'
b' endfacet')
def _create_facet(self, facet) -> bytes:
return self.facet_template % tuple(facet.flatten())
def render(self) -> bytes:
facets = np.vstack(self.vertices)
facets = np.hstack((np.cross(facets[:, 1]-facets[:, 0], facets[:, 2]-facets[:, 1]).reshape((-1, 1, 3))*1e10,
facets))
return (b'solid c3nav_export\n' +
b'\n'.join((self._create_facet(facet) for facet in facets)) +
b'\nendsolid c3nav_export\n')