File: silhouette.py

package info (click to toggle)
python-pyvista 0.46.4-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 176,968 kB
  • sloc: python: 94,346; sh: 216; makefile: 70
file content (114 lines) | stat: -rw-r--r-- 2,984 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
"""
.. _silhouette_example:

Silhouette Highlight
~~~~~~~~~~~~~~~~~~~~

Extract a subset of the edges of a polygonal mesh to generate an outline
(silhouette) of a mesh.
The silhouette may be created using the `silhouette` keyword with
:meth:`~pyvista.Plotter.add_mesh`, or by using
`~pyvista.Plotter.add_silhouette` directly.

"""

from __future__ import annotations

import pyvista
from pyvista import examples

# %%
# Prepare a triangulated ``PolyData``
bunny = examples.download_bunny()

# %%
# Now we can display the silhouette of the mesh and compare the result:
plotter = pyvista.Plotter(shape=(1, 2))
plotter.subplot(0, 0)
plotter.add_mesh(bunny, color='lightblue', silhouette=True)
plotter.add_text('Silhouette')
plotter.view_xy()
plotter.subplot(0, 1)
plotter.add_mesh(bunny, color='lightblue')
plotter.add_text('No silhouette')
plotter.view_xy()
plotter.show()


# %%
# Maybe the default parameters are not enough to really notice the silhouette.
# But by using a ``dict``, it is possible to modify the properties of the
# outline. For example, color and width could be specified like so:
plotter = pyvista.Plotter()
silhouette = dict(
    color='red',
    line_width=8.0,
)
plotter.add_mesh(bunny, silhouette=silhouette)
plotter.view_xy()
plotter.show()


# %%
# By default, PyVista uses a pretty aggressive decimation level but we might
# want to disable it. It is also possible to display sharp edges:
cylinder = pyvista.Cylinder(
    center=(0, 0.04, 0),
    direction=(0, 1, 0),
    radius=0.15,
    height=0.03,
).triangulate()

plotter = pyvista.Plotter(shape=(1, 3))
plotter.subplot(0, 0)
plotter.add_mesh(
    cylinder,
    color='lightblue',
    smooth_shading=True,
    silhouette=dict(color='red', line_width=8.0, decimate=None, feature_angle=True),
)
plotter.add_text('Silhouette with sharp edges')
plotter.view_isometric()
plotter.subplot(0, 1)
plotter.add_mesh(
    cylinder,
    color='lightblue',
    smooth_shading=True,
    silhouette=dict(color='red', line_width=8.0, decimate=None),
)
plotter.add_text('Silhouette without sharp edges')
plotter.view_isometric()
plotter.subplot(0, 2)
plotter.add_mesh(cylinder, color='lightblue', smooth_shading=True)
plotter.add_text('No silhouette')
plotter.view_isometric()
plotter.show()


# %%
# Here is another example:
dragon = examples.download_dragon()
plotter = pyvista.Plotter()
plotter.set_background('black', top='blue')
plotter.add_mesh(
    dragon,
    color='green',
    specular=1,
    smooth_shading=True,
    silhouette=dict(line_width=8, color='white'),
)

plotter.add_mesh(
    cylinder,
    color='lightblue',
    smooth_shading=True,
    silhouette=dict(decimate=None, feature_angle=True, line_width=8, color='white'),
)
plotter.camera_position = [
    (-0.2936731887752889, 0.2389060430625446, 0.35138839367034236),
    (-0.005878899246454239, 0.12495124898850918, -0.004603400826454163),
    (0.34348225747312017, 0.8567703221182346, -0.38466160965007384),
]
plotter.show()
# %%
# .. tags:: plot