PyVista accessor (recommended, `pyvista >= 0.48`)
May 8, 2026 · View on GitHub
######## pyacvd ########
.. image:: https://img.shields.io/pypi/v/pyacvd.svg :target: https://pypi.org/project/pyacvd/
This module takes a surface mesh and returns a uniformly meshed surface
using voronoi clustering. This approach is loosely based on research by
S. Valette, and J. M. Chassery in ACVD <https://github.com/valette/ACVD>_.
Installation
Installation is straightforward using pip:
.. code::
$ pip install pyacvd
Examples
PyVista accessor (recommended, pyvista >= 0.48)
Installing pyacvd registers an acvd namespace on every
pyvista.PolyData, so uniform remeshing slots straight into a PyVista
pipeline. Once pyacvd is imported (or auto-discovered via PyVista's
entry-point system) you can call mesh.acvd.<method>(...) directly:
.. code:: python
import pyacvd # registers mesh.acvd
from pyvista import examples
cow = examples.download_cow().triangulate()
one-shot uniform remesh: subdivide → cluster → rebuild
remesh = cow.acvd.remesh(20000, subdivide=3) remesh.plot(color='w', show_edges=True)
The accessor never mutates the source mesh and always returns a fresh
pv.PolyData. Available methods:
-
mesh.acvd.remesh(n_clusters, subdivide=0, fast=False, ...)— one-shot uniform remesh. -
mesh.acvd.clustering(weights=None, subdivide=0)— return a configuredpyacvd.Clusteringfor fine-grained control (plotting clusters, mixing fast/uniform clustering, etc.). -
mesh.acvd.cluster_ids(n_clusters, ...)— per-point cluster id array, useful for visualization. -
mesh.acvd.subdivide(n)— linearly subdivide the surface.
Classic Clustering API
This example remeshes a non-uniform quad mesh into a uniform triangular mesh. The classic API works on every supported PyVista version; the accessor above is a thin convenience layer on top.
.. code:: python
from pyvista import examples import pyacvd
download cow mesh
cow = examples.download_cow()
plot original mesh
cow.plot(show_edges=True, color='w')
.. image:: https://github.com/pyvista/pyacvd/raw/main/docs/images/cow.png :alt: original cow mesh
.. image:: https://github.com/pyvista/pyacvd/raw/main/docs/images/cow_zoom.png :alt: zoomed cow mesh
.. code:: python
clus = pyacvd.Clustering(cow)
mesh is not dense enough for uniform remeshing
clus.subdivide(3) clus.cluster(20000)
plot clustered cow mesh
clus.plot()
.. image:: https://github.com/pyvista/pyacvd/raw/main/docs/images/cow_clus.png :alt: zoomed cow mesh
.. code:: python
remesh
remesh = clus.create_mesh()
plot uniformly remeshed cow
remesh.plot(color='w', show_edges=True)
.. image:: https://github.com/pyvista/pyacvd/raw/main/docs/images/cow_remesh.png :alt: zoomed cow mesh