skip to navigation
skip to content

PyACVD 0.1.1

Uniformly remeshes vtk surface meshes

This module takes a vtk surface mesh (vtkPolyData) surface and returns a uniformly meshed surface also as a vtkPolyData. It is based on research by: S. Valette, and J. M. Chassery in ACVD.

Much of this code was translated from the C++ source code available on the above website. Cython was used as much of the remeshing process is of an iterative nature. This is currently a work in progress and any bugs within this module do not reflect the true nature of ACVD developed by S. Valette.


Installation is straightforward using pip:

$ pip install PyACVD

You can also visit GitHub to download the latest source and install it running the following from the source directory:

$ pip install .

You will need a working copy of VTK. This can be obtained by either building for the source or installing it using a Python distrubution like Anaconda. The other dependencies are numpy and cython.


You can test if your installation works by running the following tests included in the package.

from PyACVD import Tests

# Run Stanford bunny remeshing example

# Run non-uniform sphere remeshing example


This example loads a surface mesh, generates 10000 clusters, and creates a uniform mesh.

from PyACVD import Clustering

# Load mesh from file.
filename = 'file.stl'
stlReader = vtk.vtkSTLReader()
mesh = stlReader.GetOutput()

# Create clustering object
cobj = Clustering.Cluster(target)

# Generate clusters

# Generate uniform mesh

# Get mesh
remesh = cobj.ReturnNewMesh()

# The clustered original mesh and new mesh can be viewed with:
cobj.PlotClusters()   # must run cobj.GenClusters first
cobj.PlotRemesh()     # must run cobj.GenMesh first

Python Algorthim Restrictions

The vtkPolyData mesh should not contain duplicate points (i.e. adjcent faces should share identical points). If not already done so, clean the mesh using vtk.vtkCleanPolyData

The number of resulting points is limited by the available memory of the host computer. If approaching the upper limit of your available memory, reduce the “subratio” option when generating the mesh. As it will be pointed out below, the coarser the mesh, the less accurate the solution.

The input mesh should be composed of one surface. Unexpected behavior may result from a multiple input meshes, though some testing has shown that it is stable.

Holes in the input mesh may not be filled by the module and will result in a non-manifold output.

Known bugs

  • Cluster sizes are highly dependent on initial cluster placement.
  • Clusters one face (or point) large will generate highly non-uniform meshes.
File Type Py Version Uploaded on Size
PyACVD-0.1.1-cp27-cp27m-win_amd64.whl (md5) Python Wheel 2.7 2017-06-09 3MB
PyACVD-0.1.1-cp35-cp35m-win_amd64.whl (md5) Python Wheel 3.5 2017-06-09 3MB
PyACVD-0.1.1-cp36-cp36m-win_amd64.whl (md5) Python Wheel 3.6 2017-06-09 3MB
PyACVD-0.1.1.tar.gz (md5) Source 2017-06-09 3MB