This class implements the Extended Marching Cubes algorithm. More...
#include <extended_marching_cubes.h>
Classes | |
struct | LightEdge |
Public Types | |
typedef vcg::tri::Allocator < TRIMESH_TYPE > | AllocatorType |
typedef TRIMESH_TYPE::CoordType * | CoordPointer |
typedef TRIMESH_TYPE::CoordType | CoordType |
typedef TRIMESH_TYPE::FaceIterator | FaceIterator |
typedef TRIMESH_TYPE::FacePointer | FacePointer |
typedef TRIMESH_TYPE::FaceType | FaceType |
typedef TRIMESH_TYPE::ScalarType | ScalarType |
typedef _W64 unsigned int | size_t |
typedef TRIMESH_TYPE::VertexIterator | VertexIterator |
typedef TRIMESH_TYPE::VertexPointer | VertexPointer |
typedef TRIMESH_TYPE::VertexType | VertexType |
Public Member Functions | |
ExtendedMarchingCubes (TRIMESH_TYPE &mesh, WALKER_TYPE &walker, ScalarType angle=30) | |
void | Finalize () |
void | Initialize () |
void | ProcessCell (const vcg::Point3i &min, const vcg::Point3i &max) |
Private Member Functions | |
VertexPointer | FindFeature (const std::vector< size_t > &vertices_idx) |
void | FlipEdges () |
Private Attributes | |
vcg::Point3i | _corners [8] |
ScalarType | _featureAngle |
int | _featureFlag |
ScalarType | _field [8] |
bool | _finalized |
bool | _initialized |
TRIMESH_TYPE * | _mesh |
WALKER_TYPE * | _walker |
This class implements the Extended Marching Cubes algorithm.
The implementation is enough generic: this class works only on one volume cell for each call to ProcessCell
. Using the field value at the cell corners, it adds to the mesh the triangles set approximating the surface that cross that cell.
TRIMESH_TYPE | (Template parameter) the mesh type that will be constructed | |
WALKER_TYPE | (Template parameter) the class that implements the traversal ordering of the volume. |
Definition at line 70 of file extended_marching_cubes.h.
typedef vcg::tri::Allocator< TRIMESH_TYPE > vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::AllocatorType |
Definition at line 82 of file extended_marching_cubes.h.
typedef TRIMESH_TYPE::CoordType* vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::CoordPointer |
Definition at line 91 of file extended_marching_cubes.h.
typedef TRIMESH_TYPE::CoordType vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::CoordType |
Definition at line 90 of file extended_marching_cubes.h.
typedef TRIMESH_TYPE::FaceIterator vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::FaceIterator |
Definition at line 89 of file extended_marching_cubes.h.
typedef TRIMESH_TYPE::FacePointer vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::FacePointer |
Definition at line 88 of file extended_marching_cubes.h.
typedef TRIMESH_TYPE::FaceType vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::FaceType |
Definition at line 87 of file extended_marching_cubes.h.
typedef TRIMESH_TYPE::ScalarType vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::ScalarType |
Definition at line 83 of file extended_marching_cubes.h.
typedef _W64 unsigned int vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::size_t |
Definition at line 79 of file extended_marching_cubes.h.
typedef TRIMESH_TYPE::VertexIterator vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::VertexIterator |
Definition at line 86 of file extended_marching_cubes.h.
typedef TRIMESH_TYPE::VertexPointer vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::VertexPointer |
Definition at line 85 of file extended_marching_cubes.h.
typedef TRIMESH_TYPE::VertexType vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::VertexType |
Definition at line 84 of file extended_marching_cubes.h.
vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::ExtendedMarchingCubes | ( | TRIMESH_TYPE & | mesh, | |
WALKER_TYPE & | walker, | |||
ScalarType | angle = 30 | |||
) | [inline] |
Constructor
mesh | The mesh that will be constructed | |
volume | The volume describing the field | |
walker | The class implementing the traversal policy | |
angle | The feature detection threshold misuring the sharpness of a feature(default is 30 degree) |
Definition at line 105 of file extended_marching_cubes.h.
void vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::Finalize | ( | ) | [inline] |
This method must be executed after the last call to ApplyEMC
Definition at line 128 of file extended_marching_cubes.h.
VertexPointer vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::FindFeature | ( | const std::vector< size_t > & | vertices_idx | ) | [inline, private] |
Tests if the surface patch crossing the current cell contains a sharp feature
vertices_idx | The list of vertex indices intersecting the edges of the current cell |
Definition at line 279 of file extended_marching_cubes.h.
void vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::FlipEdges | ( | ) | [inline, private] |
Postprocessing step performed during the finalization tha flip some of the mesh edges. The flipping criterion is quite simple: each edge is flipped if it will connect two feature samples after the flip.
Definition at line 390 of file extended_marching_cubes.h.
void vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::Initialize | ( | ) | [inline] |
Execute the initialiazation. This method must be executed before the first call to ApplyEMC
Definition at line 117 of file extended_marching_cubes.h.
void vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::ProcessCell | ( | const vcg::Point3i & | min, | |
const vcg::Point3i & | max | |||
) | [inline] |
Apply the extended marching cubes algorithm to the volume cell identified by the two points min
and max
. All the three coordinates of the first point must be smaller than the respectives three coordinatas of the second point.
min | the first point | |
max | the second point |
Definition at line 150 of file extended_marching_cubes.h.
vcg::Point3i vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::_corners[8] [private] |
Array of the 8 corners of the volume cell being processed
Definition at line 267 of file extended_marching_cubes.h.
ScalarType vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::_featureAngle [private] |
The feature detection threshold misuring the sharpness of a feature
Definition at line 259 of file extended_marching_cubes.h.
int vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::_featureFlag [private] |
The flag used for marking the feature vertices.
Definition at line 263 of file extended_marching_cubes.h.
ScalarType vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::_field[8] [private] |
The field value at the cell corners
Definition at line 271 of file extended_marching_cubes.h.
bool vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::_finalized [private] |
Definition at line 252 of file extended_marching_cubes.h.
bool vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::_initialized [private] |
Definition at line 252 of file extended_marching_cubes.h.
TRIMESH_TYPE* vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::_mesh [private] |
Definition at line 249 of file extended_marching_cubes.h.
WALKER_TYPE* vcg::tri::ExtendedMarchingCubes< TRIMESH_TYPE, WALKER_TYPE >::_walker [private] |
Definition at line 241 of file extended_marching_cubes.h.