Mesh Timeseries¶

Mesh layers can provide multiple values for each vertex. This could represent changes in signal across time, different metrics (curvature and thickness) or different statistical measures (probability, z-score, effect size). This notebook provides a slider that allows you to interactively choose the frame_4d property of the layer.

This Python script mirrors the mesh time series web page.

In [1]:
import ipywidgets as widgets
from IPython.display import display

from ipyniivue import NiiVue, SliceType

nv = NiiVue(
    show_3d_crosshair=True,
    back_color=(0.9, 0.9, 1, 1),
)
nv.set_slice_type(SliceType.RENDER)

# Load meshes
mesh_layers = [
    {
        "path": "../images/Human.colin.R.FUNCTIONAL.71723.func.gii",
        "colormap": "rocket",
        "opacity": 0.7,
    },
]

meshes = [
    {
        "path": "../images/Human.colin.Cerebral.R.VERY_INFLATED.71723.surf.gii",
        "rgba255": [255, 255, 255, 255],
        "layers": mesh_layers,
    },
]
nv.load_meshes(meshes)

# Set the clip plane
nv.set_clip_plane(-0.1, 270, 0)

## User interface

# Timepoint Slider
slider_timepoint = widgets.IntSlider(min=0, max=1, value=0, description="Timepoint", readout=False)


def on_timepoint_change(change):
    """Set mesh layer frame 4D."""
    nv.set_mesh_layer_property(nv.meshes[0].id, 0, "frame_4d", change["new"])


slider_timepoint.observe(on_timepoint_change, names="value")

# Opacity Slider
slider_opacity = widgets.IntSlider(min=1, max=10, value=7, description="Opacity", readout=False)


def on_opacity_change(change):
    """Set mesh layer opacity."""
    nv.set_mesh_layer_property(nv.meshes[0].id, 0, "opacity", change["new"] * 0.1)


slider_opacity.observe(on_opacity_change, names="value")

shader_options = nv.mesh_shader_names()

shader_dropdown = widgets.Dropdown(
    options=shader_options,
    value="Phong",  # Default shader
    description="Shader:",
)


def on_shader_change(change):
    """Set mesh layer shader."""
    nv.set_mesh_shader(nv.meshes[0].id, change["new"])


shader_dropdown.observe(on_shader_change, names="value")

controls = widgets.HBox([slider_timepoint, slider_opacity, shader_dropdown])

## Display

display(controls)
display(nv)
In [ ]:
 
In [ ]: