Example #1
0
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)
Example #2
0
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
Example #3
0
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)
Example #4
0
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
Example #5
0
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)
Example #6
0
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)
Example #8
0
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)
Example #9
0
    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)