.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "_gallery/mesh/surface_ripple.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr__gallery_mesh_surface_ripple.py: Surface animation ================= Example of a surface ripple animation by setting the z-height data on every render. .. GENERATED FROM PYTHON SOURCE LINES 8-62 .. image-sg:: /_gallery/mesh/images/sphx_glr_surface_ripple_001.webp :alt: surface ripple :srcset: /_gallery/mesh/images/sphx_glr_surface_ripple_001.webp :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none /opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/pygfx/objects/_ruler.py:400: RuntimeWarning: divide by zero encountered in divide screen_full = (ndc_full[:, :2] / ndc_full[:, 3:4]) * half_canvas_size /opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/pygfx/objects/_ruler.py:400: RuntimeWarning: invalid value encountered in divide screen_full = (ndc_full[:, :2] / ndc_full[:, 3:4]) * half_canvas_size /opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/pygfx/objects/_ruler.py:412: RuntimeWarning: invalid value encountered in divide screen_sel = (ndc_sel[:, :2] / ndc_sel[:, 3:4]) * half_canvas_size /home/runner/work/fastplotlib/fastplotlib/fastplotlib/graphics/features/_base.py:18: UserWarning: casting float64 array to float32 warn(f"casting {array.dtype} array to float32") | .. code-block:: Python # test_example = false import fastplotlib as fpl import numpy as np figure = fpl.Figure(size=(700, 560), cameras="3d", controller_types="orbit") def create_ripple(shape=(100, 100), phase=0.0, freq=np.pi / 4, ampl=1.0): m, n = shape y, x = np.ogrid[-m / 2 : m / 2, -n / 2 : n / 2] r = np.sqrt(x**2 + y**2) z = (ampl * np.sin(freq * r + phase)) / np.sqrt(r + 1) return z * 8 z = create_ripple() # set the clim vmax max_z = create_ripple(phase=(np.pi / 4) - (np.pi / 2)).max() surface = figure[0, 0].add_surface( z, mode="basic", cmap="viridis", clim=(-max_z, max_z) ) figure[0, 0].camera.show_object(surface.world_object, (-1, 3, -1), up=(0, 0, 1)) figure.show() figure[0, 0].camera.zoom = 1.15 phase = 0.0 def animate(): global phase z = create_ripple(phase=phase) surface.data = z phase -= 0.1 figure[0, 0].add_animations(animate) # NOTE: fpl.loop.run() should not be used for interactive sessions # See the "JupyterLab and IPython" section in the user guide if __name__ == "__main__": print(__doc__) fpl.loop.run() .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 15.151 seconds) .. _sphx_glr_download__gallery_mesh_surface_ripple.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: surface_ripple.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: surface_ripple.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_