12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- from vedo import *
- def render_slice(vslice, name):
- vslice.cut_with_scalar(rmin, "input_scalars", invert=True)
- vslice.triangulate()
- vslice.cmap(cmap_slicer, vmin=rmin, vmax=rmax).lighting("off")
- isos = vslice.isolines(vmin=rmin, vmax=rmax, n=12).c("black")
- vslice.name = name
- isos.name = name
- plt.remove(name).add(vslice, isos)
- def slider_function_x(widget, event):
- i = int(widget.value)
- if i == widget.previous_value:
- return
- widget.previous_value = i
- render_slice(vol.xslice(i), "XSlice")
- def slider_function_y(widget, event):
- j = int(widget.value)
- if j == widget.previous_value:
- return
- widget.previous_value = j
- render_slice(vol.yslice(j), "YSlice")
- def slider_function_z(widget, event):
- k = int(widget.value)
- if k == widget.previous_value:
- return
- widget.previous_value = k
- render_slice(vol.zslice(k), "ZSlice")
- if __name__ == "__main__":
- settings.default_font = "Roboto"
- cmap_slicer = "RdBu"
- datapath = download(dataurl+"geo_dataset.npy")
- dataset = np.load(datapath)
- min_value = np.nanmin(dataset)
- max_value = np.nanmax(dataset)
- rmin = np.nanquantile(dataset, q=0.30)
- rmax = np.nanquantile(dataset, q=0.95)
- # replace NaNs with a value to mask them in the rendered window
- nan_ind = np.isnan(dataset)
- dataset[nan_ind] = 0
- vol = Volume(dataset, spacing=[15, 15, 2])
- dims = vol.dimensions()
- iso = vol.isosurface(rmin).smooth()
- iso.cmap(cmap_slicer, vmin=min_value, vmax=max_value)
- iso.add_scalarbar3d(c="black", title="scalar value")
- iso.scalarbar = iso.scalarbar.clone2d("center-right", size=0.2)
- iso.c("k5").alpha(0.1).lighting("off").wireframe().pickable(False).backface_culling()
- plt = Plotter(size=(1400, 1200))
- plt.add_slider(
- slider_function_x,
- 0, dims[0],
- pos=[(0.7, 0.12), (0.95, 0.12)],
- show_value=False,
- c="dr",
- )
- plt.add_slider(
- slider_function_y,
- 0, dims[1],
- pos=[(0.7, 0.08), (0.95, 0.08)],
- show_value=False,
- c="dg",
- )
- plt.add_slider(
- slider_function_z,
- 0, dims[2],
- pos=[(0.7, 0.04), (0.95, 0.04)],
- show_value=False,
- c="db",
- )
- plt.show(iso, viewup="z", axes=1).close()
|