STLEngine
This commit is contained in:
parent
8eab7cca96
commit
b18ea92a9b
4 changed files with 29 additions and 1 deletions
|
@ -2,6 +2,7 @@ from django.conf import settings
|
|||
from django.core import checks
|
||||
|
||||
from c3nav.mapdata.render.engines.svg import SVGEngine # noqa
|
||||
from c3nav.mapdata.render.engines.stl import STLEngine # noqa
|
||||
|
||||
|
||||
@checks.register()
|
||||
|
|
|
@ -16,6 +16,9 @@ class Base3DEngine(RenderEngine):
|
|||
self.np_scale = np.array((self.scale, self.scale, self.scale))
|
||||
self.np_offset = np.array((-self.minx * self.scale, -self.maxy * self.scale, 0))
|
||||
|
||||
def _add_geometry(self, geometry, fill: Optional[FillAttribs], stroke: Optional[StrokeAttribs], **kwargs):
|
||||
if fill is not None:
|
||||
self.vertices.append(self._place_geometry(geometry))
|
||||
|
||||
def _append_to_vertices(self, vertices, append=None):
|
||||
if append is not None:
|
||||
|
|
24
src/c3nav/mapdata/render/engines/stl.py
Normal file
24
src/c3nav/mapdata/render/engines/stl.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
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')
|
|
@ -4,7 +4,7 @@ from shapely import prepared
|
|||
from shapely.geometry import box
|
||||
|
||||
from c3nav.mapdata.cache import MapHistory
|
||||
from c3nav.mapdata.models import MapUpdate, Level
|
||||
from c3nav.mapdata.models import Level, MapUpdate
|
||||
from c3nav.mapdata.render.data import LevelRenderData, hybrid_union
|
||||
from c3nav.mapdata.render.engines.base import FillAttribs, StrokeAttribs
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue