marcomusy / vedo

A python module for scientific analysis of 3D data based on VTK and Numpy
https://vedo.embl.es
MIT License
1.98k stars 257 forks source link

How to add the slider? #1140

Open hanjiahe1999 opened 2 weeks ago

hanjiahe1999 commented 2 weeks ago
from vedo import *

vol = Volume(dataurl+'embryo.tif')

vol.crop(back=0.50) # crop 50% from neg. y

# show lego blocks whose value is between vmin and vmax
lego = vol.legosurface(vmin=20, vmax=None, boundary=False)
lego.cmap('seismic', vmin=0, vmax=127).add_scalarbar()

show(lego, __doc__, axes=1, viewup='z').close()

When I study this case, I want to try to add a slider to control the Lego display range. Do you have any good suggestions?

Thank you for your help!!

marcomusy commented 2 weeks ago

Have a look at examples/basic/sliders*.py

from vedo import *

settings.default_font = "Calco"

def slider_func(widget, event):
    value = widget.value
    lego = vol.legosurface(vmin=20, vmax=value, boundary=False)
    if lego.ncells:
        lego.cmap('seismic', vmin=0, vmax=value).add_scalarbar()
        # lego.linewidth(0).lighting('off').alpha(0.5)
    lego.name = "LegoSurface"
    plt.remove("LegoSurface").add(lego)
    plt.render()

vol = Volume(dataurl+'embryo.tif')
vol.crop(back=0.50) # crop 50% from neg. y

plt = Plotter()
plt.add_slider(
    slider_func,
    xmin=0,
    xmax=127,
    value=100,
    pos="bottom-left",
    title="value",
    # delayed=True,
)
plt += Axes(vol)
plt.show(viewup='z').close()

image