issue_1218.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from vedo import *
  2. def render_slice(vslice, name):
  3. vslice.cut_with_scalar(rmin, "input_scalars", invert=True)
  4. vslice.triangulate()
  5. vslice.cmap(cmap_slicer, vmin=rmin, vmax=rmax).lighting("off")
  6. isos = vslice.isolines(vmin=rmin, vmax=rmax, n=12).c("black")
  7. vslice.name = name
  8. isos.name = name
  9. plt.remove(name).add(vslice, isos)
  10. def slider_function_x(widget, event):
  11. i = int(widget.value)
  12. if i == widget.previous_value:
  13. return
  14. widget.previous_value = i
  15. render_slice(vol.xslice(i), "XSlice")
  16. def slider_function_y(widget, event):
  17. j = int(widget.value)
  18. if j == widget.previous_value:
  19. return
  20. widget.previous_value = j
  21. render_slice(vol.yslice(j), "YSlice")
  22. def slider_function_z(widget, event):
  23. k = int(widget.value)
  24. if k == widget.previous_value:
  25. return
  26. widget.previous_value = k
  27. render_slice(vol.zslice(k), "ZSlice")
  28. if __name__ == "__main__":
  29. settings.default_font = "Roboto"
  30. cmap_slicer = "RdBu"
  31. datapath = download(dataurl+"geo_dataset.npy")
  32. dataset = np.load(datapath)
  33. min_value = np.nanmin(dataset)
  34. max_value = np.nanmax(dataset)
  35. rmin = np.nanquantile(dataset, q=0.30)
  36. rmax = np.nanquantile(dataset, q=0.95)
  37. # replace NaNs with a value to mask them in the rendered window
  38. nan_ind = np.isnan(dataset)
  39. dataset[nan_ind] = 0
  40. vol = Volume(dataset, spacing=[15, 15, 2])
  41. dims = vol.dimensions()
  42. iso = vol.isosurface(rmin).smooth()
  43. iso.cmap(cmap_slicer, vmin=min_value, vmax=max_value)
  44. iso.add_scalarbar3d(c="black", title="scalar value")
  45. iso.scalarbar = iso.scalarbar.clone2d("center-right", size=0.2)
  46. iso.c("k5").alpha(0.1).lighting("off").wireframe().pickable(False).backface_culling()
  47. plt = Plotter(size=(1400, 1200))
  48. plt.add_slider(
  49. slider_function_x,
  50. 0, dims[0],
  51. pos=[(0.7, 0.12), (0.95, 0.12)],
  52. show_value=False,
  53. c="dr",
  54. )
  55. plt.add_slider(
  56. slider_function_y,
  57. 0, dims[1],
  58. pos=[(0.7, 0.08), (0.95, 0.08)],
  59. show_value=False,
  60. c="dg",
  61. )
  62. plt.add_slider(
  63. slider_function_z,
  64. 0, dims[2],
  65. pos=[(0.7, 0.04), (0.95, 0.04)],
  66. show_value=False,
  67. c="db",
  68. )
  69. plt.show(iso, viewup="z", axes=1).close()