Visualizer Widgets

Visualizer widgets allow you to interactively explore a session as you would in a Vapor GUI visualizer. This notebook shows how to use visualizer widgets and how to add additional dynamic parameter inputs.

Note: Widgets require an active kernel to operate. To try it out, run this notebook on your local machine.

import example_utils
from vapor import session, renderer, dataset, camera, widget

ses = session.Session()
data = example_utils.OpenExampleDataset(ses)
Vapor 3.10.0
Python 3.9.19 (/opt/anaconda3/envs/vapor)
OpenGL 4.1 Metal - 89.3

Render an Iso Surface

ren = data.NewRenderer(renderer.VolumeIsoRenderer)
ren.SetVariableName(data.GetDataVarNames(3)[0]) # Set to first 2D data variable
ren.SetIsoValues([ren.GetIsoValues()[0]+0.1])

ses.GetCamera().ViewAll()
ses.Show()
UNSUPPORTED (log once): POSSIBLE ISSUE: unit 2 GLD_TEXTURE_INDEX_3D is unloadable and bound to sampler type (Float) - using zero texture because texture unloadable
../_images/77e3ad1b84d63fda4a5d533798f397809c19b233734ece0301925be72b513737.png

Create a visualizer to explore the scene

Try dragging the image to rotate the view. Hover over the visualizer to see the full controls.

viz = widget.VaporVisualizerWidget(ses)
viz

Add an interactive iso value slider using ipywidgets

tf = ren.GetPrimaryTransferFunction()
dataRange = tf.GetMinMaxMapValue()

def sliderChanged(change):
    ren.SetIsoValues([change.new])
    viz.Render(fast=True)

slider = widgets.FloatSlider(value=ren.GetIsoValues()[0], min=dataRange[0], max=dataRange[1], step=(dataRange[1]-dataRange[0])/100)
slider.observe(sliderChanged, names='value')

widgets.VBox([
    viz,
    widgets.HBox([widgets.Label("Iso value:"), slider])
])
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[4], line 8
      5     ren.SetIsoValues([change.new])
      6     viz.Render(fast=True)
----> 8 slider = widgets.FloatSlider(value=ren.GetIsoValues()[0], min=dataRange[0], max=dataRange[1], step=(dataRange[1]-dataRange[0])/100)
      9 slider.observe(sliderChanged, names='value')
     11 widgets.VBox([
     12     viz,
     13     widgets.HBox([widgets.Label("Iso value:"), slider])
     14 ])

NameError: name 'widgets' is not defined