Skip to content

Commit

Permalink
fix(grouping): Use room-assigned story names when available
Browse files Browse the repository at this point in the history
And we also check to be sure that the level names do not collide with one another.
  • Loading branch information
chriswmackey committed Jun 26, 2024
1 parent 1d478be commit 165ccfc
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions honeybee_doe2/grouping.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,20 @@ def group_rooms_by_doe2_level(rooms, model_tolerance):
geometry and contain suggested names for the DOE-2 levels.
"""
# set up lists of the outputs to be populated
room_groups, level_geometries, level_names = [], [], []
room_groups, level_geometries, level_names, existing_levels = [], [], [], {}

# first group the rooms by floor height
grouped_rooms, _ = Room.group_by_floor_height(rooms, FLOOR_LEVEL_TOL)
for fi, room_group in enumerate(grouped_rooms):
# determine a base name for the level using the story assigned to the rooms
level_name = clean_doe2_string(room_group[0].story, RES_CHARS - 8) \
if room_group[0].story is not None else 'Level_{}'.format(fi)
if level_name in existing_levels:
existing_levels[level_name] += 1
level_name = level_name + str(existing_levels[level_name])
else:
existing_levels[level_name] = 1

# then, group the rooms by contiguous horizontal boundary
floor_geos = []
for room in room_group:
Expand All @@ -69,7 +78,7 @@ def group_rooms_by_doe2_level(rooms, model_tolerance):
if len(hor_bounds) == 0: # we will write the story with NO-SHAPE
room_groups.append(room_group)
level_geometries.append(None)
level_names.append('Level_{}'.format(fi))
level_names.append(level_name)
elif len(hor_bounds) == 1: # just one clean polygon for the level
flr_geo = hor_bounds[0]
flr_geo = flr_geo if flr_geo.normal.z >= 0 else flr_geo.flip()
Expand All @@ -78,7 +87,7 @@ def group_rooms_by_doe2_level(rooms, model_tolerance):
flr_geo = flr_geo.remove_colinear_vertices(tolerance=DOE2_TOLERANCE)
room_groups.append(room_group)
level_geometries.append(flr_geo)
level_names.append('Level_{}'.format(fi))
level_names.append(level_name)
else: # we need to figure out which Room belongs to which geometry
# first get a set of Point2Ds that are inside each room in plan
room_pts, z_axis = [], Vector3D(0, 0, 1)
Expand All @@ -103,7 +112,7 @@ def group_rooms_by_doe2_level(rooms, model_tolerance):
flr_rooms.append(room)
room_groups.append(flr_rooms)
level_geometries.append(flr_geo)
level_names.append('Level_{}_Section{}'.format(fi, si))
level_names.append('{}_Section{}'.format(level_name, si))

# return all of the outputs
return room_groups, level_geometries, level_names
Expand Down

0 comments on commit 165ccfc

Please sign in to comment.