fix lookup table space_areas

This commit is contained in:
Laura Klünder 2017-08-05 15:16:00 +02:00
parent 31c4feca73
commit 3690bac467

View file

@ -130,7 +130,7 @@ class AltitudeArea(LevelGeometryMixin, models.Model):
# divide areas using stairs # divide areas using stairs
for stair in stairs: for stair in stairs:
for area in space_areas[stair.space]: for area in space_areas[stair.space]:
if stair.space not in area.spaces or not stair.intersects(area.geometry): if not stair.intersects(area.geometry):
continue continue
divided = assert_multipolygon(area.geometry.difference(stair.buffer(0.0001))) divided = assert_multipolygon(area.geometry.difference(stair.buffer(0.0001)))
@ -139,20 +139,23 @@ class AltitudeArea(LevelGeometryMixin, models.Model):
area.geometry = divided[0] area.geometry = divided[0]
if len(divided) == 2: if len(divided) == 2:
new_area = AltitudeArea(geometry=divided[1], level=level) new_area = AltitudeArea(geometry=divided[1], level=level)
new_area.spaces = [] new_area.spaces = set()
new_area.connected_to = [area] new_area.connected_to = [area]
area.connected_to.append(new_area) area.connected_to.append(new_area)
areas.append(new_area) areas.append(new_area)
original_spaces = area.spaces
if len(area.spaces) == 1:
new_area.spaces = area.spaces
space_areas[next(iter(area.spaces))].append(new_area)
else:
for subarea in (area, new_area): for subarea in (area, new_area):
if len(subarea.spaces) > 1:
spaces_before = subarea.spaces spaces_before = subarea.spaces
subarea.spaces = set(space for space in area.spaces subarea.spaces = set(space for space in original_spaces
if spaces[space].geometry.intersects(subarea.geometry)) if spaces[space].geometry.intersects(subarea.geometry))
for space in spaces_before-subarea.spaces: for space in spaces_before-subarea.spaces:
space_areas[space].remove(subarea) space_areas[space].remove(subarea)
for space in subarea.spaces-spaces_before: for space in subarea.spaces-spaces_before:
space_areas[space].append(subarea) space_areas[space].append(subarea)
break break
all_areas.extend(areas) all_areas.extend(areas)