def test_color_room2d(): """Test ColorRoom2D.""" pts_1 = (Point3D(0, 0, 3), Point3D(10, 0, 3), Point3D(10, 10, 3), Point3D(0, 10, 3)) pts_2 = (Point3D(10, 0, 3), Point3D(20, 0, 3), Point3D(20, 10, 3), Point3D(10, 10, 3)) room2d_1 = Room2D('SouthZone', Face3D(pts_1), 3) room2d_2 = Room2D('NorthZone', Face3D(pts_2), 3) Room2D.solve_adjacency([room2d_1, room2d_2], 0.01) color_room1 = ColorRoom2D([room2d_1, room2d_2], 'display_name') color_room2 = ColorRoom2D([room2d_1, room2d_2], 'floor_area') assert len(color_room1.room_2ds) == len(color_room2.room_2ds) == 2 assert color_room1.attr_name == color_room1.attr_name_end == 'display_name' assert color_room2.attr_name == color_room2.attr_name_end == 'floor_area' assert color_room1.attributes == ('SouthZone', 'NorthZone') assert color_room2.attributes == ('100.0', '100.0') assert isinstance(color_room1.graphic_container, GraphicContainer) assert len(color_room1.attributes_unique) == \ len(color_room1.graphic_container.legend.segment_colors) == 2 assert len(color_room2.attributes_unique) == \ len(color_room2.graphic_container.legend.segment_colors) == 1 assert len(color_room1.floor_faces) == len(color_room2.floor_faces) == 2 assert isinstance(color_room1.min_point, Point3D) assert isinstance(color_room1.max_point, Point3D)
def test_group_by_air_boundary_adjacency(): """Test the Room2D group_by_air_boundary_adjacency method.""" pts_1 = (Point3D(0, 0, 3), Point3D(10, 0, 3), Point3D(10, 10, 3), Point3D(0, 10, 3)) pts_2 = (Point3D(10, 0, 3), Point3D(20, 0, 3), Point3D(20, 10, 3), Point3D(10, 10, 3)) pts_3 = (Point3D(10, 10, 3), Point3D(20, 10, 3), Point3D(20, 20, 3), Point3D(10, 20, 3)) room2d_1 = Room2D('SquareShoebox1', Face3D(pts_1), 3) room2d_2 = Room2D('SquareShoebox2', Face3D(pts_2), 3) room2d_3 = Room2D('SquareShoebox3', Face3D(pts_3), 3) adj_info = Room2D.solve_adjacency([room2d_1, room2d_2], 0.01) for room_pair in adj_info: for room_adj in room_pair: room, wall_i = room_adj air_bnd = list(room.air_boundaries) air_bnd[wall_i] = True room.air_boundaries = air_bnd all_rooms = [room2d_1, room2d_2, room2d_3] Room2D.solve_adjacency(all_rooms, 0.01) grouped_rooms = Room2D.group_by_air_boundary_adjacency(all_rooms) assert len(grouped_rooms) == 2 assert len(grouped_rooms[0]) == 2 assert len(grouped_rooms[1]) == 1
def test_room2d_solve_adjacency(): """Test the Room2D solve_adjacency method.""" pts_1 = (Point3D(0, 0, 3), Point3D(10, 0, 3), Point3D(10, 10, 3), Point3D(0, 10, 3)) pts_2 = (Point3D(10, 0, 3), Point3D(20, 0, 3), Point3D(20, 10, 3), Point3D(10, 10, 3)) room2d_1 = Room2D('SquareShoebox1', Face3D(pts_1), 3) room2d_2 = Room2D('SquareShoebox2', Face3D(pts_2), 3) Room2D.solve_adjacency([room2d_1, room2d_2], 0.01) assert isinstance(room2d_1.boundary_conditions[1], Surface) assert isinstance(room2d_2.boundary_conditions[3], Surface) assert room2d_1.boundary_conditions[1].boundary_condition_object == \ '{}..Face4'.format(room2d_2.identifier) assert room2d_2.boundary_conditions[3].boundary_condition_object == \ '{}..Face2'.format(room2d_1.identifier)
def test_group_by_adjacency(): """Test the Room2D group_by_adjacency method.""" pts_1 = (Point3D(0, 0, 3), Point3D(10, 0, 3), Point3D(10, 10, 3), Point3D(0, 10, 3)) pts_2 = (Point3D(10, 0, 3), Point3D(20, 0, 3), Point3D(20, 10, 3), Point3D(10, 10, 3)) pts_3 = (Point3D(10, 20, 3), Point3D(20, 20, 3), Point3D(20, 30, 3), Point3D(10, 30, 3)) room2d_1 = Room2D('SquareShoebox1', Face3D(pts_1), 3) room2d_2 = Room2D('SquareShoebox2', Face3D(pts_2), 3) room2d_3 = Room2D('SquareShoebox3', Face3D(pts_3), 3) Room2D.solve_adjacency([room2d_1, room2d_2], 0.01) all_rooms = [room2d_1, room2d_2, room2d_3] grouped_rooms = Room2D.group_by_adjacency(all_rooms) assert len(grouped_rooms) == 2 assert len(grouped_rooms[0]) == 2 assert len(grouped_rooms[1]) == 1
def test_room2d_intersect_adjacency(): """Test the Room2D intersect_adjacency method.""" pts_1 = (Point3D(0, 0, 3), Point3D(10, 0, 3), Point3D(10, 10, 3), Point3D(0, 10, 3)) pts_2 = (Point3D(10, 5, 2), Point3D(20, 5, 2), Point3D(20, 15, 2), Point3D(10, 15, 2)) room2d_1 = Room2D('SquareShoebox1', Face3D(pts_1), 3) room2d_2 = Room2D('SquareShoebox2', Face3D(pts_2), 3) room2d_1, room2d_2 = Room2D.intersect_adjacency([room2d_1, room2d_2], 0.01) assert len(room2d_1) == 5 assert len(room2d_2) == 5 Room2D.solve_adjacency([room2d_1, room2d_2], 0.01) assert isinstance(room2d_1.boundary_conditions[2], Surface) assert isinstance(room2d_2.boundary_conditions[4], Surface) assert room2d_1.boundary_conditions[2].boundary_condition_object == \ '{}..Face5'.format(room2d_2.identifier) assert room2d_2.boundary_conditions[4].boundary_condition_object == \ '{}..Face3'.format(room2d_1.identifier)
def test_solve_adjacency_aperture(): """Test the Room2D solve_adjacency method with an interior aperture.""" pts_1 = (Point3D(0, 0, 3), Point3D(10, 0, 3), Point3D(10, 10, 3), Point3D(0, 10, 3)) pts_2 = (Point3D(10, 0, 3), Point3D(20, 0, 3), Point3D(20, 10, 3), Point3D(10, 10, 3)) ashrae_base = SimpleWindowRatio(0.4) window_1 = (None, ashrae_base, None, None) window_2 = (None, None, None, ashrae_base) window_3 = (None, None, None, None) room2d_1 = Room2D('SquareShoebox1', Face3D(pts_1), 3, None, window_1) room2d_2 = Room2D('SquareShoebox2', Face3D(pts_2), 3, None, window_2) room2d_3 = Room2D('SquareShoebox3', Face3D(pts_2), 3, None, window_3) Room2D.solve_adjacency([room2d_1, room2d_2], 0.01) assert room2d_1.boundary_conditions[1].boundary_condition_object == \ '{}..Face4'.format(room2d_2.identifier) assert room2d_2.boundary_conditions[3].boundary_condition_object == \ '{}..Face2'.format(room2d_1.identifier) with pytest.raises(AssertionError): Room2D.solve_adjacency([room2d_1, room2d_3], 0.01)
def test_to_honeybee_missing_adjacency(): """Test the to_honeybee method with a missing adjacency.""" pts_1 = (Point3D(0, 0, 3), Point3D(10, 0, 3), Point3D(10, 10, 3), Point3D(0, 10, 3)) pts_2 = (Point3D(10, 0, 3), Point3D(20, 0, 3), Point3D(20, 10, 3), Point3D(10, 10, 3)) pts_3 = (Point3D(0, 20, 3), Point3D(20, 20, 3), Point3D(20, 30, 3), Point3D(0, 30, 3)) room2d_1 = Room2D('Office1', Face3D(pts_1), 3) room2d_2 = Room2D('Office2', Face3D(pts_2), 3) room2d_3 = Room2D('Office3', Face3D(pts_3), 3) story_big = Story('OfficeFloorBig', [room2d_3]) Room2D.solve_adjacency([room2d_1, room2d_2]) story = Story('OfficeFloor', [room2d_1]) story.set_outdoor_window_parameters(SimpleWindowRatio(0.4)) story.multiplier = 4 building = Building('OfficeBuilding', [story]) story_big.set_outdoor_window_parameters(SimpleWindowRatio(0.4)) story_big.multiplier = 4 building_big = Building('OfficeBuildingBig', [story_big]) model = Model('NewDevelopment', [building, building_big]) hb_models = model.to_honeybee('District', None, False, tolerance=0.01) assert len(hb_models) == 1 assert isinstance(hb_models[0], hb_model.Model)
def test_solve_adjacency_air_boundary(): """Test the Room2D solve_adjacency method with an air boundary.""" pts_1 = (Point3D(0, 0, 3), Point3D(10, 0, 3), Point3D(10, 10, 3), Point3D(0, 10, 3)) pts_2 = (Point3D(10, 0, 3), Point3D(20, 0, 3), Point3D(20, 10, 3), Point3D(10, 10, 3)) room2d_1 = Room2D('SquareShoebox1', Face3D(pts_1), 3) room2d_2 = Room2D('SquareShoebox2', Face3D(pts_2), 3) adj_info = Room2D.solve_adjacency([room2d_1, room2d_2], 0.01) for room_pair in adj_info: for room_adj in room_pair: room, wall_i = room_adj air_bnd = list(room.air_boundaries) air_bnd[wall_i] = True room.air_boundaries = air_bnd assert isinstance(room2d_1.boundary_conditions[1], Surface) assert isinstance(room2d_2.boundary_conditions[3], Surface) assert room2d_1.air_boundaries[1] assert room2d_2.air_boundaries[3] hb_room_1, hb_room_2 = room2d_1.to_honeybee()[0], room2d_2.to_honeybee()[0] assert isinstance(hb_room_1[2].type, AirBoundary) assert isinstance(hb_room_2[4].type, AirBoundary)
from dragonfly.room2d import Room2D except ImportError as e: raise ImportError('\nFailed to import dragonfly:\n\t{}'.format(e)) try: # import the core ladybug_rhino dependencies from ladybug_rhino.config import tolerance from ladybug_rhino.grasshopper import all_required_inputs except ImportError as e: raise ImportError('\nFailed to import ladybug_rhino:\n\t{}'.format(e)) if all_required_inputs(ghenv.Component) and _run: adj_room2ds = [room.duplicate() for room in _room2ds] # duplicate the initial objects # solve adjacency adj_info = Room2D.solve_adjacency(adj_room2ds, tolerance) # set adiabatic boundary conditions if requested if adiabatic_: for room_pair in adj_info: for room_adj in room_pair: room, wall_i = room_adj room.set_boundary_condition(wall_i, boundary_conditions.adiabatic) # set air boundary type if requested if air_boundary_: for room_pair in adj_info: for room_adj in room_pair: room, wall_i = room_adj room.set_air_boundary(wall_i)