PolyData.decimate_pro(reduction, feature_angle=45.0, split_angle=75.0, splitting=True, pre_split_mesh=False, preserve_topology=False, boundary_vertex_deletion=True, max_degree=None, inplace=False, progress_bar=False)#

Reduce the number of triangles in a triangular mesh.

It forms a good approximation to the original geometry. Based on the algorithm originally described in “Decimation of Triangle Meshes”, Proc Siggraph 92 (


Reduction factor. A value of 0.9 will leave 10% of the original number of vertices.

feature_anglefloat, optional

Angle used to define what an edge is (i.e., if the surface normal between two adjacent triangles is >= feature_angle, an edge exists).

split_anglefloat, optional

Angle used to control the splitting of the mesh. A split line exists when the surface normals between two edge connected triangles are >= split_angle.

splittingbool, optional

Controls the splitting of the mesh at corners, along edges, at non-manifold points, or anywhere else a split is required. Turning splitting off will better preserve the original topology of the mesh, but may not necessarily give the exact requested decimation.

pre_split_meshbool, optional

Separates the mesh into semi-planar patches, which are disconnected from each other. This can give superior results in some cases. If pre_split_mesh is set to True, the mesh is split with the specified split_angle. Otherwise mesh splitting is deferred as long as possible.

preserve_topologybool, optional

Controls topology preservation. If on, mesh splitting and hole elimination will not occur. This may limit the maximum reduction that may be achieved.

boundary_vertex_deletionbool, optional

Allow deletion of vertices on the boundary of the mesh. Defaults to True. Turning this off may limit the maximum reduction that may be achieved.

max_degreefloat, optional

The maximum vertex degree. If the number of triangles connected to a vertex exceeds max_degree, then the vertex will be split. The complexity of the triangulation algorithm is proportional to max_degree**2. Setting max_degree small can improve the performance of the algorithm.

inplacebool, optional

Whether to update the mesh in-place.

progress_barbool, optional

Display a progress bar to indicate progress.


Decimated mesh.


Decimate a sphere. First plot the sphere.

>>> import pyvista
>>> sphere = pyvista.Sphere(phi_resolution=60, theta_resolution=60)
>>> sphere.plot(show_edges=True, line_width=2)

Now decimate it and plot it.

>>> decimated = sphere.decimate_pro(0.75)
>>> decimated.plot(show_edges=True, line_width=2)

See Decimation for more examples using this filter.