Class that can generate Mesh objects from Cube objects.
More...
#include <avogadro/qtgui/meshgenerator.h>
|
Vector3f | normal (const Vector3f &pos) |
|
float | offset (float val1, float val2) |
|
unsigned long | duplicate (const Vector3i &c, const Vector3f &pos) |
|
bool | marchingCube (const Vector3i &pos) |
|
|
static const float | a2fVertexOffset [8][3] |
|
static const int | a2iVertexOffset [8][3] |
|
static const int | a2iEdgeConnection [12][2] |
|
static const float | a2fEdgeDirection [12][3] |
|
static const int | a2iTetrahedronEdgeConnection [6][2] |
|
static const int | a2iTetrahedronsInACube [6][4] |
|
static const long | aiTetrahedronEdgeFlags [16] |
|
static const int | a2iTetrahedronTriangles [16][7] |
|
static const long | aiCubeEdgeFlags [256] |
|
static const int | a2iTriangleConnectionTable [256][16] |
|
- Author
- Marcus D. Hanwell
This class implements a method of generating an isosurface Mesh from volumetric data using the marching cubes algorithm. In the case of the MeshGenerator class it expects a Cube as an input and an isosurface value. The tables and the basic code is taken from the public domain code written by Cory Bloyd (marchingsource.cpp) and available at, http://local.wasp.uwa.edu.au/~pbourke/geometry/polygonise/
You must first initialize the class and then call run() to actually polygonize the isosurface. Connect to the classes finished() signal to do something once the polygonization is complete.
◆ MeshGenerator() [1/2]
◆ MeshGenerator() [2/2]
Constructor. Can be used to initialize the MeshGenerator.
- Parameters
-
cube | The source Cube with the volumetric data. |
mesh | The Mesh that will hold the isosurface. |
iso | The iso value of the surface. |
- Returns
- True if the MeshGenerator was successfully initialized.
◆ ~MeshGenerator()
◆ initialize()
Initialization function, set up the MeshGenerator ready to find an isosurface of the supplied Cube.
- Parameters
-
cube | The source Cube with the volumetric data. |
mesh | The Mesh that will hold the isosurface. |
iso | The iso value of the surface. |
◆ run()
Use this function to begin Mesh generation. Uses an asynchronous thread, and so avoids locking the user interface while the isosurface is found.
◆ cube()
- Returns
- The Cube being used by the class.
◆ mesh()
- Returns
- The Mesh being generated by the class.
◆ clear()
◆ progressMinimum()
- Returns
- The minimum value of the progress value.
◆ progressMaximum()
- Returns
- The maximum value of the progress value.
◆ progressValueChanged
void progressValueChanged |
( |
int |
| ) |
|
|
signal |
The current value of the calculation's progress.
◆ normal()
Vector3f normal |
( |
const Vector3f & |
pos | ) |
|
|
protected |
Get the normal to the supplied point. This operation is quite expensive and so should be avoided wherever possible.
- Parameters
-
pos | The position of the vertex whose normal is needed. |
- Returns
- The normal vector for the supplied point.
◆ offset()
float offset |
( |
float |
val1, |
|
|
float |
val2 |
|
) |
| |
|
protected |
Get the offset, i.e. the approximate point of intersection of the surface between two points.
- Parameters
-
val1 | The position of the vertex whose normal is needed. |
- Returns
- The normal vector for the supplied point.
◆ marchingCube()
bool marchingCube |
( |
const Vector3i & |
pos | ) |
|
|
protected |
Perform a marching cubes step on a single cube.
◆ m_reverseWinding
The value of the isosurface.
◆ m_cube
Whether the winding and normals are reversed
◆ m_mesh
The cube that we are generating a Mesh from.
◆ m_stepSize
The mesh that is being generated.
◆ m_min
The step size vector for cube
◆ m_dim
The minimum point in the cube.
◆ m_vertices
The dimensions of the cube.
◆ a2fVertexOffset
const float a2fVertexOffset[8][3] |
|
staticprotected |
The documentation for this class was generated from the following file: