12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- """Isosurface extraction from a volume dataset
- with discrete values (labels)."""
- from vedo import *
- settings.default_font = "Antares"
- lut = build_lut(
- [
- [0, "lightyellow"],
- [1, "red8"],
- [2, "blue"],
- [3, "yellow"],
- [4, "orange"],
- [5, "cyan"],
- [6, "magenta"],
- [7, "white"],
- [8, "pink"],
- [9, "brown"],
- [10, "lightblue"],
- [11, "lightgreen"],
- [12, "red4"],
- ],
- interpolate=False,
- )
- # This dataset is a 3D volume of 64x64x64 voxels containing 12 "blobs"
- blobs = Volume(dataurl + "blobs.vti")
- box = blobs.box()
- isovalues = list(range(1, 13))
- iso_discrete = blobs.isosurface_discrete(
- isovalues,
- background_label=0,
- internal_boundaries=True,
- nsmooth=10,
- )
- iso_discrete.cmap(lut)
- separate_blobs = []
- txt_vols = []
- for i in isovalues:
- b = iso_discrete.clone().threshold(0, i - 0.5, i + 0.5, on="cells")
- b.cap().clean().compute_normals()
- b.color(i).alpha(0.1).wireframe().lighting("off")
- v = b.volume() / 1e3
- cm = b.center_of_mass()
- txt = Text3D(f"blob {i}\nvol={v:.2f}", c=i, justify="center", pos=cm)
- txt_vols.append(txt)
- separate_blobs.append(b)
- show([[iso_discrete, box, __doc__], [separate_blobs, txt_vols, box]], N=2, axes=1)
|