Source code for ladybug_display.extension.skydome

"""Method to draw a SkyDome as a VisualizationSet."""
from ladybug_geometry.geometry3d.pointvector import Point3D

from ladybug_display.geometry3d import DisplayText3D
from ladybug_display.visualization import VisualizationSet, AnalysisGeometry, \
    VisualizationData, ContextGeometry


[docs]def sky_dome_to_vis_set(sky_dome, show_components=False, include_title=True): """Translate sky dome geometry into a VisualizationSet. Args: sky_dome: A Ladybug-Radiance SkyDome object. show_components: Boolean to indicate whether only one dome with total radiation should be displayed (False) or three domes with the solar radiation components (total, direct, and diffuse) should be shown. (Default: False). include_title: Boolean to note whether the title should be included in the output visualization. (Default: True). Returns: A VisualizationSet with the sky dome represented as ContextGeometries and an AnalysisGeometry. This includes these objects in the following order. - Compass -- A ContextGeometry for the Compass at the base of the sky dome. - Title -- A ContextGeometry with text for the title of the sky dome. This layer will be excluded if include_title is False. - Radiation_Data -- An AnalysisGeometry for the sky dome data. """ # extract properties relevant for the Compass cent_pt, radius, proj = sky_dome.center_point, sky_dome.radius, sky_dome.projection # create the dome visualization if not show_components: # only create the total dome mesh mesh, compass_obj, dome_graphic, title_txt, mesh_values = sky_dome.draw() compass, title = _translate_context( compass_obj, dome_graphic, title_txt, cent_pt, proj) mesh, title = [mesh], [title] else: # create domes for total, direct and diffuse # loop through the 3 radiation types and produce a dome mesh, compass, title, mesh_values = [], [], [], [] rad_types = ('total', 'direct', 'diffuse') for dome_i in range(3): c_pt = Point3D(cent_pt.x + radius * 3 * dome_i, cent_pt.y, cent_pt.z) dome_mesh, dome_compass, dome_graphic, dome_title, dome_values = \ sky_dome.draw(rad_types[dome_i], c_pt) compass_con, title_con = _translate_context( dome_compass, dome_graphic, dome_title, cent_pt, proj) mesh.append(dome_mesh) compass.extend(compass_con) title.append(title_con) mesh_values.extend(dome_values) # create the visualization set object vis_set = VisualizationSet('SkyDome', ()) vis_set.display_name = 'Sky Dome' # merge all of the ContextGeometries compass_geo = ContextGeometry('Compass', compass) \ if isinstance(compass, list) else compass vis_set.add_geometry(compass_geo) if include_title: title_geo = ContextGeometry('Title', title) vis_set.add_geometry(title_geo) # create the AnalysisGeometry vis_data = VisualizationData( mesh_values, sky_dome.legend_parameters, dome_graphic.data_type, dome_graphic.unit) mesh_geo = AnalysisGeometry( 'Radiation_Data', mesh, [vis_data]) mesh_geo.display_name = dome_graphic.data_type.name mesh_geo.display_mode = 'Surface' vis_set.add_geometry(mesh_geo) return vis_set
def _translate_context(compass, graphic, title_txt, cent_pt, projection): """Translate sky dome geometry into Display geometry objects. Args: compass: A ladybug Compass object. graphic: A GraphicContainer for the dome. title_txt: Text for title of the dome. cent_pt: The center point of the sky dome. project: Text for the projection of the sky dome. Returns: dome_compass: A ContextGeometry for the dome compass. dome_title: DisplayText3D for the title for the dome. """ dome_compass = compass.to_vis_set( cent_pt.z, None, projection, graphic.legend_parameters.font)[0] dome_title = DisplayText3D( title_txt, graphic.lower_title_location, graphic.legend_parameters.text_height, None, graphic.legend_parameters.font, 'Left', 'Top') return dome_compass, dome_title