Пример #1
0
def test_trans():
    tr = Trans('test_trans')
    assert tr.r_reflectance == 0
    assert tr.g_reflectance == 0
    assert tr.b_reflectance == 0
    assert tr.specularity == 0
    assert tr.roughness == 0
    assert tr.transmitted_diff == 0
    assert tr.transmitted_spec == 0
    assert tr.to_radiance(
        minimal=True
    ) == 'void trans test_trans 0 0 7 0.0 0.0 0.0 0.0 0.0 0.0 0.0'
Пример #2
0
def test_assign_values():
    tr = Trans('test_trans', 0.7, 0.7, 0.7, 0.01, 0, 0.45, 0.01)
    assert tr.r_reflectance == 0.7
    assert tr.g_reflectance == 0.7
    assert tr.b_reflectance == 0.7
    assert tr.specularity == 0.01
    assert tr.roughness == 0.0
    assert tr.transmitted_diff == 0.45
    assert tr.transmitted_spec == 0.01
    assert tr.to_radiance(
        minimal=True
    ) == 'void trans test_trans 0 0 7 0.7 0.7 0.7 0.01 0.0 0.45 0.01'
Пример #3
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)
Пример #4
0
def test_update_values():
    tr = Trans('test_trans', 0.7, 0.7, 0.7, 0.01, 0, 0.45, 0.01)
    tr.r_reflectance = 0.5
    tr.g_reflectance = 0.4
    tr.b_reflectance = 0.3
    tr.specularity = 0.1
    tr.roughness = 0.02
    tr.transmitted_diff = 0.45
    tr.transmitted_spec = 0.01

    assert tr.r_reflectance == 0.5
    assert tr.g_reflectance == 0.4
    assert tr.b_reflectance == 0.3
    assert tr.specularity == 0.1
    assert tr.roughness == 0.02
    assert tr.transmitted_diff == 0.45
    assert tr.transmitted_spec == 0.01
    assert tr.to_radiance(minimal=True) == \
        'void trans test_trans 0 0 7 0.5 0.4 0.3 0.1 0.02 0.45 0.01'
def test_from_average_properties():
    tr = Trans.from_average_properties('test', 0.2, 0.5, True, True)
    assert tr.average_reflectance == pytest.approx(0.2, rel=1e-3)
    assert tr.average_transmittance == pytest.approx(0.5, rel=1e-3)
    assert tr.diffuse_reflectance == 0
    assert tr.diffuse_transmittance == pytest.approx(0.5, rel=1e-3)
    assert tr.specular_transmittance == 0
    assert tr.average_reflectance + tr.average_transmittance + \
        tr.average_absorption == pytest.approx(1, rel=1e-3)

    tr = Trans.from_average_properties('test', 0.2, 0.5, False, True)
    assert tr.average_reflectance == pytest.approx(0.2, rel=1e-3)
    assert tr.average_transmittance == pytest.approx(0.5, rel=1e-3)
    assert tr.diffuse_reflectance == pytest.approx(0.2, rel=1e-3)
    assert tr.diffuse_transmittance == pytest.approx(0.5, rel=1e-3)
    assert tr.specular_transmittance == 0
    assert tr.average_reflectance + tr.average_transmittance + \
        tr.average_absorption == pytest.approx(1, rel=1e-3)

    tr = Trans.from_average_properties('test', 0.2, 0.5, True, False)
    assert tr.average_reflectance == pytest.approx(0.2, rel=1e-3)
    assert tr.average_transmittance == pytest.approx(0.5, rel=1e-3)
    assert tr.diffuse_reflectance == 0
    assert tr.diffuse_transmittance == 0
    assert tr.specular_transmittance == pytest.approx(0.5, rel=1e-3)
    assert tr.average_reflectance + tr.average_transmittance + \
        tr.average_absorption == pytest.approx(1, rel=1e-3)

    tr = Trans.from_average_properties('test', 0.2, 0.5, False, False)
    assert tr.average_reflectance == pytest.approx(0.2, rel=1e-3)
    assert tr.average_transmittance == pytest.approx(0.5, rel=1e-3)
    assert tr.diffuse_reflectance == pytest.approx(0.2, rel=1e-3)
    assert tr.diffuse_transmittance == 0
    assert tr.specular_transmittance == pytest.approx(0.5, rel=1e-3)
    assert tr.average_reflectance + tr.average_transmittance + \
        tr.average_absorption == pytest.approx(1, rel=1e-3)
Пример #6
0
def aperture_state_abridged_shades(directory):
    mod = Trans('DiffusingShade', 0.7, 0.7, 0.7, 0.01, 0, 0.45, 0.01)
    mod_dir = Glass.from_single_transmittance('DiffusingShadeDirect', 0.03)
    mod_shd = Plastic('ShadeMat', 0.65, 0.65, 0.65)
    pts_1 = (Point3D(0, 0, 0), Point3D(2, 0, 0), Point3D(2, 2, 0), Point3D(0, 2, 0))
    pts_2 = (Point3D(0, 0, 2), Point3D(2, 0, 0), Point3D(2, 2, 2), Point3D(0, 2, 2))
    shade1 = StateGeometry('RectangleShade1', Face3D(pts_1))
    shade2 = StateGeometry('RectangleShade2', Face3D(pts_2))
    shade1.modifier = mod_shd
    shade2.modifier = mod_shd
    rad_state = RadianceSubFaceState(mod, [shade1, shade2])
    rad_state.modifier_direct = mod_dir

    dest_file = os.path.join(directory, 'aperture_state_abridged_shades.json')
    with open(dest_file, 'w') as fp:
        json.dump(rad_state.to_dict(abridged=True), fp, indent=4)
Пример #7
0
def test_from_string():
    trans_str = """
    void trans test
        0
        0
        7
            0.7 0.7 0.7
            0.01 0.0 0.45
            0.01
            
    """
    tr = Trans.from_string(trans_str)
    assert tr.identifier == 'test'
    assert tr.r_reflectance == 0.7
    assert tr.g_reflectance == 0.7
    assert tr.b_reflectance == 0.7
    assert tr.specularity == 0.01
    assert tr.roughness == 0.0
    assert tr.transmitted_diff == 0.45
    assert tr.transmitted_spec == 0.01
    assert tr.to_radiance(minimal=True) == ' '.join(trans_str.split())
Пример #8
0
def model_radiance_dynamic_states(directory):
    room = Room.from_box('Tiny_House_Zone', 5, 10, 3)
    garage = Room.from_box('Tiny_Garage', 5, 10, 3, origin=Point3D(5, 0, 0))

    south_face = room[3]
    south_face.apertures_by_ratio(0.5, 0.01)
    shd1 = StateGeometry.from_vertices(
        'outdoor_awning', [[0, 0, 2], [5, 0, 2], [5, 2, 2], [0, 2, 2]])

    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()])
    states = (tint1, tint2, tint3, tint4)
    south_face.apertures[0].properties.radiance.dynamic_group_identifier = \
        'ElectrochromicWindow'
    south_face.apertures[0].properties.radiance.states = states

    shd2 = Shade.from_vertices('indoor_light_shelf',
                               [[0, 0, 2], [-1, 0, 2], [-1, 2, 2], [0, 2, 2]])
    ref_1 = Plastic.from_single_reflectance('outdoor_light_shelf_0.5', 0.5)
    ref_2 = Plastic.from_single_reflectance('indoor_light_shelf_0.70', 0.7)
    light_shelf_1 = RadianceShadeState(ref_1)
    light_shelf_2 = RadianceShadeState(ref_2)
    shelf_states = (light_shelf_1, light_shelf_2)
    shd2.properties.radiance.dynamic_group_identifier = 'DynamicLightShelf'
    shd2.properties.radiance.states = shelf_states
    room.add_indoor_shade(shd2)

    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)
    sum_tree_trans = Trans.from_single_reflectance('SummerLeaves', 0.3, 0.0,
                                                   0.1, 0.15, 0.15)
    win_tree_trans = Trans.from_single_reflectance('WinterLeaves', 0.1, 0.0,
                                                   0.1, 0.1, 0.6)
    summer = RadianceShadeState(sum_tree_trans)
    winter = RadianceShadeState(win_tree_trans)
    tree_canopy.properties.radiance.dynamic_group_identifier = 'DeciduousTree'
    tree_canopy.properties.radiance.states = (summer, winter)

    ground_geo = Face3D.from_rectangle(10, 10, Plane(o=Point3D(0, -10, 0)))
    ground = Shade('Ground', ground_geo)
    grass = Plastic.from_single_reflectance('grass', 0.3)
    snow = Plastic.from_single_reflectance('snow', 0.7)
    summer_ground = RadianceShadeState(grass)
    winter_ground = RadianceShadeState(snow)
    ground.properties.radiance.dynamic_group_identifier = 'SeasonalGround'
    ground.properties.radiance.states = (summer_ground, winter_ground)

    east_face = room[2]
    east_face.apertures_by_ratio(0.1, 0.01)
    west_face = garage[4]
    west_face.apertures_by_ratio(0.1, 0.01)
    Room.solve_adjacency([room, garage], 0.01)

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

    model_dict = model.to_dict(included_prop=['radiance'])

    dest_file = os.path.join(directory, 'model_radiance_dynamic_states.json')
    with open(dest_file, 'w') as fp:
        json.dump(model_dict, fp, indent=4)
Пример #9
0
def test_writer_to_rad_folder_dynamic():
    """Test the Model to.rad_folder method with dynamic geometry."""
    room = Room.from_box('Tiny_House_Zone', 5, 10, 3)
    garage = Room.from_box('Tiny_Garage', 5, 10, 3, origin=Point3D(5, 0, 0))

    south_face = room[3]
    south_face.apertures_by_ratio(0.5, 0.01)
    shd1 = StateGeometry.from_vertices(
        'outdoor_awning', [[0, 0, 2], [5, 0, 2], [5, 2, 2], [0, 2, 2]])

    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()])
    states = (tint1, tint2, tint3, tint4)
    south_face.apertures[0].properties.radiance.dynamic_group_identifier = \
        'ElectrochromicWindow'
    south_face.apertures[0].properties.radiance.states = states

    shd2 = Shade.from_vertices(
        'indoor_light_shelf', [[0, 0, 2], [-1, 0, 2], [-1, 2, 2], [0, 2, 2]])
    ref_1 = Plastic.from_single_reflectance('outdoor_light_shelf_0.5', 0.5)
    ref_2 = Plastic.from_single_reflectance('indoor_light_shelf_0.70', 0.7)
    light_shelf_1 = RadianceShadeState(ref_1)
    light_shelf_2 = RadianceShadeState(ref_2)
    shelf_states = (light_shelf_1, light_shelf_2)
    shd2.properties.radiance.dynamic_group_identifier = 'DynamicLightShelf'
    shd2.properties.radiance.states = shelf_states
    room.add_indoor_shade(shd2)

    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)
    sum_tree_trans = Trans.from_single_reflectance('SummerLeaves', 0.3, 0.0, 0.1, 0.15, 0.15)
    win_tree_trans = Trans.from_single_reflectance('WinterLeaves', 0.1, 0.0, 0.1, 0.1, 0.6)
    summer = RadianceShadeState(sum_tree_trans)
    winter = RadianceShadeState(win_tree_trans)
    tree_canopy.properties.radiance.dynamic_group_identifier = 'DeciduousTree'
    tree_canopy.properties.radiance.states = (summer, winter)

    ground_geo = Face3D.from_rectangle(10, 10, Plane(o=Point3D(0, -10, 0)))
    ground = Shade('Ground', ground_geo)
    grass = Plastic.from_single_reflectance('grass', 0.3)
    snow = Plastic.from_single_reflectance('snow', 0.7)
    summer_ground = RadianceShadeState(grass)
    winter_ground = RadianceShadeState(snow)
    ground.properties.radiance.dynamic_group_identifier = 'SeasonalGround'
    ground.properties.radiance.states = (summer_ground, winter_ground)

    east_face = room[2]
    east_face.apertures_by_ratio(0.1, 0.01)
    west_face = garage[4]
    west_face.apertures_by_ratio(0.1, 0.01)
    Room.solve_adjacency([room, garage], 0.01)

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

    folder = os.path.abspath('./tests/assets/model/rad_folder_dynamic')
    model.to.rad_folder(model, folder)

    model_folder = ModelFolder(folder)

    ap_dir = model_folder.aperture_group_folder(full=True)
    assert os.path.isfile(os.path.join(ap_dir, 'states.json'))
    group_name = south_face.apertures[0].properties.radiance.dynamic_group_identifier
    assert os.path.isfile(os.path.join(ap_dir, '{}..black.rad'.format(group_name)))
    for i in range(len(south_face.apertures[0].properties.radiance.states)):
        d_file = (os.path.join(ap_dir, '{}..default..{}.rad'.format(group_name, i)))
        assert os.path.isfile(d_file)
    for i in range(len(south_face.apertures[0].properties.radiance.states)):
        d_file = (os.path.join(ap_dir, '{}..direct..{}.rad'.format(group_name, i)))
        assert os.path.isfile(d_file)

    out_scene_dir = model_folder.dynamic_scene_folder(full=True, indoor=False)
    assert os.path.isfile(os.path.join(out_scene_dir, 'states.json'))
    grp_name = tree_canopy.properties.radiance.dynamic_group_identifier
    for i in range(len(tree_canopy.properties.radiance.states)):
        d_file = (os.path.join(out_scene_dir, '{}..default..{}.rad'.format(grp_name, i)))
        assert os.path.isfile(d_file)
    for i in range(len(tree_canopy.properties.radiance.states)):
        d_file = (os.path.join(out_scene_dir, '{}..direct..{}.rad'.format(grp_name, i)))
        assert os.path.isfile(d_file)
    grp_name = ground.properties.radiance.dynamic_group_identifier
    for i in range(len(ground.properties.radiance.states)):
        d_file = (os.path.join(out_scene_dir, '{}..default..{}.rad'.format(grp_name, i)))
        assert os.path.isfile(d_file)
    for i in range(len(ground.properties.radiance.states)):
        d_file = (os.path.join(out_scene_dir, '{}..direct..{}.rad'.format(grp_name, i)))
        d_file = (os.path.join(out_scene_dir, '{}..direct..{}.rad'.format(grp_name, i)))
        assert os.path.isfile(d_file)

    in_scene_dir = model_folder.dynamic_scene_folder(full=True, indoor=True)
    assert os.path.isfile(os.path.join(in_scene_dir, 'states.json'))
    grp_name = shd2.properties.radiance.dynamic_group_identifier
    for i in range(len(shd2.properties.radiance.states)):
        d_file = (os.path.join(in_scene_dir, '{}..default..{}.rad'.format(grp_name, i)))
        assert os.path.isfile(d_file)
    for i in range(len(shd2.properties.radiance.states)):
        d_file = (os.path.join(in_scene_dir, '{}..direct..{}.rad'.format(grp_name, i)))
        assert os.path.isfile(d_file)

    # clean up the folder
    nukedir(folder, rmdir=True)
Пример #10
0
def test_writer_to_rad_folder():
    """Test the Model to.rad_folder method."""
    room = Room.from_box('Tiny_House_Zone', 5, 10, 3)
    garage = Room.from_box('Tiny_Garage', 5, 10, 3, origin=Point3D(5, 0, 0))

    dark_floor = Plastic.from_single_reflectance('DarkFloor', 0.1)
    room[0].properties.radiance.modifier = dark_floor
    room[5].properties.radiance.modifier_blk = 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)
    tree_trans = Trans.from_single_reflectance('Leaves', 0.3, 0.0, 0.1, 0.15, 0.15)
    tree_canopy.properties.radiance.modifier = tree_trans

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

    east_face = room[2]
    east_face.apertures_by_ratio(0.1, 0.01)
    west_face = garage[4]
    west_face.apertures_by_ratio(0.1, 0.01)
    Room.solve_adjacency([room, garage], 0.01)

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

    folder = os.path.abspath('./tests/assets/model/rad_folder')
    model.to.rad_folder(model, folder)

    model_folder = ModelFolder(folder)

    ap_dir = model_folder.aperture_folder(full=True)
    assert os.path.isfile(os.path.join(ap_dir, 'aperture.rad'))
    assert os.path.isfile(os.path.join(ap_dir, 'aperture.mat'))
    assert os.path.isfile(os.path.join(ap_dir, 'aperture.blk'))

    scene_dir = model_folder.scene_folder(full=True)
    assert os.path.isfile(os.path.join(scene_dir, 'envelope.rad'))
    assert os.path.isfile(os.path.join(scene_dir, 'envelope.mat'))
    assert os.path.isfile(os.path.join(scene_dir, 'envelope.blk'))
    assert os.path.isfile(os.path.join(scene_dir, 'shades.rad'))
    assert os.path.isfile(os.path.join(scene_dir, 'shades.mat'))
    assert os.path.isfile(os.path.join(scene_dir, 'shades.blk'))

    # clean up the folder
    nukedir(folder, rmdir=True)
Пример #11
0
def test_from_single_value():
    tr = Trans.from_single_reflectance('test', 0.6)
    assert tr.r_reflectance == 0.6
    assert tr.g_reflectance == 0.6
    assert tr.b_reflectance == 0.6
Пример #12
0
def modifier_trans_tree_foliage(directory):
    tree_leaves = Trans.from_single_reflectance('Foliage_0.3', 0.3, 0.0, 0.1,
                                                0.15, 0.15)
    dest_file = os.path.join(directory, 'modifier_trans_tree_foliage.json')
    with open(dest_file, 'w') as fp:
        json.dump(tree_leaves.to_dict(), fp, indent=4)
ghenv.Component.Category = 'HB-Radiance'
ghenv.Component.SubCategory = '1 :: Modifiers'
ghenv.Component.AdditionalHelpFromDocStrings = '2'

try:  # import the core honeybee dependencies
    from honeybee.typing import clean_and_id_rad_string
except ImportError as e:
    raise ImportError('\nFailed to import honeybee:\n\t{}'.format(e))

try:  # import the honeybee-radiance dependencies
    from honeybee_radiance.modifier.material import Trans
except ImportError as e:
    raise ImportError('\nFailed to import honeybee_radiance:\n\t{}'.format(e))

try:  # import ladybug_rhino dependencies
    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):
    # set the default modifier properties
    _spec_ = 0.0 if _spec_ is None else _spec_
    _rough_ = 0.0 if _rough_ is None else _rough_

    # create the modifier
    modifier = Trans.from_single_reflectance(
        clean_and_id_rad_string(_name), _diff_ref, _spec_, _rough_,
        _diff_trans, _spec_trans)
    modifier.display_name = _name
ghenv.Component.AdditionalHelpFromDocStrings = '0'

try:  # import the core honeybee dependencies
    from honeybee.typing import clean_and_id_rad_string, clean_rad_string
except ImportError as e:
    raise ImportError('\nFailed to import honeybee:\n\t{}'.format(e))

try:  # import the honeybee-radiance dependencies
    from honeybee_radiance.modifier.material import Trans
except ImportError as e:
    raise ImportError('\nFailed to import honeybee_radiance:\n\t{}'.format(e))

try:  # import ladybug_rhino dependencies
    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):
    # set the default modifier properties
    _spec_ = 0.0 if _spec_ is None else _spec_
    _rough_ = 0.0 if _rough_ is None else _rough_
    name = clean_and_id_rad_string('TransMaterial') if _name_ is None else \
        clean_rad_string(_name_)

    # create the modifier
    modifier = Trans(name, _r_diff_ref, _g_diff_ref, _b_diff_ref,
                     _spec_, _rough_, _diff_trans, _spec_trans)
    if _name_ is not None:
        modifier.display_name = _name_
ghenv.Component.Category = 'HB-Radiance'
ghenv.Component.SubCategory = '1 :: Modifiers'
ghenv.Component.AdditionalHelpFromDocStrings = '0'

try:  # import the core honeybee dependencies
    from honeybee.typing import clean_and_id_rad_string
except ImportError as e:
    raise ImportError('\nFailed to import honeybee:\n\t{}'.format(e))

try:  # import the honeybee-radiance dependencies
    from honeybee_radiance.modifier.material import Trans
except ImportError as e:
    raise ImportError('\nFailed to import honeybee_radiance:\n\t{}'.format(e))

try:  # import ladybug_rhino dependencies
    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):
    # set the default modifier properties
    _spec_ = 0.0 if _spec_ is None else _spec_
    _rough_ = 0.0 if _rough_ is None else _rough_

    # create the modifier
    modifier = Trans(
        clean_and_id_rad_string(_name), _r_diff_ref, _g_diff_ref, _b_diff_ref,
        _spec_, _rough_, _diff_trans, _spec_trans)
    modifier.display_name = _name