"""Slice a Volume with an arbitrary plane
hover the plane to get the scalar values"""
from vedo import dataurl, precision, Sphere, Volume, Plotter

def func(evt):
    if not evt.object:
        return
    pid = evt.object.closest_point(evt.picked3d, return_point_id=True)
    txt = f"Probing:\n{precision(evt.object.picked3d, 3)}\nvalue = {arr[pid]}"

    pts = evt.object.points
    sph = Sphere(pts[pid]).c('orange7').pickable(False)
    fp = sph.flagpole(txt, s=7, offset=(-150,15), font=2).follow_camera()
    # remove old and add the two new objects
    plt.remove('Sphere', 'FlagPole').add(sph, fp).render()

vol = Volume(dataurl+'embryo.slc')
vol.cmap('white').alpha([0,0,0.8]).pickable(False)

vslice = vol.slice_plane(vol.center(), [0,1,1])
vslice.cmap('Purples_r').add_scalarbar('Slice', c='w')
arr = vslice.pointdata[0] # retrieve vertex array data
print("slice shape :", vslice.metadata["shape"])
print("slice bounds:", vslice.metadata["original_bounds"])

plt = Plotter(axes=9, bg='k', bg2='bb')
plt.add_callback('as my mouse moves please call', func) # be kind to vedo ;)
plt.show(vol, vslice, __doc__)
plt.close()
