OpenRM - RMV Library (rmviso.c)

## 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 as 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