コード例 #1
0
def test_orientation_simple():
    """Test the simple use of the orientation module."""
    # create a Room to assign different propeties by orientation.
    room = Room.from_box('ShoeBox', 5, 10, 3, 0, Point3D(0, 0, 3))

    # list of bcs properties to apply to faces of different orientations
    bcs = boundary_conditions
    boundaries = [bcs.outdoors, bcs.ground, bcs.outdoors, bcs.ground]
    ratios = [0.4, 0, 0.6, 0]

    # check that the inputs align with one another
    all_inputs = [boundaries, ratios]
    all_inputs, num_orient = check_matching_inputs(all_inputs)

    # assign proeprties based on orientation
    angles = angles_from_num_orient(num_orient)
    for face in room.faces:
        orient_i = face_orient_index(face, angles)
        if orient_i is not None:
            bc, ratio = inputs_by_index(orient_i, all_inputs)
            face.boundary_condition = bc
            if ratio != 0:
                face.apertures_by_ratio(ratio, 0.01)

    assert isinstance(room[1].boundary_condition, Outdoors)
    assert isinstance(room[2].boundary_condition, Ground)
    assert isinstance(room[3].boundary_condition, Outdoors)
    assert isinstance(room[4].boundary_condition, Ground)

    assert len(room[0].apertures) == 0
    assert len(room[1].apertures) == 1
    assert len(room[2].apertures) == 0
    assert len(room[3].apertures) == 1
    assert len(room[4].apertures) == 0
    assert len(room[5].apertures) == 0
    error_msg = 'Input _hb_objs must be a Room, Face, Aperture, Door, or Shade. Not {}.'

    # assign the schedules
    if len(_trans_sch) == 1:
        for obj in hb_objs:
            if isinstance(obj, Shade):
                obj.properties.energy.transmittance_schedule = _trans_sch[0]
            elif isinstance(obj, (Aperture, Face, Room, Door)):
                for shd in obj.shades:
                    shd.properties.energy.transmittance_schedule = _trans_sch[
                        0]
            else:
                raise TypeError(error_msg.format(type(obj)))
    else:  # assign schedules based on cardinal direction
        angles = angles_from_num_orient(len(_trans_sch))
        for obj in hb_objs:
            if isinstance(obj, (Aperture, Face, Door)):
                orient_i = face_orient_index(obj, angles)
                if orient_i is not None:
                    for shd in obj.shades:
                        shd.properties.energy.transmittance_schedule = _trans_sch[
                            orient_i]
            elif isinstance(obj, Shade):
                obj.properties.energy.transmittance_schedule = _trans_sch[0]
            elif isinstance(obj, Room):
                for shd in obj.shades:
                    shd.properties.energy.transmittance_schedule = _trans_sch[
                        0]
            else:
                raise TypeError(error_msg.format(type(obj)))