warp6.py 992 B

123456789101112131415161718192021222324252627282930
  1. """Press c while hovering to warp a Mesh onto another Mesh"""
  2. from vedo import *
  3. def on_keypress(event):
  4. if event.object and event.keypress == "c":
  5. picked = event.picked3d
  6. idx = mesh.closest_point(picked, return_point_id=True)
  7. n = normals[idx]
  8. p = verts[idx] + n / 5
  9. txt = Text3D("Text3D\nABCDEF", s=0.1, justify="centered").c("red5")
  10. txt.reorient([0,0,1], n).pos(p)
  11. tpts = txt.clone().subsample(0.05).vertices
  12. kpts = [mesh.closest_point(tp) for tp in tpts]
  13. warped = txt.clone().warp(tpts, kpts, sigma=0.01, mode="2d")
  14. warped.c("purple5")
  15. lines = Lines(tpts, kpts).alpha(0.2)
  16. plt.remove("Text3D", "Lines").add(txt, warped, lines).render()
  17. mesh = ParametricShape("RandomHills").scale([1,1,0.5])
  18. mesh.c("gray5").alpha(0.25)
  19. verts = mesh.vertices
  20. normals = mesh.vertex_normals
  21. plt = Plotter()
  22. plt.add_callback("key press", on_keypress)
  23. plt.show(mesh, __doc__, axes=9, viewup="z").close()