12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- """Generate the silhouette of a mesh
- as seen along a specified direction
- Axes font: """
- # Author: Zhi-Qiang Zhou (https://github.com/zhouzq-thu)
- from vedo import *
- settings.default_font = "Kanopus"
- s = Hyperboloid().rotate_x(20)
- pts = s.points
- n = len(pts)
- plt = Plotter(title="Example of project_on_plane()")
- plt += [s, __doc__ + settings.default_font]
- # orthogonal projection ###############################
- plane1 = Plane(pos=(2, 0, 2), normal=(1, 0, 1), s=[5, 5]).alpha(0.1)
- so = s.clone().project_on_plane(plane1).c("y")
- plt += [plane1, so, so.silhouette("2d")]
- pts1 = so.silhouette("2d").points
- # perspective projection ##############################
- plane2 = Plane(pos=(3, 3, 3), normal=(1, 1, 1), s=[5, 5]).alpha(0.1)
- point = [6, 6, 6]
- sp = s.clone().project_on_plane(plane2, point=point).c("m")
- plt += [plane2, sp, sp.silhouette("2d")]
- # oblique projection ##################################
- plane3 = Plane(pos=(4, 8, -4), normal=(-1, 0, 1), s=[5, 5]).alpha(0.1)
- sob = s.clone().project_on_plane(plane3, direction=(1, 2, -1)).c("g")
- plt += [plane3, sob, sob.silhouette("2d")]
- pts2 = sob.silhouette("2d").points
- # draw the lines
- for i in range(0, n, int(n / 20)):
- plt += Line(pts1[i], pts[i]).color("black",0.2)
- plt += Line(point, pts[i]).color("black",0.2)
- plt += Line(pts2[i], pts[i]).color("black",0.2)
- plt.show(
- axes=dict(
- xtitle="X-axis in :mum",
- ytitle="Y-axis in :mum",
- ztitle="Z-axis in :mum",
- yzgrid=False,
- text_scale=1.5,
- ),
- ).close()
|