There are two main methods of interpolating or sampling data from a target mesh in PyVista. pyvista.DataSetFilters.interpolate() uses a distance weighting kernel to interpolate point data from nearby points of the target mesh onto the desired points. pyvista.DataSetFilters.sample() interpolates data using the interpolation scheme of the enclosing cell from the target mesh.

If the target mesh is a point cloud, i.e. there is no connectivity in the cell structure, then pyvista.DataSetFilters.interpolate() is typically preferred. If interpolation is desired within the cells of the target mesh, then pyvista.DataSetFilters.sample() is typically desired.

This example uses pyvista.DataSetFilters.sample(). For pyvista.DataSetFilters.interpolate(), see Interpolating.

Resample one mesh’s point/cell arrays onto another mesh’s nodes.

This example will resample a volumetric mesh’s scalar data onto the surface of a sphere contained in that volume.

from __future__ import annotations

import pyvista as pv
from pyvista import examples

Simple Resample#

Query a grid’s points onto a sphere

mesh = pv.Sphere(center=(4.5, 4.5, 4.5), radius=4.5)
data_to_probe = examples.load_uniform()

Plot the two datasets

p = pv.Plotter()
p.add_mesh(mesh, color=True)
p.add_mesh(data_to_probe, opacity=0.5)

Run the algorithm and plot the result

result = mesh.sample(data_to_probe)

# Plot result
name = "Spatial Point Data"
result.plot(scalars=name, clim=data_to_probe.get_data_range(name))

Complex Resample#

Take a volume of data and create a grid of lower resolution to resample on

data_to_probe = examples.download_embryo()
mesh = pv.create_grid(data_to_probe, dimensions=(75, 75, 75))

result = mesh.sample(data_to_probe)
threshold = lambda m: m.threshold(75.0, scalars='SLCImage')
cpos = [
    (468.9075585873713, -152.8280322856109, 152.13046602188035),
    (121.65121514580106, 140.29327609542105, 112.28137570357188),
    (-0.10881224951051659, 0.006229357618166009, 0.9940428006178236),
dargs = dict(clim=[0, 200], cmap='rainbow')

p = pv.Plotter(shape=(1, 2))
p.add_mesh(threshold(data_to_probe), **dargs)
p.subplot(0, 1)
p.add_mesh(threshold(result), **dargs)

Total running time of the script: (0 minutes 7.097 seconds)

Gallery generated by Sphinx-Gallery