show geometries in editor… introducing the editor API
This commit is contained in:
parent
8c4540c656
commit
46dc1627e1
10 changed files with 167 additions and 73 deletions
|
@ -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. """
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue