# Slider Bar Widget
# =================

# The slider widget can be enabled and disabled by the
# `pyvista.Plotter.add_slider_widget()` and
# `pyvista.Plotter.clear_slider_widgets()` methods respectively.
# This is one of the most versatile widgets as it can control a value that can
# be used for just about anything.
# One helper method we've added is the
# `pyvista.Plotter.add_mesh_threshold()` method which leverages the
# slider widget to control a thresholding value.
import pyvista as pv
from pyvista import examples

mesh = examples.download_knee_full()

pl = pv.Plotter()
pl.add_mesh_threshold(mesh)
pl.show()

# After interacting with the scene, the threshold mesh is available as:
pl.widgets.threshold_meshes

# And here is a screen capture of a user interacting with this

# Custom Callback
# ---------------

# Or you could leverage a custom callback function that takes a single value
# from the slider as its argument to do something like control the resolution
# of a mesh. Again note the use of the `name` argument in `add_mesh`:
pl = pv.Plotter()


def create_mesh(value):
    res = int(value)
    sphere = pv.Sphere(phi_resolution=res, theta_resolution=res)
    pl.add_mesh(sphere, name='sphere', show_edges=True)


pl.add_slider_widget(create_mesh, [5, 100], title='Resolution')
pl.show()

# And here is a screen capture of a user interacting with this
# %%
# .. tags:: widgets

# ----------------------------------------------------------------------
# Generated by sphinx-examples-as-code https://github.com/pyvista/sphinx-examples-as-code

