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
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
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
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'
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'
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
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
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)
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
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
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)
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)
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)
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)
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
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
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)
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'
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
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
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]
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)
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
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
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
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
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
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
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
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