Class Avogadro::QtGui::MeshGenerator#
-
class MeshGenerator : public QThread#
Class that can generate Mesh objects from Cube objects.
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/
- Author
Marcus D. Hanwell
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.
Public Functions
-
explicit MeshGenerator(QObject *parent = nullptr)#
Constructor.
-
MeshGenerator(const Core::Cube *cube, Core::Mesh *mesh, float iso, int passes = 6, bool reverse = false, QObject *parent = nullptr)#
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.
passes – Number of smoothing passes to perform.
- Returns:
True if the MeshGenerator was successfully initialized.
-
~MeshGenerator() override#
Destructor.
-
bool initialize(const Core::Cube *cube, Core::Mesh *mesh, float iso, int passes = 6, bool reverse = false)#
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.
passes – Number of smoothing passes to perform.
-
void run() override#
Use this function to begin Mesh generation. Uses an asynchronous thread, and so avoids locking the user interface while the isosurface is found.
-
void clear()#
Clears the contents of the MeshGenerator.
-
inline int progressMinimum()#
- Returns:
The minimum value of the progress value.
-
inline int progressMaximum()#
- Returns:
The maximum value of the progress value.
Signals
-
void progressValueChanged(int)#
The current value of the calculation’s progress.
Protected Functions
-
Vector3f normal(const Vector3f &pos)#
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.
-
float offset(float val1, float val2)#
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.
-
unsigned long duplicate(const Vector3i &c, const Vector3f &pos)#
-
bool marchingCube(const Vector3i &pos)#
Perform a marching cubes step on a single cube.
Protected Attributes
-
float m_iso#
-
int m_passes#
The value of the isosurface.
-
bool m_reverseWinding#
Number of smoothing passes to perform.
-
Vector3f m_stepSize#
The mesh that is being generated.
-
Vector3f m_min#
The step size vector for cube.
-
Vector3i m_dim#
The minimum point in the cube.
-
int m_progmin#
-
int m_progmax#
Protected Static Attributes
-
static const float a2fVertexOffset[8][3]#
These are the tables of constants for the marching cubes and tetrahedra algorithms. They are taken from the public domain source at http://local.wasp.uwa.edu.au/~pbourke/geometry/polygonise/
-
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]#