|
@@ -14,10 +14,10 @@ namespace igl
|
|
|
{
|
|
|
namespace copyleft
|
|
|
{
|
|
|
- // marching_cubes( values, points, x_res, y_res, z_res, vertices, faces )
|
|
|
+ // marching_cubes( values, points, x_res, y_res, z_res, isovalue, vertices, faces )
|
|
|
//
|
|
|
- // performs marching cubes reconstruction on the grid defined by values, and
|
|
|
- // points, and generates vertices and faces
|
|
|
+ // performs marching cubes reconstruction on a grid defined by values, and
|
|
|
+ // points, and generates a mesh defined by vertices and faces
|
|
|
//
|
|
|
// Input:
|
|
|
// values #number_of_grid_points x 1 array -- the scalar values of an
|
|
@@ -34,51 +34,73 @@ namespace igl
|
|
|
// xres resolutions of the grid in x dimension
|
|
|
// yres resolutions of the grid in y dimension
|
|
|
// zres resolutions of the grid in z dimension
|
|
|
+ // isovalue the isovalue of the surface to reconstruct
|
|
|
// Output:
|
|
|
// vertices #V by 3 list of mesh vertex positions
|
|
|
// faces #F by 3 list of mesh triangle indices
|
|
|
//
|
|
|
- template <
|
|
|
- typename DerivedValues,
|
|
|
- typename DerivedPoints,
|
|
|
- typename DerivedVertices,
|
|
|
- typename DerivedFaces>
|
|
|
- IGL_INLINE void marching_cubes(
|
|
|
+ template <typename DerivedValues, typename DerivedPoints, typename DerivedVertices, typename DerivedFaces>
|
|
|
+ IGL_INLINE void marching_cubes(
|
|
|
const Eigen::MatrixBase<DerivedValues> &values,
|
|
|
const Eigen::MatrixBase<DerivedPoints> &points,
|
|
|
const unsigned x_res,
|
|
|
const unsigned y_res,
|
|
|
const unsigned z_res,
|
|
|
+ const double isovalue,
|
|
|
Eigen::PlainObjectBase<DerivedVertices> &vertices,
|
|
|
Eigen::PlainObjectBase<DerivedFaces> &faces);
|
|
|
|
|
|
- // marching_cubes( values, points, indices, vertices, faces )
|
|
|
- //
|
|
|
- // Perform marching cubes reconstruction on the grid cells defined by indices.
|
|
|
- // The indices parameter is an nx8 dense array of index values into the points and values arrays.
|
|
|
- // Each row of indices represents a cube for which to generate vertices and faces over.
|
|
|
- //
|
|
|
- // Input:
|
|
|
- // values #number_of_grid_points x 1 array -- the scalar values of an
|
|
|
- // implicit function defined on the grid points (<0 in the inside of the
|
|
|
- // surface, 0 on the border, >0 outside)
|
|
|
- // points #number_of_grid_points x 3 array -- 3-D positions of the grid
|
|
|
- // points, ordered in x,y,z order:
|
|
|
- // indices #cubes x 8 array -- one row for each cube where each value is
|
|
|
- // the index of a vertex in points and a scalar in values.
|
|
|
- // i.e. points[indices[i, j]] = the position of the j'th vertex of the i'th cube
|
|
|
- // Output:
|
|
|
- // vertices #V by 3 list of mesh vertex positions
|
|
|
- // faces #F by 3 list of mesh triangle indices
|
|
|
- // Note: The winding direction of the cube indices will affect the output winding of the faces
|
|
|
- //
|
|
|
- template <typename DerivedValues, typename DerivedPoints, typename DerivedVertices, typename DerivedIndices, typename DerivedFaces>
|
|
|
- IGL_INLINE void marching_cubes(
|
|
|
- const Eigen::MatrixBase<DerivedValues> &values,
|
|
|
- const Eigen::MatrixBase<DerivedPoints> &points,
|
|
|
- const Eigen::MatrixBase<DerivedIndices> &indices,
|
|
|
- Eigen::PlainObjectBase<DerivedVertices> &vertices,
|
|
|
- Eigen::PlainObjectBase<DerivedFaces> &faces);
|
|
|
+ // Overload of the above function where the isovalue defaults to 0.0
|
|
|
+ template <typename DerivedValues, typename DerivedPoints, typename DerivedVertices, typename DerivedFaces>
|
|
|
+ IGL_INLINE void marching_cubes(
|
|
|
+ const Eigen::MatrixBase<DerivedValues> &values,
|
|
|
+ const Eigen::MatrixBase<DerivedPoints> &points,
|
|
|
+ const unsigned x_res,
|
|
|
+ const unsigned y_res,
|
|
|
+ const unsigned z_res,
|
|
|
+ Eigen::PlainObjectBase<DerivedVertices> &vertices,
|
|
|
+ Eigen::PlainObjectBase<DerivedFaces> &faces);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // marching_cubes( values, points, indices, vertices, faces )
|
|
|
+ //
|
|
|
+ // Perform marching cubes reconstruction on the grid cells defined by indices.
|
|
|
+ // The indices parameter is an nx8 dense array of index values into the points and values arrays.
|
|
|
+ // Each row of indices represents a cube for which to generate vertices and faces over.
|
|
|
+ //
|
|
|
+ // Input:
|
|
|
+ // values #number_of_grid_points x 1 array -- the scalar values of an
|
|
|
+ // implicit function defined on the grid points (<0 in the inside of the
|
|
|
+ // surface, 0 on the border, >0 outside)
|
|
|
+ // points #number_of_grid_points x 3 array -- 3-D positions of the grid
|
|
|
+ // points, ordered in x,y,z order:
|
|
|
+ // indices #cubes x 8 array -- one row for each cube where each value is
|
|
|
+ // the index of a vertex in points and a scalar in values.
|
|
|
+ // i.e. points[indices[i, j]] = the position of the j'th vertex of the i'th cube
|
|
|
+ // Output:
|
|
|
+ // vertices #V by 3 list of mesh vertex positions
|
|
|
+ // faces #F by 3 list of mesh triangle indices
|
|
|
+ // Note: The winding direction of the cube indices will affect the output winding of the faces
|
|
|
+ //
|
|
|
+ template <typename DerivedValues, typename DerivedPoints, typename DerivedVertices, typename DerivedIndices, typename DerivedFaces>
|
|
|
+ IGL_INLINE void marching_cubes(
|
|
|
+ const Eigen::MatrixBase<DerivedValues> &values,
|
|
|
+ const Eigen::MatrixBase<DerivedPoints> &points,
|
|
|
+ const Eigen::MatrixBase<DerivedIndices> &indices,
|
|
|
+ const double isovalue,
|
|
|
+ Eigen::PlainObjectBase<DerivedVertices> &vertices,
|
|
|
+ Eigen::PlainObjectBase<DerivedFaces> &faces);
|
|
|
+
|
|
|
+ // Overload of the above function where the isovalue defaults to 0.0
|
|
|
+ template <typename DerivedValues, typename DerivedPoints, typename DerivedVertices, typename DerivedIndices, typename DerivedFaces>
|
|
|
+ IGL_INLINE void marching_cubes(
|
|
|
+ const Eigen::MatrixBase<DerivedValues> &values,
|
|
|
+ const Eigen::MatrixBase<DerivedPoints> &points,
|
|
|
+ const Eigen::MatrixBase<DerivedIndices> &indices,
|
|
|
+ Eigen::PlainObjectBase<DerivedVertices> &vertices,
|
|
|
+ Eigen::PlainObjectBase<DerivedFaces> &faces);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|