show geometries in editor… introducing the editor API

This commit is contained in:
Laura Klünder 2017-05-21 23:39:26 +02:00
parent 8c4540c656
commit 46dc1627e1
10 changed files with 167 additions and 73 deletions

View file

@ -57,18 +57,6 @@ class SectionViewSet(MapdataViewSet):
def geometrytypes(self, request):
return self.list_types(SECTION_MODELS)
@detail_route(methods=['get'])
def geometries(self, requests, pk=None):
section = self.get_object()
results = []
results.extend(section.buildings.all())
results.extend(section.holes.all())
for space in section.spaces.all():
results.append(space)
for door in section.doors.all():
results.append(door)
return Response([obj.to_geojson() for obj in results])
@detail_route(methods=['get'])
def svg(self, requests, pk=None):
section = self.get_object()
@ -89,18 +77,6 @@ class SpaceViewSet(MapdataViewSet):
def geometrytypes(self, request):
return self.list_types(SPACE_MODELS)
@detail_route(methods=['get'])
def geometries(self, requests, pk=None):
space = self.get_object()
results = chain(
space.stairs.all(),
space.areas.all(),
space.obstacles.all(),
space.lineobstacles.all(),
space.points.all(),
)
return Response([obj.to_geojson() for obj in results])
class DoorViewSet(MapdataViewSet):
""" Add ?geometry=1 to get geometries, add ?section=<id> to filter by section. """

View file

@ -17,6 +17,10 @@ class SectionGeometryMixin(GeometryMixin):
def get_geojson_properties(self) -> dict:
result = super().get_geojson_properties()
result['layer'] = getattr(self, 'level', 'base')
if hasattr(self, 'get_color'):
color = self.get_color()
if color:
result['color'] = color
return result
def _serialize(self, section=True, **kwargs):

View file

@ -24,6 +24,14 @@ class SpaceGeometryMixin(GeometryMixin):
result['space'] = self.space.id
return result
def get_geojson_properties(self) -> dict:
result = super().get_geojson_properties()
if hasattr(self, 'get_color'):
color = self.get_color()
if color:
result['color'] = color
return result
class Area(SpecificLocation, SpaceGeometryMixin, models.Model):
"""
@ -140,3 +148,13 @@ class Point(SpecificLocation, SpaceGeometryMixin, models.Model):
verbose_name = _('Point')
verbose_name_plural = _('Points')
default_related_name = 'points'
@property
def buffered_geometry(self):
return self.geometry.buffer(0.5)
def to_geojson(self):
result = super().to_geojson()
result['original_geometry'] = result['geometry']
result['geometry'] = format_geojson(mapping(self.buffered_geometry))
return result

View file

@ -63,7 +63,7 @@ class Section(SpecificLocation, EditorFormMixin, models.Model):
).intersection(space.geometry)
svg.add_geometry(obstacle_geometries, fill_color='#999999')
def render_svg(self):
def render_svg(self, effects=True, draw_spaces=None):
width, height = get_dimensions()
svg = SVGImage(width=width, height=height, scale=settings.RENDER_SCALE)
@ -120,8 +120,10 @@ class Section(SpecificLocation, EditorFormMixin, models.Model):
wall_geometry = building_geometries.difference(space_geometries['']).difference(door_geometries)
# draw wall shadow
wall_dilated_geometry = wall_geometry.buffer(0.7, join_style=JOIN_STYLE.mitre)
svg.add_geometry(wall_dilated_geometry, fill_color='#000000', opacity=0.1, filter='wallblur', clip_path=section_clip)
if effects:
wall_dilated_geometry = wall_geometry.buffer(0.7, join_style=JOIN_STYLE.mitre)
svg.add_geometry(wall_dilated_geometry, fill_color='#000000', opacity=0.1, filter='wallblur',
clip_path=section_clip)
for space in space_levels['']:
self._render_space_inventory(svg, space)