Note
Go to the end to download the full example code.
Wrapping Other Objects#
You can wrap() several other object types using pyvista including:
numpyarraystrimesh.TrimeshmeshesVTK objects
This allows for the “best of both worlds” programming special to Python due to its modularity. If there’s some limitation of pyvista (or trimesh), then you can adapt your scripts to use the best features of more than one module.
from __future__ import annotations
import numpy as np
import trimesh
import vtk
import pyvista as pv
Wrap Point Arrays#
Wrap a point cloud composed of random points from numpy.
rng = np.random.default_rng(seed=0)
points = rng.random((30, 3))
cloud = pv.wrap(points)
pv.plot(
cloud,
scalars=points[:, 2],
render_points_as_spheres=True,
point_size=50,
opacity=points[:, 0],
cpos='xz',
)

Wrap Trimesh Objects#
Create a simple trimesh.Trimesh and wrap it.
PolyData (0x7afd21321900)
N Cells: 1
N Points: 3
N Strips: 0
X Bounds: 0.000e+00, 0.000e+00
Y Bounds: 0.000e+00, 1.000e+00
Z Bounds: 0.000e+00, 1.000e+00
N Arrays: 0
We can also convert to a trimesh.Trimesh mesh with to_trimesh().
First create PolyData with data.
mesh = pv.Sphere()
mesh.point_data['point_ids'] = np.arange(mesh.n_points)
mesh.cell_data['cell_ids'] = np.arange(mesh.n_cells)
mesh.field_data['misc'] = np.array([1, 2, 3])
mesh.user_dict['name'] = 'sphere'
mesh.user_dict['number'] = 42
Now convert it.
tmesh = pv.to_trimesh(mesh)
print(tmesh)
<trimesh.Trimesh(vertices.shape=(842, 3), faces.shape=(1680, 3))>
Point data is accessible via vertex_attributes.
print(tmesh.vertex_attributes.keys())
dict_keys(['point_ids'])
Cell data is accessible via face_attributes.
print(tmesh.face_attributes.keys())
dict_keys(['cell_ids'])
Field data is accessible via metadata. Both field data keys and
user_dict keys are stored.
print(tmesh.metadata)
{'misc': pyvista_ndarray([1, 2, 3]), 'name': 'sphere', 'number': 42}
Use from_trimesh() to convert it back to a PolyData mesh.
This is the same as using wrap().
The data contained in the trimesh object is recovered as point data,
print(pvmesh.point_data.keys())
['point_ids']
cell data,
print(pvmesh.cell_data.keys())
['cell_ids']
and field data, including field data stored in the user_dict:
print(pvmesh.field_data.keys())
print(pvmesh.user_dict)
['misc', '_PYVISTA_USER_DICT']
{"name": "sphere", "number": 42}
Wrap VTK Meshes#
Wrap an instance of vtkPolyData
PolyData (0x7afcff281780)
N Cells: 1
N Points: 1
N Strips: 0
X Bounds: 1.000e+00, 1.000e+00
Y Bounds: 2.000e+00, 2.000e+00
Z Bounds: 3.000e+00, 3.000e+00
N Arrays: 0
Total running time of the script: (0 minutes 37.425 seconds)