PyMCubes

February 7, 2014 ยท View on GitHub

======== PyMCubes

PyMCubes is an implementation of the marching cubes algorithm to extract isosurfaces from volumetric data. The volumetric data can be given as a three-dimensional NumPy array or as a Python function f(x, y, z). The first option is much faster, but it requires more memory and becomes unfeasible for very large volumes.

PyMCubes also provides a function to export the results of the marching cubes as COLLADA (.dae) files. This requires the PyCollada <https://github.com/pycollada/pycollada>_ library.

Installation

Just as any standard Python package, clone or download the project and run::

cdpath/to/PyMCubescd path/to/PyMCubes python setup.py build $ python setup.py install

If you do not have write permission on the directory of Python packages, install with the --user option::

$ python setup.py install --user

Example

The following example creates a data volume with spherical isosurfaces and extracts one of them (i.e., a sphere) with PyMCubes. The result is exported as sphere.dae::

import numpy as np import mcubes

Create a data volume (30 x 30 x 30)

X, Y, Z = np.mgrid[:30, :30, :30] u = (X-15)**2 + (Y-15)**2 + (Z-15)2 - 82

Extract the 0-isosurface

vertices, triangles = mcubes.marching_cubes(u, 0)

Export the result to sphere.dae

mcubes.export_mesh(vertices, triangles, "sphere.dae", "MySphere")

The second example is very similar to the first one, but it uses a function to represent the volume instead of a NumPy array::

import numpy as np import mcubes

Create the volume

f = lambda x, y, z: x2 + y2 + z**2

Extract the 16-isosurface

vertices, triangles = mcubes.marching_cubes_func((-10,-10,-10), (10,10,10), ... 100, 100, 100, f, 16)

Export the result to sphere2.dae

mcubes.export_mesh(vertices, triangles, "sphere2.dae", "MySphere")