Note
Go to the end to download the full example code.
Triangle Strips#
This example shows how to build a simple pyvista.PolyData
using
triangle strips.
Triangle strips are a more efficient way of storing the connectivity of adjacent triangles.
Build the connectivity of the strips#
The first element is the number of points in the strip next three elements is the initial triangle the rest of the points is where the strip extends to.
Plot the triangle strips#
Plot the PolyData
and include the point labels using
add_point_labels()
so we can see how
the PolyData is constructed using triangle strips.
pl = pv.Plotter()
pl.add_mesh(mesh, show_edges=True)
pl.add_point_labels(mesh.points, range(mesh.n_points))
pl.camera_position = 'yx'
pl.camera.zoom(1.2)
pl.show()
Convert strips to triangles#
You can convert strips to triangle faces using triangulate
.
trimesh = mesh.triangulate()
trimesh
We can use this new pyvista.PolyData
to see how VTK represents
triangle strips as individual faces.
See how the faces array is much larger (~3x more) even for this basic example even despite representing the same data.
Note
The faces array from VTK always contains padding (the number of points in
the face) for each face in the face array. This is the initial 3
in
the following face array.
array([[3, 0, 1, 2],
[3, 2, 1, 3],
[3, 2, 3, 4],
[3, 4, 3, 5],
[3, 4, 5, 6],
[3, 6, 5, 7]])
Convert triangles to strips#
Convert faces from a pyvista.PolyData
to strips using strip()
. Here, for demonstration purposes we convert the
triangulated mesh back to a stripped mesh.
restripped = trimesh.strip()
restripped
The output from the strip
filter is, as expected, identical to the
original mesh
.
restripped == mesh
True
Total running time of the script: (0 minutes 0.212 seconds)