Index of OpenRM - RMV Library


 RMenum rmvK3MarchingCubes (RMvertex3D (*appgridfunc)(int i, int j, int k, int isize, int jsize, int ksize, float *baseX, float *baseY, float *baseZ),
		            float (*appdatafunc)(int i, int j, int k, float *data),
			    float (*appdata2func)(int i, int j, int k, float *data),
			    const RMvisMap *vmap,
			    int iusize,
			    int ivsize,
			    int iwsize,
			    float isolevel,
			    RMnode *n,
			    float *baseX,
			    float *baseY,
			    float *baseZ,
			    float *baseData)
 RMvertex3D (*appgridfunc)(int i, int j, int k) - a handle to a
    caller-supplied function that returns an RMvertex3D (x, y, z)
    corresponding to the grid point (i, j, k) (input).
 float (*appdatafunc)(int i, int j, int k) - a handle to a
    caller-supplied function that returns a float which is the scalar
    value at the grid point (i, j, k) (input).
 float (*appdata2func)(int i, int j, int k) - a handle to a
    caller-supplied function that returns a float which is the scalar
    value at the grid point (i).  This value is used in conjunction
    with the RMvismap to compute vertex color (input).
 const RMvisMap *vmap - a handle to an RMvisMap object (input).
 int iusize, ivsize, iwsize - int specifying the (u, v, w) dimensions
    of the data grid (input).
 float isolevel - a float specifying the isosurface scalar value
    (input).
 RMnode *n - a handle to an RMnode (modified).
 float *baseX, *baseY, *baseZ, *baseData (input) - these are caller-supplied
     pointers to arrays corresponding to the x, y, and z coordinates, and
     the scalar field being isocontoured. These arrays are not modified
     by rmv3KMarchingCubes, but instead are passed to the application-
     supplied callback routines. The objective of these pointers is to
     help alleviate the burden of requiring the application to maintain
     static pointers to data and coordinates.

Computes an isosurface using the Marching Cubes algorithm. The caller-supplied functions specify the uniform structured grid with scalar values at the grid points. An RMvisMap can be used along with the secondary data function to control vertex coloring via transfer functions.

This routine assumes a valid output RMnode to which the triangles generated by Marching Cubes are added. Upon success, RM_CHILL is returned and the RMnode contains the geometry for the isosurface. Otherwise, RM_WHACKED is returned.

librmv library source file: rmviso.c