Skip to main content

Visualization of SDyPy models and results

Project description

The Plotter3D is a wrapper around the pyvista.BackgroundPlotter with some added functionality around convenient simplifications for use in structural dynamics.

Notes

Running on Linux

If the viewer does not open, maybe libxcb-cursor0 is missing. Try installing (Ubuntu):

sudo apt install libxcb-cursor0

Also, if running wayland, the following should be added at the top of the file:

os.environ['QT_QPA_PLATFORM'] = 'xcb'

Running from shell

If not running from jupyter notebook, the viewer might close right away. To keep it interactive, run it with:

python -i file.py

Basic usage

import sdypy as sd

nodes = ... # Finite element nodes
elements ... # Finite elements

plotter = sd.view.Plotter3D(nodes, elements)
plotter.add_fem_mesh(nodes, elements)
plotter.show(show_grid=True, show_axes=True)

To animate a mode shape:

mode_shape = ... # Shape (n_nodes, 3)

plotter = sd.view.Plotter3D(nodes, elements)
plotter.add_fem_mesh(nodes, elements, animate=mode_shape)

To animate according to a time history:

time_history = ... # Shape (n_nodes, 3, n_timesteps)

plotter = sd.view.Plotter3D(nodes, elements)
plotter.add_fem_mesh(nodes, elements, animate=time_history)

To color the mesh according to a norm of the mode_shape:

plotter = sd.view.Plotter3D(nodes, elements)
plotter.add_fem_mesh(nodes, elements, animate=mode_shape, field="norm")

Here, if field="norm" is passed, the mesh will be colored according to the norm of the mode_shape (or more generally, according to the norm of the animate argument). To color the mesh according to an arbitrary field, the field argument must be of shape (n_nodes, n_timesteps).

Animation

The Plotter3D class also enables the user to animate the mesh. There are two way to animate the FEM mesh or points:

  • By passing a 3D array of shape (n_nodes, 3, n_timesteps) to the animate argument. The points/nodes will be animated according to the time history.

  • By passing a 2D array of shape (n_nodes, 3) to the animate argument. The animate defines the maximum displacement of the nodes. The animation is interpolated with a sine function.

The animate argument can also have the following shapes:

  • (n_nodes*3): The Plotter3D will automatically convert this to (n_nodes, 3).

  • (n_nodes*3, n_timesteps): The Plotter3D will automatically convert this to (n_nodes, 3, n_timesteps).

  • (n_nodes*N): The Plotter3D will automatically convert this to (n_nodes, 3), where N is an arbitrary number. Only the first 3 columns are used. This is useful when animating e.g. a mode shape of a shell (each node has 6 DOF).

  • (n_nodes*N, n_timesteps): The Plotter3D will automatically convert this to (n_nodes, 3, n_timesteps). Similar to previous point, but with time history.

The n_frames is set to 100 by default, but can be changed to alter the number of frames per one iteration. When providing the time history, the n_frames should match the last dimension of the animate argument.

Here is an example of animating a mode shape:

import sdypy as sd

nodes = ... # Finite element nodes (n_nodes, 3)
elements ... # Finite elements (n_elements, n_nodes_per_element)
mode_shape = ... # Mode shape (n_nodes, 3)

plotter = sd.view.Plotter3D(nodes, elements)
plotter.add_fem_mesh(nodes, elements, animate=mode_shape, field="norm")

plotter.configure_animation(interval=20) # To adjust the interval and camera position
plotter.start_animation() # Optional. To immediately start the animation. Otherwise, the controls are available in the plotter.
plotter.show()

Recording a GIF

To record a GIF, the configure_gif_recorder method must be called. Example:

import sdypy as sd

nodes = ... # Finite element nodes (n_nodes, 3)
elements ... # Finite elements (n_elements, n_nodes_per_element)
mode_shape = ... # Mode shape (n_nodes, 3)

plotter = sd.view.Plotter3D(nodes, elements)

plotter.gif_recorder("mode_shape.gif") # MUST BE CALLED BEFORE THE ANIMATION STARTS

plotter.add_fem_mesh(nodes, elements, animate=mode_shape, field="norm")

plotter.configure_gif_recorder('mode_shape.gif', fps=30) # Configure the GIF recorder

plotter.show()

The recording will start on pressing the “Record” button in the toolbar. Alternatively, the configure_gif_recorder can be called like this:

plotter.configure_gif_recorder('mode_shape.gif', fps=30, start_on_play=True)

This will start the recording when the animation starts. To start the animation, call the start_animation method or press the “Play” button in the toolbar.

The recording will last for 1 iteration of the animation.

Adding custom toolbar buttons

To add custom toolbar commands, use the configure_toolbar method. Example:

import sdypy as sd

nodes = ... # Finite element nodes (n_nodes, 3)
elements ... # Finite elements (n_elements, n_nodes_per_element)
mode_shape = ... # Mode shape (n_nodes, 3)

plotter = sd.view.Plotter3D(nodes, elements)
plotter.add_fem_mesh(nodes, elements, animate=mode_shape, field="norm")

def custom_command():
    print("Custom command")

toolbar_actions = {
    "Custom command": custom_command
}

plotter.configure_toolbar(toolbar_actions)

plotter.show()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sdypy_view-0.1.6.tar.gz (23.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sdypy_view-0.1.6-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file sdypy_view-0.1.6.tar.gz.

File metadata

  • Download URL: sdypy_view-0.1.6.tar.gz
  • Upload date:
  • Size: 23.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for sdypy_view-0.1.6.tar.gz
Algorithm Hash digest
SHA256 02d95a46eb5c9452a93d8414f07d4c5e916c9f6853233980f259496a97abe7f4
MD5 24149b5d57cf437c135448d4a8a6bb37
BLAKE2b-256 4f4cad4a7fd259f868ff9553586f9013f11f113aa61eb14b07f3312d7ec9d73c

See more details on using hashes here.

File details

Details for the file sdypy_view-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: sdypy_view-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 10.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for sdypy_view-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 dec725b159f0f2fa26c0efe356fc82d29ae9504fd78a75d85ce0ddd4432610e8
MD5 e8e4e4219d4febaa19440e36cec55876
BLAKE2b-256 de6c986c1c3229d7e8b161c2d6a439962eb2d1f607a17394f8c51d141b81f0d8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page