Note
Go to the end to download the full example code
Table of Glyphs#
vtk
supports tables of glyphs from which glyphs are looked
up. This example demonstrates this functionality.
import numpy as np
import pyvista as pv
We can allow tables of glyphs in a backward-compatible way by
allowing a sequence of geometries as well as single (scalar)
geometries to be passed as the geom
kwarg of pyvista.DataSetFilters.glyph()
.
An indices
optional keyword specifies the index of each glyph geometry in
the table, and it has to be the same length as geom
if specified. If it is
absent a default value of range(len(geom))
is assumed.
# get dataset for the glyphs: supertoroids in xy plane
# use N random kinds of toroids over a mesh with 27 points
N = 5
values = np.arange(N) # values for scalars to look up glyphs by
# taken from:
# rng = np.random.default_rng()
# params = rng.uniform(0.5, 2, size=(N, 2)) # (n1, n2) parameters for the toroids
params = np.array(
[
[1.56821334, 0.99649769],
[1.08247844, 1.83758874],
[1.49598881, 0.83495047],
[1.52442129, 0.89600688],
[1.92212387, 0.78096621],
]
)
geoms = [pv.ParametricSuperToroid(n1=n1, n2=n2) for n1, n2 in params]
# get dataset where to put glyphs
x, y, z = np.mgrid[:3.0, :3.0, :3.0]
mesh = pv.StructuredGrid(x, y, z)
# add random scalars
# rng_int = rng.integers(0, N, size=x.size)
rng_int = np.array(
[4, 1, 2, 0, 4, 0, 1, 4, 3, 1, 1, 3, 3, 4, 3, 4, 4, 3, 3, 2, 2, 1, 1, 1, 2, 0, 3]
)
mesh.point_data['scalars'] = rng_int
# construct the glyphs on top of the mesh; don't scale by scalars now
glyphs = mesh.glyph(geom=geoms, indices=values, scale=False, factor=0.3, rng=(0, N - 1))
# create plotter and add our glyphs with some nontrivial lighting
plotter = pv.Plotter()
plotter.add_mesh(glyphs, specular=1, specular_power=15, smooth_shading=True, show_scalar_bar=False)
plotter.show()
/home/runner/work/pyvista/pyvista/pyvista/core/filters/data_set.py:2320: UserWarning: No vector-like data to use for orient. orient will be set to False.
warnings.warn("No vector-like data to use for orient. orient will be set to False.")
Total running time of the script: (0 minutes 4.070 seconds)