예제 #1
0
def test_to_from_dict_with_states():
    """Test the Door from_dict method with radiance properties."""
    dr = Door.from_vertices('front_door',
                            [[0, 0, 0], [10, 0, 0], [10, 0, 10], [0, 0, 10]])
    shd1 = StateGeometry.from_vertices(
        'wall_overhang1', [[0, 0, 10], [10, 0, 10], [10, 2, 10], [0, 2, 10]])
    shd2 = StateGeometry.from_vertices(
        'wall_overhang2', [[0, 0, 5], [10, 0, 5], [10, 2, 5], [0, 2, 5]])

    ecglass1 = Glass.from_single_transmittance('ElectrochromicState1', 0.4)
    ecglass2 = Glass.from_single_transmittance('ElectrochromicState2', 0.27)
    ecglass3 = Glass.from_single_transmittance('ElectrochromicState3', 0.14)
    ecglass4 = Glass.from_single_transmittance('ElectrochromicState4', 0.01)

    tint1 = RadianceSubFaceState(ecglass1)
    tint2 = RadianceSubFaceState(ecglass2)
    tint3 = RadianceSubFaceState(ecglass3, [shd1])
    tint4 = RadianceSubFaceState(ecglass4, [shd1.duplicate(), shd2])
    states = (tint1, tint2, tint3, tint4)

    dr.properties.radiance.dynamic_group_identifier = 'ElectrochromicDoor1'
    dr.properties.radiance.states = states

    drd = dr.to_dict()
    new_door = Door.from_dict(drd)
    assert new_door.properties.radiance.dynamic_group_identifier == \
        dr.properties.radiance.dynamic_group_identifier
    state_ids1 = [state.modifier for state in states]
    state_ids2 = [
        state.modifier for state in new_door.properties.radiance.states
    ]
    assert state_ids1 == state_ids2
    assert new_door.to_dict() == drd
예제 #2
0
def test_to_from_dict_with_states():
    """Test the Shade from_dict method with radiance properties."""
    pts = (Point3D(0, 0, 0), Point3D(0, 0, 3), Point3D(1, 0,
                                                       3), Point3D(1, 0, 0))
    shd = Shade('TreeTrunk', Face3D(pts))
    shd1 = StateGeometry.from_vertices(
        'tree_foliage1', [[0, 0, 5], [2, 0, 5], [2, 2, 5], [0, 2, 5]])
    shd2 = StateGeometry.from_vertices(
        'tree_foliage2', [[0, 0, 5], [-2, 0, 5], [-2, 2, 5], [0, 2, 5]])

    trans1 = Glass.from_single_transmittance('TreeTrans1', 0.5)
    trans2 = Glass.from_single_transmittance('TreeTrans2', 0.27)
    trans3 = Glass.from_single_transmittance('TreeTrans3', 0.14)
    trans4 = Glass.from_single_transmittance('TreeTrans4', 0.01)

    tr1 = RadianceShadeState(trans1)
    tr2 = RadianceShadeState(trans2)
    tr3 = RadianceShadeState(trans3, [shd1])
    tr4 = RadianceShadeState(trans4, [shd1.duplicate(), shd2])
    states = (tr1, tr2, tr3, tr4)

    shd.properties.radiance.dynamic_group_identifier = 'DeciduousTrees'
    shd.properties.radiance.states = states

    ad = shd.to_dict()
    new_shade = Shade.from_dict(ad)
    assert new_shade.properties.radiance.dynamic_group_identifier == \
        shd.properties.radiance.dynamic_group_identifier
    state_ids1 = [state.modifier for state in states]
    state_ids2 = [
        state.modifier for state in new_shade.properties.radiance.states
    ]
    assert state_ids1 == state_ids2
    assert new_shade.to_dict() == ad
예제 #3
0
def test_to_from_dict_with_states():
    """Test the Aperture from_dict method with radiance properties."""
    ap = Aperture.from_vertices(
        'wall_aperture', [[0, 0, 0], [10, 0, 0], [10, 0, 10], [0, 0, 10]])
    shd1 = StateGeometry.from_vertices(
        'wall_overhang1', [[0, 0, 10], [10, 0, 10], [10, 2, 10], [0, 2, 10]])
    shd2 = StateGeometry.from_vertices(
        'wall_overhang2', [[0, 0, 5], [10, 0, 5], [10, 2, 5], [0, 2, 5]])

    ecglass1 = Glass.from_single_transmittance('ElectrochromicState1', 0.4)
    ecglass2 = Glass.from_single_transmittance('ElectrochromicState2', 0.27)
    ecglass3 = Glass.from_single_transmittance('ElectrochromicState3', 0.14)
    ecglass4 = Glass.from_single_transmittance('ElectrochromicState4', 0.01)

    tint1 = RadianceSubFaceState(ecglass1)
    tint2 = RadianceSubFaceState(ecglass2)
    tint3 = RadianceSubFaceState(ecglass3, [shd1])
    tint4 = RadianceSubFaceState(ecglass4, [shd1.duplicate(), shd2])
    states = (tint1, tint2, tint3, tint4)

    ap.properties.radiance.dynamic_group_identifier = 'ElectrochromicWindow1'
    ap.properties.radiance.states = states
    tint4.gen_geos_from_tmtx_thickness(0.05)

    ad = ap.to_dict()
    new_aperture = Aperture.from_dict(ad)
    assert new_aperture.properties.radiance.dynamic_group_identifier == \
        ap.properties.radiance.dynamic_group_identifier
    state_ids1 = [state.modifier for state in states]
    state_ids2 = [
        state.modifier for state in new_aperture.properties.radiance.states
    ]
    assert state_ids1 == state_ids2
    assert new_aperture.to_dict() == ad
예제 #4
0
def test_assign_values():
    gl = Glass('test_glass', 0.6, 0.7, 0.8, 1.52)
    assert gl.r_transmissivity == 0.6
    assert gl.g_transmissivity == 0.7
    assert gl.b_transmissivity == 0.8
    assert gl.refraction_index == 1.52
    assert gl.to_radiance(
        minimal=True) == 'void glass test_glass 0 0 4 0.6 0.7 0.8 1.52'
예제 #5
0
def test_glass():
    gl = Glass('test_glass')
    assert gl.r_transmissivity == 0
    assert gl.g_transmissivity == 0
    assert gl.b_transmissivity == 0
    assert gl.refraction_index is None
    assert gl.to_radiance(
        minimal=True) == 'void glass test_glass 0 0 3 0.0 0.0 0.0'
예제 #6
0
def test_to_from_dict():
    """Test the Model to_dict and from_dict method with a single zone model."""
    room = Room.from_box('Tiny_House_Room', 5, 10, 3)

    dark_floor = Plastic.from_single_reflectance('DarkFloor', 0.1)
    room[0].properties.radiance.modifier = dark_floor

    south_face = room[3]
    south_face.apertures_by_ratio(0.4, 0.01)
    south_face.apertures[0].overhang(0.5, indoor=False)
    south_face.apertures[0].overhang(0.5, indoor=True)
    south_face.apertures[0].move_shades(Vector3D(0, 0, -0.5))
    light_shelf_out = Plastic.from_single_reflectance('OutdoorLightShelf', 0.5)
    light_shelf_in = Plastic.from_single_reflectance('IndoorLightShelf', 0.7)
    south_face.apertures[0].shades[0].properties.radiance.modifier = light_shelf_out
    south_face.apertures[0].shades[1].properties.radiance.modifier = light_shelf_in

    north_face = room[1]
    door_verts = [Point3D(2, 10, 0.1), Point3D(1, 10, 0.1),
                  Point3D(1, 10, 2.5), Point3D(2, 10, 2.5)]
    door = Door('FrontDoor', Face3D(door_verts))
    north_face.add_door(door)

    aperture_verts = [Point3D(4.5, 10, 1), Point3D(2.5, 10, 1),
                      Point3D(2.5, 10, 2.5), Point3D(4.5, 10, 2.5)]
    aperture = Aperture('FrontAperture', Face3D(aperture_verts))
    aperture.is_operable = True
    triple_pane = Glass.from_single_transmittance('CustomTriplePane', 0.3)
    aperture.properties.radiance.modifier = triple_pane
    north_face.add_aperture(aperture)

    tree_canopy_geo = Face3D.from_regular_polygon(
        6, 2, Plane(Vector3D(0, 0, 1), Point3D(5, -3, 4)))
    tree_canopy = Shade('TreeCanopy', tree_canopy_geo)
    tree_trans = Glass.from_single_transmittance('TreeTransmittance', 0.75)
    tree_canopy.properties.radiance.modifier = tree_trans

    model = Model('TinyHouse', [room], orphaned_shades=[tree_canopy])
    model_dict = model.to_dict(included_prop=['radiance'])
    new_model = Model.from_dict(model_dict)
    assert model_dict == new_model.to_dict(included_prop=['radiance'])

    assert dark_floor in new_model.properties.radiance.modifiers
    assert new_model.rooms[0][0].properties.radiance.modifier == dark_floor
    assert new_model.rooms[0][3].apertures[0].indoor_shades[0].properties.radiance.modifier == light_shelf_in
    assert new_model.rooms[0][3].apertures[0].outdoor_shades[0].properties.radiance.modifier == light_shelf_out
    assert triple_pane in new_model.properties.radiance.modifiers
    assert new_model.rooms[0][1].apertures[0].properties.radiance.modifier == triple_pane
    assert new_model.rooms[0][1].apertures[0].is_operable
    assert len(new_model.orphaned_shades) == 1

    assert new_model.rooms[0][0].type == face_types.floor
    assert new_model.rooms[0][1].type == face_types.wall
    assert isinstance(new_model.rooms[0][0].boundary_condition, Ground)
    assert isinstance(new_model.rooms[0][1].boundary_condition, Outdoors)
    assert new_model.orphaned_shades[0].properties.radiance.modifier == tree_trans
예제 #7
0
def test_material_equivalency():
    """Test the equality of a material to another Glass."""
    gl_1 = Glass('test_glass', 0.6, 0.7, 0.8, 1.52)
    gl_2 = gl_1.duplicate()
    gl_3 = Glass('test_glass2', 0.8, 0.7, 0.8, 1.52)

    assert gl_1 is gl_1
    assert gl_1 is not gl_2
    assert gl_1 == gl_2
    assert gl_1 != gl_3
    collection = [gl_1, gl_2, gl_3]
    assert len(set(collection)) == 2
예제 #8
0
def test_dict_to_object_modifier_set():
    """Test the dict_to_object method with Modifier objects."""
    default_set = ModifierSet('Tinted_Window_Set')
    glass_material = Glass.from_single_transmittance('test_glass', 0.6)
    glass_material_dark = Glass.from_single_transmittance(
        'test_glass_dark', 0.3)
    default_set.aperture_set.exterior_modifier = glass_material
    default_set.aperture_set.skylight_modifier = glass_material_dark

    mod_set_dict = default_set.to_dict()
    new_mod_set = dict_to_object(mod_set_dict)
    assert isinstance(new_mod_set, ModifierSet)
예제 #9
0
def test_material_lockability():
    """Test the lockability of Glass."""
    gl = Glass('test_glass', 0.6, 0.7, 0.8, 1.52)
    gl.r_transmissivity = 0.5
    gl.lock()
    with pytest.raises(AttributeError):
        gl.r_transmissivity = 0.7
    gl.unlock()
    gl.r_transmissivity = 0.7
예제 #10
0
def test_set_states():
    """Test the setting of states on an Aperture."""
    pts = (Point3D(0, 0, 0), Point3D(0, 0, 3), Point3D(1, 0,
                                                       3), Point3D(1, 0, 0))
    ap = Aperture('TestWindow', Face3D(pts))
    shd1 = StateGeometry.from_vertices(
        'wall_overhang1', [[0, 0, 10], [10, 0, 10], [10, 2, 10], [0, 2, 10]])
    shd2 = StateGeometry.from_vertices(
        'wall_overhang2', [[0, 0, 5], [10, 0, 5], [10, 2, 5], [0, 2, 5]])

    ecglass1 = Glass.from_single_transmittance('ElectrochromicState1', 0.4)
    ecglass2 = Glass.from_single_transmittance('ElectrochromicState2', 0.27)
    ecglass3 = Glass.from_single_transmittance('ElectrochromicState3', 0.14)
    ecglass4 = Glass.from_single_transmittance('ElectrochromicState4', 0.01)

    tint1 = RadianceSubFaceState(ecglass1)
    tint2 = RadianceSubFaceState(ecglass2)
    tint3 = RadianceSubFaceState(ecglass3)
    tint4 = RadianceSubFaceState(ecglass4)
    states = (tint1, tint2, tint3, tint4)

    tint3.add_shade(shd1)
    with pytest.raises(AssertionError):
        tint4.add_shades([shd1, shd2])
    tint4.add_shades([shd1.duplicate(), shd2])

    with pytest.raises(AssertionError):
        tint1.gen_geos_from_tmtx_thickness(0.05)
    with pytest.raises(AssertionError):
        tint1.gen_geo_from_vmtx_offset(0.1)
    with pytest.raises(AssertionError):
        tint1.gen_geo_from_dmtx_offset(0.1)

    with pytest.raises(AssertionError):
        ap.properties.radiance.states = states
    ap.properties.radiance.dynamic_group_identifier = 'ElectrochromicWindow1'
    ap.properties.radiance.states = states

    for state in ap.properties.radiance.states:
        assert state.parent.identifier == 'TestWindow'

    new_ap = ap.duplicate()

    assert ap.properties.radiance.dynamic_group_identifier == \
        new_ap.properties.radiance.dynamic_group_identifier == 'ElectrochromicWindow1'
    assert len(new_ap.properties.radiance.states) == 4
    for i, state in enumerate(new_ap.properties.radiance.states):
        assert state.modifier.identifier == 'ElectrochromicState{}'.format(i +
                                                                           1)
    assert len(new_ap.properties.radiance.states[2].shades) == 1
    assert len(new_ap.properties.radiance.states[3].shades) == 2
예제 #11
0
def shade_state_abridged_tree_foliage(directory):
    shd1 = StateGeometry.from_vertices(
        'tree_foliage1', [[0, 0, 5], [2, 0, 5], [2, 2, 5], [0, 2, 5]])
    shd2 = StateGeometry.from_vertices(
        'tree_foliage2', [[0, 0, 5], [-2, 0, 5], [-2, 2, 5], [0, 2, 5]])
    trans1 = Glass.from_single_transmittance('TreeTrans1', 0.5)
    trans2 = Glass.from_single_transmittance('TreeTrans2', 0.27)
    shd1.modifier = trans1
    shd2.modifier = trans2
    tr4 = RadianceShadeState(shades=[shd1, shd2])

    dest_file = os.path.join(directory, 'shade_state_abridged_tree_foliage.json')
    with open(dest_file, 'w') as fp:
        json.dump(tr4.to_dict(abridged=True), fp, indent=4)
예제 #12
0
def model_complete_multiroom_radiance(directory):
    triple_pane = Glass.from_single_transmittance('Triple_Pane_0.35', 0.35)
    first_floor = Room.from_box('First_Floor', 10, 10, 3, origin=Point3D(0, 0, 0))
    second_floor = Room.from_box('Second_Floor', 10, 10, 3, origin=Point3D(0, 0, 3))
    for face in first_floor[1:5]:
        face.apertures_by_ratio(0.2, 0.01)
        face.apertures[0].properties.radiance.modifier = triple_pane
    for face in second_floor[1:5]:
        face.apertures_by_ratio(0.2, 0.01)

    pts_1 = [Point3D(0, 0, 6), Point3D(0, 10, 6), Point3D(10, 10, 6), Point3D(10, 0, 6)]
    pts_2 = [Point3D(0, 0, 6), Point3D(5, 0, 9), Point3D(5, 10, 9), Point3D(0, 10, 6)]
    pts_3 = [Point3D(10, 0, 6), Point3D(10, 10, 6), Point3D(5, 10, 9), Point3D(5, 0, 9)]
    pts_4 = [Point3D(0, 0, 6), Point3D(10, 0, 6), Point3D(5, 0, 9)]
    pts_5 = [Point3D(10, 10, 6), Point3D(0, 10, 6), Point3D(5, 10, 9)]
    face_1 = Face('AtticFace1', Face3D(pts_1))
    face_2 = Face('AtticFace2', Face3D(pts_2))
    face_3 = Face('AtticFace3', Face3D(pts_3))
    face_4 = Face('AtticFace4', Face3D(pts_4))
    face_5 = Face('AtticFace5', Face3D(pts_5))
    attic = Room('Attic', [face_1, face_2, face_3, face_4, face_5], 0.01, 1)

    mod_set = ModifierSet('Attic_Modifier_Set')
    polyiso = Plastic.from_single_reflectance('PolyIso', 0.45)
    mod_set.roof_ceiling_set.exterior_modifier = polyiso
    attic.properties.radiance.modifier_set = mod_set

    Room.solve_adjacency([first_floor, second_floor, attic], 0.01)

    model = Model('Multi_Room_Radiance_House', [first_floor, second_floor, attic])

    dest_file = os.path.join(directory, 'model_complete_multiroom_radiance.json')
    with open(dest_file, 'w') as fp:
        json.dump(model.to_dict(), fp, indent=4)
예제 #13
0
def test_check_duplicate_modifier_identifiers():
    """Test the check_duplicate_modifier_identifiers method."""
    room = Room.from_box('Tiny_House_Zone', 5, 10, 3)

    high_ref_ceil = Plastic.from_single_reflectance('CustomModifier', 0.9)
    room[-1].properties.radiance.modifier = high_ref_ceil

    north_face = room[1]
    aperture_verts = [Point3D(4.5, 10, 1), Point3D(2.5, 10, 1),
                      Point3D(2.5, 10, 2.5), Point3D(4.5, 10, 2.5)]
    aperture = Aperture('Front_Aperture', Face3D(aperture_verts))
    aperture.is_operable = True
    triple_pane = Glass.from_single_transmittance('CustomTriplePane', 0.3)
    aperture.properties.radiance.modifier = triple_pane
    north_face.add_aperture(aperture)

    model = Model('Tiny_House', [room])

    assert model.properties.radiance.check_duplicate_modifier_identifiers(False) == ''
    triple_pane.unlock()
    triple_pane.identifier = 'CustomModifier'
    triple_pane.lock()
    assert model.properties.radiance.check_duplicate_modifier_identifiers(False) != ''
    with pytest.raises(ValueError):
        model.properties.radiance.check_duplicate_modifier_identifiers(True)
예제 #14
0
def aperture_state_abridged_electrochromic(directory):
    ecglass4 = Glass.from_single_transmittance('ElectrochromicGlass4', 0.01)
    tint4 = RadianceSubFaceState(ecglass4)

    dest_file = os.path.join(directory, 'aperture_state_abridged_electrochromic.json')
    with open(dest_file, 'w') as fp:
        json.dump(tint4.to_dict(abridged=True), fp, indent=4)
예제 #15
0
def test_duplicate():
    """Test what happens to radiance properties when duplicating a Shade."""
    verts = [
        Point3D(0, 0, 3),
        Point3D(1, 0, 3),
        Point3D(1, 1, 3),
        Point3D(0, 1, 3)
    ]
    foliage = Glass.from_single_transmittance('Foliage', 0.2)
    shade_original = Shade('tree', Face3D(verts))
    shade_dup_1 = shade_original.duplicate()

    assert shade_original.properties.radiance.host is shade_original
    assert shade_dup_1.properties.radiance.host is shade_dup_1
    assert shade_original.properties.radiance.host is not shade_dup_1.properties.radiance.host

    assert shade_original.properties.radiance.modifier == \
        shade_dup_1.properties.radiance.modifier
    shade_dup_1.properties.radiance.modifier = foliage
    assert shade_original.properties.radiance.modifier != \
        shade_dup_1.properties.radiance.modifier

    shade_dup_2 = shade_dup_1.duplicate()

    assert shade_dup_1.properties.radiance.modifier == \
        shade_dup_2.properties.radiance.modifier
    shade_dup_2.properties.radiance.modifier = None
    assert shade_dup_1.properties.radiance.modifier != \
        shade_dup_2.properties.radiance.modifier
예제 #16
0
def test_duplicate():
    """Test what happens to radiance properties when duplicating a Aperture."""
    verts = [
        Point3D(0, 0, 0),
        Point3D(10, 0, 0),
        Point3D(10, 0, 10),
        Point3D(0, 0, 10)
    ]
    triple_pane = Glass.from_single_transmittance('TriplePane', 0.45)
    ap_original = Aperture.from_vertices('wall_aper', Face3D(verts))
    ap_dup_1 = ap_original.duplicate()

    assert ap_original.properties.radiance.host is ap_original
    assert ap_dup_1.properties.radiance.host is ap_dup_1
    assert ap_original.properties.radiance.host is not ap_dup_1.properties.radiance.host

    assert ap_original.properties.radiance.modifier == \
        ap_dup_1.properties.radiance.modifier
    ap_dup_1.properties.radiance.modifier = triple_pane
    assert ap_original.properties.radiance.modifier != \
        ap_dup_1.properties.radiance.modifier

    ap_dup_2 = ap_dup_1.duplicate()

    assert ap_dup_1.properties.radiance.modifier == \
        ap_dup_2.properties.radiance.modifier
    ap_dup_2.properties.radiance.modifier = None
    assert ap_dup_1.properties.radiance.modifier != \
        ap_dup_2.properties.radiance.modifier
예제 #17
0
 def to_radiance_visible(self):
     """Honeybee Radiance material with the visible transmittance."""
     try:
         from honeybee_radiance.modifier.material import Glass
         from honeybee_radiance.modifier.material import Trans
     except ImportError as e:
         raise ImportError(
             'honeybee_radiance library must be installed to use '
             'to_radiance_visible() method. {}'.format(e))
     diffusing = False
     trans = 1
     for mat in self.materials:
         if isinstance(mat, EnergyWindowMaterialSimpleGlazSys):
             trans *= mat.vt
         elif isinstance(mat, EnergyWindowMaterialGlazing):
             trans *= mat.visible_transmittance
             diffusing = True if mat.solar_diffusing is True else False
     if not diffusing:
         return Glass.from_single_transmittance(
             clean_rad_string(self.identifier), trans)
     else:
         try:
             ref = self.materials[-1].solar_reflectance_back
         except AttributeError:
             ref = self.materials[-1].solar_reflectance
         return Trans.from_single_reflectance(clean_rad_string(
             self.identifier),
                                              rgb_reflectance=ref,
                                              transmitted_diff=trans,
                                              transmitted_spec=0)
예제 #18
0
def test_from_dict_w_modifier():
    glass_mod = {
        "identifier": "test_glass_mod",
        "type": "glass",
        "r_transmissivity": 0.4,
        "g_transmissivity": 0.5,
        "b_transmissivity": 0.6,
        "refraction_index": None,
        "modifier": None,
        "dependencies": []
    }

    glass_dict = {
        "identifier": "test_glass",
        "type": "glass",
        "r_transmissivity": 0.1,
        "g_transmissivity": 0.2,
        "b_transmissivity": 0.3,
        "refraction_index": 1.52,
        "modifier": glass_mod,
        "dependencies": []
    }

    gg = Glass.from_dict(glass_dict)
    assert gg.to_radiance(minimal=True, include_modifier=False) == \
        'test_glass_mod glass test_glass 0 0 4 0.1 0.2 0.3 1.52'
    assert gg.modifier.to_radiance(minimal=True) == \
        'void glass test_glass_mod 0 0 3 0.4 0.5 0.6'
예제 #19
0
def test_from_single_value():
    gl = Glass.from_single_transmissivity('gl_test', 0.6)
    assert gl.r_transmissivity == 0.6
    assert gl.g_transmissivity == 0.6
    assert gl.b_transmissivity == 0.6

    assert round(gl.average_transmissivity, 2) == 0.6
예제 #20
0
def test_to_dict_single_zone():
    """Test the Model to_dict method with a single zone model."""
    room = Room.from_box('Tiny_House_Zone', 5, 10, 3)

    dark_floor = Plastic.from_single_reflectance('DarkFloor', 0.1)
    room[0].properties.radiance.modifier = dark_floor

    south_face = room[3]
    south_face.apertures_by_ratio(0.4, 0.01)
    south_face.apertures[0].overhang(0.5, indoor=False)
    south_face.apertures[0].overhang(0.5, indoor=True)
    south_face.move_shades(Vector3D(0, 0, -0.5))
    light_shelf_out = Plastic.from_single_reflectance('OutdoorLightShelf', 0.5)
    light_shelf_in = Plastic.from_single_reflectance('IndoorLightShelf', 0.7)
    south_face.apertures[0].outdoor_shades[0].properties.radiance.modifier = light_shelf_out
    south_face.apertures[0].indoor_shades[0].properties.radiance.modifier = light_shelf_in

    north_face = room[1]
    north_face.overhang(0.25, indoor=False)
    door_verts = [Point3D(2, 10, 0.1), Point3D(1, 10, 0.1),
                  Point3D(1, 10, 2.5), Point3D(2, 10, 2.5)]
    door = Door('Front_Door', Face3D(door_verts))
    north_face.add_door(door)

    aperture_verts = [Point3D(4.5, 10, 1), Point3D(2.5, 10, 1),
                      Point3D(2.5, 10, 2.5), Point3D(4.5, 10, 2.5)]
    aperture = Aperture('Front_Aperture', Face3D(aperture_verts))
    triple_pane = Glass.from_single_transmittance('CustomTriplePane', 0.3)
    aperture.properties.radiance.modifier = triple_pane
    north_face.add_aperture(aperture)

    tree_canopy_geo = Face3D.from_regular_polygon(
        6, 2, Plane(Vector3D(0, 0, 1), Point3D(5, -3, 4)))
    tree_canopy = Shade('Tree_Canopy', tree_canopy_geo)

    table_geo = Face3D.from_rectangle(2, 2, Plane(o=Point3D(1.5, 4, 1)))
    table = Shade('Table', table_geo)
    room.add_indoor_shade(table)

    model = Model('Tiny_House', [room], orphaned_shades=[tree_canopy])

    model_dict = model.to_dict()

    assert 'radiance' in model_dict['properties']
    assert 'modifiers' in model_dict['properties']['radiance']
    assert 'modifier_sets' in model_dict['properties']['radiance']

    assert len(model_dict['properties']['radiance']['modifiers']) == 5
    assert len(model_dict['properties']['radiance']['modifier_sets']) == 0

    assert model_dict['rooms'][0]['faces'][0]['properties']['radiance']['modifier'] == \
        dark_floor.identifier
    south_ap_dict = model_dict['rooms'][0]['faces'][3]['apertures'][0]
    assert south_ap_dict['outdoor_shades'][0]['properties']['radiance']['modifier'] == \
        light_shelf_out.identifier
    assert south_ap_dict['indoor_shades'][0]['properties']['radiance']['modifier'] == \
        light_shelf_in.identifier
    assert model_dict['rooms'][0]['faces'][1]['apertures'][0]['properties']['radiance']['modifier'] == \
        triple_pane.identifier
예제 #21
0
def test_writer_to_rad():
    """Test the Model to.rad method."""
    room = Room.from_box('Tiny_House_Zone', 5, 10, 3)

    dark_floor = Plastic.from_single_reflectance('DarkFloor', 0.1)
    room[0].properties.radiance.modifier = dark_floor

    south_face = room[3]
    south_face.apertures_by_ratio(0.4, 0.01)
    south_face.apertures[0].overhang(0.5, indoor=False)
    south_face.apertures[0].overhang(0.5, indoor=True)
    south_face.move_shades(Vector3D(0, 0, -0.5))
    light_shelf_out = Plastic.from_single_reflectance(
        'outdoor_light_shelf_0.5', 0.5)
    light_shelf_in = Plastic.from_single_reflectance('indoor_light_shelf_0.70',
                                                     0.7)
    south_face.apertures[0].outdoor_shades[
        0].properties.radiance.modifier = light_shelf_out
    south_face.apertures[0].indoor_shades[
        0].properties.radiance.modifier = light_shelf_in

    north_face = room[1]
    north_face.overhang(0.25, indoor=False)
    door_verts = [
        Point3D(2, 10, 0.1),
        Point3D(1, 10, 0.1),
        Point3D(1, 10, 2.5),
        Point3D(2, 10, 2.5)
    ]
    door = Door('Front_Door', Face3D(door_verts))
    north_face.add_door(door)

    aperture_verts = [
        Point3D(4.5, 10, 1),
        Point3D(2.5, 10, 1),
        Point3D(2.5, 10, 2.5),
        Point3D(4.5, 10, 2.5)
    ]
    aperture = Aperture('Front_Aperture', Face3D(aperture_verts))
    triple_pane = Glass.from_single_transmittance('custom_triple_pane_0.3',
                                                  0.3)
    aperture.properties.radiance.modifier = triple_pane
    north_face.add_aperture(aperture)

    tree_canopy_geo = Face3D.from_regular_polygon(
        6, 2, Plane(Vector3D(0, 0, 1), Point3D(5, -3, 4)))
    tree_canopy = Shade('Tree_Canopy', tree_canopy_geo)

    table_geo = Face3D.from_rectangle(2, 2, Plane(o=Point3D(1.5, 4, 1)))
    table = Shade('Table', table_geo)
    room.add_indoor_shade(table)

    model = Model('Tiny_House', [room], orphaned_shades=[tree_canopy])

    assert hasattr(model.to, 'rad')
    rad_string = model.to.rad(model)
    assert len(rad_string) == 2
    assert 'outdoor_light_shelf_0.5' in rad_string[1]
    assert 'Front_Door' in rad_string[0]
예제 #22
0
 def _transparent_radiance_material():
     """Get a transparent radiance material for the air boundary."""
     try:
         from honeybee_radiance.modifier.material import Glass
     except ImportError as e:
         raise ImportError(
             'honeybee_radiance library must be installed to use '
             'to_radiance() method. {}'.format(e))
     return Glass('air_boundary', 1, 1, 1)
예제 #23
0
def test_from_transmittance():
    gl = Glass.from_transmittance('gl_test', 0.6, 0.7, 0.8)
    assert round(gl.r_transmissivity, 2) == 0.65
    assert round(gl.g_transmissivity, 2) == 0.76
    assert round(gl.b_transmissivity, 2) == 0.87

    assert round(gl.r_transmittance, 2) == 0.6
    assert round(gl.g_transmittance, 2) == 0.7
    assert round(gl.b_transmittance, 2) == 0.8
예제 #24
0
def test_set_states():
    """Test the setting of states on a Shade."""
    pts = (Point3D(0, 0, 0), Point3D(0, 0, 3), Point3D(1, 0,
                                                       3), Point3D(1, 0, 0))
    shd = Shade('TreeTrunk', Face3D(pts))
    shd1 = StateGeometry.from_vertices(
        'tree_foliage1', [[0, 0, 5], [2, 0, 5], [2, 2, 5], [0, 2, 5]])
    shd2 = StateGeometry.from_vertices(
        'tree_foliage2', [[0, 0, 5], [-2, 0, 5], [-2, 2, 5], [0, 2, 5]])

    trans1 = Glass.from_single_transmittance('TreeTrans1', 0.5)
    trans2 = Glass.from_single_transmittance('TreeTrans2', 0.27)
    trans3 = Glass.from_single_transmittance('TreeTrans3', 0.14)
    trans4 = Glass.from_single_transmittance('TreeTrans4', 0.01)

    tr1 = RadianceShadeState(trans1)
    tr2 = RadianceShadeState(trans2)
    tr3 = RadianceShadeState(trans3)
    tr4 = RadianceShadeState(trans4)
    states = (tr1, tr2, tr3, tr4)

    tr3.add_shade(shd1)
    with pytest.raises(AssertionError):
        tr4.add_shades([shd1, shd2])
    tr4.add_shades([shd1.duplicate(), shd2])

    with pytest.raises(AssertionError):
        shd.properties.radiance.states = states
    shd.properties.radiance.dynamic_group_identifier = 'DeciduousTrees'
    shd.properties.radiance.states = states

    for state in shd.properties.radiance.states:
        assert state.parent.identifier == 'TreeTrunk'

    new_shd = shd.duplicate()

    assert shd.properties.radiance.dynamic_group_identifier == \
        new_shd.properties.radiance.dynamic_group_identifier == 'DeciduousTrees'
    assert len(new_shd.properties.radiance.states) == 4
    for i, state in enumerate(new_shd.properties.radiance.states):
        assert state.modifier.identifier == 'TreeTrans{}'.format(i + 1)
    assert len(new_shd.properties.radiance.states[2].shades) == 1
    assert len(new_shd.properties.radiance.states[3].shades) == 2
예제 #25
0
def test_from_dict():
    """Test the Shade from_dict method with radiance properties."""
    shade = Shade.from_vertices(
        'tree', [[0, 0, 0], [10, 0, 0], [10, 0, 10], [0, 0, 10]])
    foliage = Glass.from_single_transmittance('Foliage', 0.2)
    shade.properties.radiance.modifier = foliage

    shdd = shade.to_dict()
    new_shade = Shade.from_dict(shdd)
    assert new_shade.properties.radiance.modifier == foliage
    assert new_shade.to_dict() == shdd
예제 #26
0
def test_to_from_dict():
    """Test the Aperture from_dict method with states."""
    aperture = Aperture.from_vertices(
        'wall_aperture', [[0, 0, 0], [10, 0, 0], [10, 0, 10], [0, 0, 10]])
    triple_pane = Glass.from_single_transmittance('TriplePane', 0.45)
    aperture.properties.radiance.modifier = triple_pane

    ad = aperture.to_dict()
    new_aperture = Aperture.from_dict(ad)
    assert new_aperture.properties.radiance.modifier == triple_pane
    assert new_aperture.to_dict() == ad
예제 #27
0
def test_set_modifier():
    """Test the setting of a modifier on a Shade."""
    shade = Shade.from_vertices('tree',
                                [[0, 0, 3], [1, 0, 3], [1, 1, 3], [0, 1, 3]])
    foliage = Glass.from_single_transmittance('Foliage', 0.2)
    shade.properties.radiance.modifier = foliage

    assert shade.properties.radiance.modifier == foliage
    assert shade.properties.radiance.is_modifier_set_on_object

    with pytest.raises(AttributeError):
        shade.properties.radiance.modifier.r_transmittance = 0.1
예제 #28
0
def test_set_modifier():
    """Test the setting of a modifier on an Aperture."""
    aperture = Aperture.from_vertices(
        'wall_aper', [[0, 0, 0], [10, 0, 0], [10, 0, 10], [0, 0, 10]])
    triple_pane = Glass.from_single_transmittance('TriplePane', 0.45)
    aperture.properties.radiance.modifier = triple_pane

    assert aperture.properties.radiance.modifier == triple_pane
    assert aperture.properties.radiance.is_modifier_set_on_object

    with pytest.raises(AttributeError):
        aperture.properties.radiance.modifier.r_transmittance = 0.45
예제 #29
0
def test_writer_to_rad():
    """Test the Shade to.rad method."""
    pts = [[0, 0, 0], [10, 0, 0], [10, 0, 10], [0, 0, 10]]
    shade = Shade.from_vertices('tree', pts)
    foliage = Glass.from_single_transmittance('Foliage', 0.2)
    shade.properties.radiance.modifier = foliage

    assert hasattr(shade.to, 'rad')
    rad_string = shade.to.rad(shade)
    assert 'polygon tree' in rad_string
    assert 'Foliage' in rad_string
    for pt in pts:
        assert ' '.join([str(float(x)) for x in pt]) in rad_string
예제 #30
0
def test_writer_to_rad():
    """Test the Aperture to.rad method."""
    pts = [[0, 0, 0], [10, 0, 0], [10, 0, 10], [0, 0, 10]]
    aperture = Aperture.from_vertices('wall_aperture', pts)
    triple_pane = Glass.from_single_transmittance('TriplePane', 0.45)
    aperture.properties.radiance.modifier = triple_pane

    assert hasattr(aperture.to, 'rad')
    rad_string = aperture.to.rad(aperture)
    assert 'polygon wall_aperture' in rad_string
    assert 'TriplePane' in rad_string
    for pt in pts:
        assert ' '.join([str(float(x)) for x in pt]) in rad_string