in render_full immediate levels now cast shadows

This commit is contained in:
Laura Klünder 2016-12-04 02:33:50 +01:00
parent a1ed7534d9
commit a54a85da3b
8 changed files with 54 additions and 17 deletions

View file

@ -1,10 +1,12 @@
from django.db import models
from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _
from shapely.geometry import CAP_STYLE
from shapely.geometry import JOIN_STYLE
from shapely.ops import cascaded_union
from c3nav.mapdata.models.base import MapItem
from c3nav.mapdata.utils import assert_multipolygon
class Level(MapItem):
@ -136,3 +138,30 @@ class LevelGeometries():
@cached_property
def doors(self):
return self.raw_doors.difference(self.areas)
def get_levelconnectors(self, to_level=None):
queryset = self.level.levelconnectors.prefetch_related('levels')
print(to_level)
if to_level is not None:
queryset = queryset.filter(levels=to_level)
for item in queryset:
print(item.levels)
return cascaded_union([levelconnector.geometry for levelconnector in queryset])
@cached_property
def levelconnectors(self):
return self.get_levelconnectors()
def intermediate_shadows(self, to_level=None):
rings = []
for polygon in assert_multipolygon(self.buildings):
rings.append(polygon.exterior)
rings.extend(polygon.interiors)
objects = []
levelconnectors = self.get_levelconnectors(to_level)
for ring in rings:
objects.append(ring.difference(levelconnectors))
lines = cascaded_union(objects)
return lines.buffer(0.1, cap_style=CAP_STYLE.flat, join_style=JOIN_STYLE.mitre)