-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(extension): Add a module for HourlyPlot to VisualizationSet
- Loading branch information
1 parent
198cf85
commit b51ac77
Showing
4 changed files
with
121 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
"""Method to draw an HourlyPlot as a VisualizationSet.""" | ||
from ladybug_geometry.geometry3d import Plane | ||
|
||
from ladybug_display.geometry3d import DisplayLineSegment3D, DisplayPolyline3D, \ | ||
DisplayText3D | ||
from ladybug_display.visualization import VisualizationSet, AnalysisGeometry, \ | ||
VisualizationData, ContextGeometry | ||
|
||
|
||
def hourly_plot_to_vis_set( | ||
hourly_plot, z=0, custom_hours=(0, 3, 6, 9, 12, 15, 18, 21, 24), | ||
include_title=True): | ||
"""Get a Ladybug HourlyPlot represented as a VisualizationSet. | ||
Args: | ||
hourly_plot: A Ladybug HourlyPlot object. | ||
z: A number for the Z-coordinate to be used in translation. (Default: 0). | ||
custom_hours: A tuple of integers from 0 to 24 to indicate which hours | ||
of the day should appear in the Hour_Axis of the visualization. | ||
The default is (0, 3, 6, 9, 12, 15, 18, 21, 24). | ||
include_title: Boolean to note whether the title should be included | ||
in the output visualization. (Default: True). | ||
Returns: | ||
A VisualizationSet with the hourly plot represented several ContextGeometries | ||
(and an AnalysisGeometry. This includes these | ||
objects in the following order. | ||
- Hour_Axis -- A ContextGeometry with lines and text for the hour-of-the-day | ||
axis of the hourly plot. | ||
- Month_Axis -- A ContextGeometry with lines and text for the hour-of-the-day | ||
axis of the hourly plot, | ||
- Title -- A ContextGeometry with text for the title of the hourly plot. | ||
This layer will be excluded if include_title is False. | ||
- Analysis_Data -- An AnalysisGeometry for the data on the hourly plot. | ||
""" | ||
# establish the VisualizationSet object | ||
data_header = hourly_plot.data_collection.header | ||
data_type, unit = data_header.data_type, data_header.unit | ||
set_id = 'Hourly_Plot_{}'.format(data_type.name.replace(' ', '_')) | ||
vis_set = VisualizationSet(set_id, ()) | ||
|
||
# get global variables used in other places | ||
chart_border = DisplayPolyline3D(hourly_plot.chart_border3d, line_width=2) | ||
txt_h = hourly_plot.legend_parameters.text_height | ||
font = hourly_plot.legend_parameters.font | ||
major_hr = hourly_plot.HOUR_LABELS | ||
|
||
# add the hour axis | ||
dis_hour, dis_hour_text = [], [] | ||
h_lines = hourly_plot.custom_hour_lines3d(custom_hours) | ||
h_pts = hourly_plot.custom_hour_label_points3d(custom_hours) | ||
h_text = hourly_plot.custom_hour_labels(custom_hours) | ||
for hr, lin, pt, txt in zip(custom_hours, h_lines, h_pts, h_text): | ||
if hr in major_hr: | ||
lt, t_sz = 'Continuous', txt_h | ||
else: | ||
lt, t_sz = 'Dotted', txt_h * 0.8 | ||
dis_hour.append(DisplayLineSegment3D(lin, line_width=1, line_type=lt)) | ||
d_txt = DisplayText3D(txt, Plane(o=pt), t_sz, None, font, 'Right', 'Middle') | ||
dis_hour_text.append(d_txt) | ||
hour_axis = ContextGeometry('Hour_Axis', [chart_border] + dis_hour + dis_hour_text) | ||
hour_axis.display_name = 'Hour Axis' | ||
vis_set.add_geometry(hour_axis) | ||
|
||
# add the month axis | ||
dis_month, dis_month_text = [], [] | ||
m_lines = hourly_plot.month_lines3d | ||
m_pts = hourly_plot.month_label_points3d | ||
m_text = hourly_plot.month_labels | ||
for lin in m_lines: | ||
dis_month.append(DisplayLineSegment3D(lin)) | ||
for pt, txt in zip(m_pts, m_text): | ||
d_txt = DisplayText3D(txt, Plane(o=pt), t_sz, None, font, 'Center', 'Top') | ||
dis_month_text.append(d_txt) | ||
month_axis = ContextGeometry( | ||
'Month_Axis', [chart_border] + dis_month + dis_month_text) | ||
month_axis.display_name = 'Month Axis' | ||
vis_set.add_geometry(month_axis) | ||
|
||
if include_title: | ||
tit_txt = DisplayText3D( | ||
hourly_plot.title_text, hourly_plot.lower_title_location, txt_h, | ||
None, font, 'Left', 'Bottom') | ||
title = ContextGeometry('Title', [tit_txt]) | ||
title.display_name = 'Title' | ||
vis_set.add_geometry(title) | ||
|
||
# add the colored mesh | ||
vis_data = VisualizationData( | ||
hourly_plot.values, hourly_plot.legend_parameters, data_type, unit) | ||
mesh_geo = AnalysisGeometry( | ||
'Analysis_Data', [hourly_plot.colored_mesh3d], [vis_data]) | ||
mesh_geo.display_name = data_type.name | ||
mesh_geo.display_mode = 'Surface' | ||
vis_set.add_geometry(mesh_geo) | ||
|
||
return vis_set |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters