tetralize_surface.py 920 B

1234567891011121314151617181920212223242526272829
  1. """Tetralize a closed surface mesh
  2. Click on the mesh and press ↓ or x to toggle a piece"""
  3. from vedo import dataurl, Sphere, TessellatedBox, settings, Mesh, show
  4. settings.use_depth_peeling = True
  5. # surf = Sphere(quads=True, res=15)
  6. # surf = TessellatedBox()
  7. # surf = Mesh(dataurl+'290_closed.vtk')
  8. surf = Mesh(dataurl+'bunny.obj', c='g3').fill_holes().cap().smooth()
  9. tmesh = surf.tetralize(side=0.015, debug=True)
  10. #tmesh.write('mytetmesh.vtk') # save to disk!
  11. # Assign an id to each tetrahedron to visualize regions
  12. seeds = surf.clone().subsample(0.3)
  13. cids = []
  14. for p in tmesh.cell_centers().coordinates:
  15. cid = seeds.closest_point(p, return_point_id=True)
  16. cids.append(cid)
  17. tmesh.celldata["fragments"] = cids
  18. pieces = []
  19. for i in range(seeds.npoints):
  20. tc = tmesh.clone().threshold("fragments", above=i-0.1, below=i+0.1)
  21. mc = tc.shrink(0.95).tomesh().color(i)
  22. pieces.append(mc)
  23. show(__doc__, pieces, axes=1)