improve rendering
This commit is contained in:
parent
cfd6f51978
commit
8f2548b172
2 changed files with 26 additions and 13 deletions
|
@ -113,24 +113,31 @@ class LevelGeometries():
|
|||
return cascaded_union(lineobstacles)
|
||||
|
||||
@cached_property
|
||||
def obstacles(self):
|
||||
def uncropped_obstacles(self):
|
||||
obstacles = [obstacle.geometry for obstacle in self.level.obstacles.filter(crop_to_level__isnull=True)]
|
||||
return cascaded_union(obstacles).intersection(self.mapped)
|
||||
|
||||
@cached_property
|
||||
def cropped_obstacles(self):
|
||||
levels_by_name = {}
|
||||
obstacles_by_crop_to_level = {}
|
||||
for obstacle in self.level.obstacles.all():
|
||||
level_name = None if obstacle.crop_to_level is None else obstacle.crop_to_level.name
|
||||
for obstacle in self.level.obstacles.filter(crop_to_level__isnull=False):
|
||||
level_name = obstacle.crop_to_level.name
|
||||
levels_by_name.setdefault(level_name, obstacle.crop_to_level)
|
||||
obstacles_by_crop_to_level.setdefault(level_name, []).append(obstacle.geometry)
|
||||
|
||||
all_obstacles = []
|
||||
for level_name, obstacles in obstacles_by_crop_to_level.items():
|
||||
obstacles = cascaded_union(obstacles)
|
||||
if level_name is not None:
|
||||
obstacles = obstacles.intersection(levels_by_name[level_name].geometries.mapped)
|
||||
obstacles = cascaded_union(obstacles).intersection(levels_by_name[level_name].geometries.mapped)
|
||||
all_obstacles.append(obstacles)
|
||||
all_obstacles.extend(self.lineobstacles)
|
||||
|
||||
return cascaded_union(all_obstacles).intersection(self.mapped)
|
||||
|
||||
@cached_property
|
||||
def obstacles(self):
|
||||
return cascaded_union([self.uncropped_obstacles, self.cropped_obstacles])
|
||||
|
||||
@cached_property
|
||||
def raw_doors(self):
|
||||
return cascaded_union([door.geometry for door in self.level.doors.all()]).intersection(self.mapped)
|
||||
|
|
|
@ -100,14 +100,15 @@ class LevelRenderer():
|
|||
svg = self.create_svg()
|
||||
contents = self.add_svg_content(svg)
|
||||
|
||||
MITRE = JOIN_STYLE.mitre
|
||||
if not self.level.intermediate:
|
||||
width, height = get_dimensions()
|
||||
holes = self.level.geometries.holes.buffer(0.1, join_style=JOIN_STYLE.mitre)
|
||||
holes = self.level.geometries.holes.buffer(0.1, join_style=MITRE)
|
||||
contents.append(self.polygon_svg(box(0, 0, width, height).difference(holes),
|
||||
fill_color='#000000'))
|
||||
|
||||
contents.append(self.polygon_svg(self.level.geometries.buildings_with_holes,
|
||||
fill_color=('#EBEBEB' if self.level.intermediate else '#D5D5D5')))
|
||||
fill_color='#D5D5D5'))
|
||||
|
||||
contents.append(self.polygon_svg(self.level.geometries.outsides_with_holes,
|
||||
fill_color='#DCE6DC'))
|
||||
|
@ -126,9 +127,9 @@ class LevelRenderer():
|
|||
fill_opacity=0.06))
|
||||
|
||||
if show_accessibles:
|
||||
main_geometry = self.level.geometries.accessible.buffer(-0.6, join_style=JOIN_STYLE.mitre)
|
||||
clear_geometry = self.level.geometries.accessible.buffer(-0.3, join_style=JOIN_STYLE.mitre)
|
||||
missing_geometry = clear_geometry.difference(main_geometry.buffer(0.31, join_style=JOIN_STYLE.mitre))
|
||||
main_geometry = self.level.geometries.accessible.buffer(-0.6, join_style=MITRE)
|
||||
clear_geometry = self.level.geometries.accessible.buffer(-0.3, join_style=MITRE)
|
||||
missing_geometry = clear_geometry.difference(main_geometry.buffer(0.31, join_style=MITRE))
|
||||
|
||||
contents.append(self.polygon_svg(clear_geometry,
|
||||
fill_color='#FFFF00',
|
||||
|
@ -150,7 +151,12 @@ class LevelRenderer():
|
|||
stroke_color='#3c3c3c',
|
||||
stroke_width=0.05))
|
||||
|
||||
contents.append(self.polygon_svg(self.level.geometries.obstacles,
|
||||
contents.append(self.polygon_svg(self.level.geometries.uncropped_obstacles,
|
||||
fill_color='#BDBDBD',
|
||||
stroke_color='#9E9E9E',
|
||||
stroke_width=0.05))
|
||||
|
||||
contents.append(self.polygon_svg(self.level.geometries.cropped_obstacles.buffer(-0.06, join_style=MITRE),
|
||||
fill_color='#BDBDBD',
|
||||
stroke_color='#9E9E9E',
|
||||
stroke_width=0.05))
|
||||
|
@ -219,7 +225,7 @@ class LevelRenderer():
|
|||
for level in higher:
|
||||
contents.append(self.polygon_svg(level.geometries.intermediate_shadows,
|
||||
fill_color='#000000',
|
||||
fill_opacity=0.05))
|
||||
fill_opacity=0.07))
|
||||
|
||||
for level in higher:
|
||||
self.add_svg_image(svg, 'file://'+get_render_path('level-%s.base.png' % level.name))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue