"""
Visualizing OpenSeesPy model
"""
from ._plotly_base import _model_vis, _eigen_vis, _eigen_anim, _deform_vis, _deform_anim, _frame_resp_vis
[docs]class OpsVisPlotly:
"""A class to visualize OpenSeesPy model based on plotly.
Parameters
----------
point_size: float
The render size of node.
line_width: float
The width of line element;
colors_dict: dict,
default: dict(point='#840000', line='#0165fc', face='#06c2ac', solid='#f48924', truss="#7552cc", link="#00c16e")
The dict for ele color.
theme: str, default=plotly
Plot theme, optional "plotly", "plotly_white", "plotly_dark", "ggplot2", "seaborn", "simple_white", "none".
color_map: str, default="jet"
color map to display the cloud plot. Optional, [‘aggrnyl’, ‘agsunset’, ‘algae’, ‘amp’, ‘armyrose’, ‘balance’,
‘blackbody’, ‘bluered’, ‘blues’, ‘blugrn’, ‘bluyl’, ‘brbg’, ‘brwnyl’, ‘bugn’, ‘bupu’, ‘burg’, ‘burgyl’,
‘cividis’, ‘curl’, ‘darkmint’, ‘deep’, ‘delta’, ‘dense’, ‘earth’, ‘edge’, ‘electric’, ‘emrld’, ‘fall’,
‘geyser’, ‘gnbu’, ‘gray’, ‘greens’, ‘greys’, ‘haline’, ‘hot’, ‘hsv’, ‘ice’, ‘icefire’, ‘inferno’, ‘jet’,
‘magenta’, ‘magma’, ‘matter’, ‘mint’, ‘mrybm’, ‘mygbm’, ‘oranges’, ‘orrd’, ‘oryel’, ‘oxy’, ‘peach’, ‘phase’,
‘picnic’, ‘pinkyl’, ‘piyg’, ‘plasma’, ‘plotly3’, ‘portland’, ‘prgn’, ‘pubu’, ‘pubugn’, ‘puor’, ‘purd’, ‘purp’,
‘purples’, ‘purpor’, ‘rainbow’, ‘rdbu’, ‘rdgy’, ‘rdpu’, ‘rdylbu’, ‘rdylgn’, ‘redor’, ‘reds’, ‘solar’,
‘spectral’, ‘speed’, ‘sunset’, ‘sunsetdark’, ‘teal’, ‘tealgrn’, ‘tealrose’, ‘tempo’, ‘temps’, ‘thermal’,
‘tropic’, ‘turbid’, ‘turbo’, ‘twilight’, ‘viridis’, ‘ylgn’, ‘ylgnbu’, ‘ylorbr’, ‘ylorrd’].
on_notebook: bool, default=False
Whether work in a jupyter notebook.
results_dir: str, default="opstool_output"
The dir that results saved.
Returns
-------
None
"""
def __init__(
self,
point_size: float = 5,
line_width: float = 5,
colors_dict: dict = None,
theme: str = "plotly",
color_map: str = "jet",
on_notebook: bool = False,
results_dir: str = "opstool_output"
):
# ------------------------------
self.point_size = point_size
self.line_width = line_width
self.title = "OpenSeesVispy"
# Initialize the color dict
colors = dict(
point="#003666",
line="#037ef3",
face="#0cb9c1",
solid="#7552cc",
truss="#00a4e4",
link="#f48924",
)
if colors_dict is not None:
colors.update(colors_dict)
self.color_point = colors["point"]
self.color_line = colors["line"]
self.color_face = colors["face"]
self.color_solid = colors["solid"]
self.color_truss = colors["truss"]
self.color_link = colors["link"]
# -------------------------------------------------
self.theme = theme
self.color_map = color_map
self.notebook = on_notebook
# -------------------------------------------------
self.out_dir = results_dir
# -------------------------------------------------
self.bound_fact = 30
[docs] def model_vis(
self,
input_file: str = "ModelData.hdf5",
show_node_label: bool = False,
show_ele_label: bool = False,
show_local_crd: bool = False,
show_fix_node: bool = True,
label_size: float = 8,
show_outline: bool = True,
opacity: float = 1.0,
save_html: str = 'ModelVis.html'
):
"""
Visualize the model in the current domain.
Parameters
----------
input_file: str, default = "ModelData.hdf5",
The filename that model data saved by
:py:meth:`opstool.vis.GetFEMdata.get_model_data`.
.. warning::
Be careful not to include any path, only filename,
the file will be saved to the directory ``results_dir``.
show_node_label: bool, default=False
Whether to display the node label.
show_ele_label: bool, default=False
Whether to display the ele label.
show_local_crd: bool, default=False
Whether to display the local axes of beam elements.
show_fix_node: bool, default=True
Whether to display the fix nodes.
label_size: float, default=8
The foontsize of node and ele label.
show_outline: bool, default=True
Whether to show the axis frame.
opacity: float, default=1.0
Plane and solid element transparency.
save_html: str, default='ModelVis.html'
The html file name to output. If False, the html file will not be generated.
Returns
--------
None
"""
_model_vis(self,
input_file=input_file,
show_node_label=show_node_label,
show_ele_label=show_ele_label,
show_local_crd=show_local_crd,
show_fix_node=show_fix_node,
label_size=label_size,
show_outline=show_outline,
opacity=opacity,
save_html=save_html
)
[docs] def eigen_vis(
self,
mode_tags: list[int],
input_file: str = 'EigenData.hdf5',
subplots: bool = False,
alpha: float = None,
show_outline: bool = False,
show_origin: bool = False,
opacity: float = 1.0,
show_face_line: bool = True,
save_html: str = "EigenVis"
):
"""Eigenvalue Analysis Visualization.
Parameters
----------
mode_tags: list[int], or tuple[int]
Mode tags to be shown, if list or tuple [mode1, mode2], display the multiple modes from mode1 to mode2.
input_file: str, default = 'EigenData.hdf5',
The filename that eigen data saved by
:py:meth:`opstool.vis.GetFEMdata.get_eigen_data`.
.. warning::
Be careful not to include any path, only filename,
the file will be saved to the directory ``results_dir``.
subplots: bool, default=False
If True, subplots in a figure. If False, plot in a slide style.
alpha: float, default=None
Model scaling factor, the default value is 1/5 of the model boundary according to the maximum deformation.
show_outline: bool, default=True
Whether to display the axes.
show_origin: bool, default=False
Whether to show undeformed shape.
opacity: float, default=1.0
Plane and solid element transparency.
show_face_line: bool, default=True
If True, the edges of plate and solid elements will be displayed.
save_html: str, default='EigenVis.html'
The html file name to output. If False, the html file will not be generated.
Returns
-------
None
"""
_eigen_vis(self,
mode_tags=mode_tags,
input_file=input_file,
subplots=subplots,
alpha=alpha,
show_outline=show_outline,
show_origin=show_origin,
opacity=opacity,
show_face_line=show_face_line,
save_html=save_html)
[docs] def eigen_anim(
self,
mode_tag: int = 1,
input_file: str = 'EigenData.hdf5',
alpha: float = None,
show_outline: bool = False,
opacity: float = 1,
framerate: int = 3,
show_face_line: bool = True,
save_html: str = "EigenAnimation"
):
"""Animation of Modal Analysis.
Parameters
----------
mode_tag: int
The mode tag.
input_file: str, default = 'EigenData.hdf5',
The filename that eigen data saved by
:py:meth:`opstool.vis.GetFEMdata.get_eigen_data`.
.. warning::
Be careful not to include any path, only filename,
the file will be saved to the directory ``results_dir``.
alpha: float, default=None
Scaling factor, the default value is 1/5 of the model boundary according to the maximum deformation.
show_outline: bool, default=False
Whether to display the axes.
opacity: float, default=1.0
Plane and solid element transparency.
framerate: int
The number of frames per second.
show_face_line: bool, default=True
If True, the edges of plate and solid elements will be displayed.
save_html: str, default='EigenAnimation.html'
The html file name to output. If False, the html file will not be generated.
Returns
-------
None
"""
_eigen_anim(self,
mode_tag=mode_tag,
input_file=input_file,
alpha=alpha,
show_outline=show_outline,
opacity=opacity,
framerate=framerate,
show_face_line=show_face_line,
save_html=save_html
)
[docs] def frame_resp_vis(self,
input_file: str = "BeamRespStepData-1.hdf5",
ele_tags: list[int] = None,
slider: bool = False,
response: str = "Mz",
show_values=True,
alpha: float = None,
opacity: float = 1,
save_html: str = "FrameRespVis"
):
"""
Display the force response of frame elements.
Parameters
----------
input_file: str, default = "BeamRespStepData-1.hdf5",
The filename that beam frame elements responses data saved by
:py:meth:`opstool.vis.GetFEMdata.get_frame_resp_step`.
.. warning::
Be careful not to include any path, only filename,
the file will be saved to the directory ``results_dir``.
ele_tags: int or list[int], default=None
Element tags to display, if None, all frame elements will display.
slider: bool, default=False
If True, responses in all steps will display by slider style.
If False, the step that max response will display.
response: str, default='Mz'
Response type. Optional, "Fx", "Fy", "Fz", "My", "Mz", "Mx".
show_values: bool, default=True
If True, will show the response values.
alpha: float, default=None
Scaling factor.
opacity: float, default=1.0
Plane and solid element transparency.
save_html: str, default='FrameRespVis.html'
The html file name to output. If False, the html file will not be generated.
"""
_frame_resp_vis(self,
input_file=input_file,
ele_tags=ele_tags,
slider=slider,
response=response,
show_values=show_values,
alpha=alpha,
opacity=opacity,
save_html=save_html
)