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