ImFusion SDK 4.3
Mesh Class Reference

#include <ImFusion/Mesh/Mesh.h>

Represents a triangle mesh. More...

+ Inheritance diagram for Mesh:

Detailed Description

Represents a triangle mesh.

Mesh consists of vertices and triangular faces.

The other most important properties are: normals, colors and texture coordinates with correspoding texture image. These properties can be assigned to vertices or/and to halfedges (see definition of the halfedges here https://www.graphics.rwth-aachen.de/media/openmesh_static/Documentations/OpenMesh-5.2-Documentation/a00016.html). In short, if a property should be face-dependent, the halfedge properties should be used, if a property is face-independent, the vertex properties should be used.

Examples
ExampleMeshAlgorithm.cpp, and ExampleMeshAlgorithm.h.

Classes

struct  TopologyErrors
 Adds a new face, consisting of the 3 existing(!) vertices specified by their indices. More...
 

Public Types

enum class  VertexNormalWeighting { Uniform , Angle , Area , NelsonMax }
 Weighting schemes for averaging normals of faces around a vertex to obtain vertex normals. More...
 
using index_type = unsigned int
 
- Public Types inherited from Data
enum  Kind {
  UNKNOWN = 0 , IMAGE = 1 , VOLUME = 2 , IMAGESET = 3 ,
  VOLUMESET = 4 , IMAGESTREAM = 5 , VOLUMESTREAM = 6 , POINTSET = 7 ,
  SURFACE = 8 , TRACKINGSTREAM = 9 , LIVETRACKINGSTREAM = TRACKINGSTREAM , TRACKINGDATA = 10 ,
  TREE = 11 , TENSOR = 12 , POLYDATASTREAM = 13 , STEREOIMAGESET = 14 ,
  STEREOIMAGESTREAM = 15 , VOLUMETRICMESH = 16
}
 Kind of data. More...
 
enum  Modality {
  NA = 0 , XRAY = 1 , CT = 2 , MRI = 3 ,
  ULTRASOUND = 4 , VIDEO = 5 , NM = 6 , OCT = 7 ,
  LABEL = 8 , DISTANCE = 9
}
 Image modality of the data. More...
 

Public Member Functions

 Mesh (const std::string &name="")
 Constructs an empty mesh.
 
 Mesh (const Mesh &other)
 Copy constructor with another mesh instance.
 
Meshoperator= (const Mesh &other)
 Copy assignment operator.
 
bool vertexIndexValid (int index) const
 Checks whether index is within the vertex range.
 
bool faceIndexValid (int index) const
 Checks whether index is within the face range.
 
size_t numberOfVertices () const
 Number of vertices currently stored. May still include recently deleted vertices if no garbage collection has been performed.
 
size_t numberOfFaces () const
 Number of faces currently stored. May still include recently deleted faces if no garbage collection has been performed.
 
vec3 vertex (int index) const
 
void setVertex (int index, const vec3 &pos)
 
bool isVertexManifold (int index) const
 Check if vertex is manifold, i.e. there is maximum one outgoing boundary halfedge and there are no known duplicates.
 
vec3 vertexNormal (int vertexIndex) const
 
vec3 halfedgeNormal (int vertexIndex, int faceIndex) const
 
void setVertexNormal (int vertexIndex, const vec3 &normal)
 
void setHalfedgeNormal (int vertexIndex, int faceIndex, const vec3 &normal)
 
vec4f vertexColor (int vertexIndex) const
 
vec4f halfedgeColor (int vertexIndex, int faceIndex) const
 
void setVertexColor (int index, const vec4f &color)
 
void setHalfedgeColor (int vertexIndex, int faceIndex, const vec4f &color)
 
void setVertexColor (int index, const vec3f &color, double alpha=1.0)
 
void setHalfedgeColor (int vertexIndex, int faceIndex, const vec3f &color, double alpha=1.0)
 
vec2f vertexTexCoord (int vertexIndex) const
 
vec2f halfedgeTexCoord (int vertexIndex, int faceIndex) const
 
void setVertexTexCoord (int vertexIndex, const vec2f &coord)
 
void setHalfedgeTexCoord (int vertexIndex, int faceIndex, const vec2f &coord)
 
vec2i halfedgeVertices (int vertexIndex, int faceIndex) const
 Get the indices of halfedge vertices, first being "from" vertex, second being "to" vertex.
 
std::vector< int > knownDuplicates (int v) const
 Get known duplicates of the vertex (usually there should be none, duplicate vertices are explicitely created when the loaded/created mesh has invalid topology, for example if one edge is shared by more than 2 faces)
 
std::vector< int > vertexFaces (int v, bool considerDuplicates=true) const
 Get all the faces which contain an input vertex and optionally vertex duplicates.
 
std::vector< int > vertexNeighboringVertices (int v, bool considerDuplicates=true) const
 Get all the neighboring vertices (and optionally their duplicates) of an input vertex (and optionally its duplicates)
 
std::vector< int > faceNeighboringFaces (int v, bool considerDuplicates=true) const
 Get all the neighboring faces of an input face (those that share an edge). If face vertices have duplicates, optionally the faces which contain those duplicates will also be added.
 
bool hasVertexNormals () const
 
void removeVertexNormals ()
 
bool hasVertexColors () const
 
void removeVertexColors ()
 
bool hasVertexTexCoords () const
 
void removeVertexTexCoords ()
 
bool hasHalfedgeNormals () const
 
void removeHalfedgeNormals ()
 
bool hasHalfedgeColors () const
 
void removeHalfedgeColors ()
 
bool hasHalfedgeTexCoords () const
 
void removeHalfedgeTexCoords ()
 
void unifyHalfedgeProperties (bool unifyHalfedgeNormals=true, bool unifyHalfedgeColors=true, bool unifyHalfedgeTexCoords=true, bool forceUnification=false)
 Converts halfedge to vertex properties if this can be done without losing information Compares the normals, colors and texture coordinates between all halfedges belonging to each vertex.
 
vec3i faceVertices (int index) const
 Returns a list of all vertices associated with the given face.
 
vec3 faceNormal (int faceIndex) const
 Returns the normal of the given face.
 
void setFaceLabel (int face, unsigned int label, bool createTexture=true)
 Set label of the face.
 
void setFaceLabels (const std::vector< unsigned int > &labels)
 Set label of all faces.
 
unsigned int faceLabel (int face) const
 Get label of the face.
 
bool hasFaceLabels () const
 Returns true if mesh contains face labels.
 
void requestFaceLabels ()
 If faces have no labels, add them and set labels of all faces to 0.
 
void setVertexLabel (int vertex, unsigned int label)
 Set label of the vertex.
 
unsigned int vertexLabel (int vertex) const
 Get label of the vertex.
 
bool hasVertexLabels () const
 Returns true if mesh contains vertex labels.
 
void requestVertexLabels ()
 If vertices have no labels, set labels of all vertices to 0.
 
int addVertex (const vec3 &position)
 Adds a new vertex at the given position. Returns index of newly added vertex.
 
int addFace (const vec3i &vertexIndices, bool force=true, TopologyErrors *errorsOut=nullptr, std::map< int, int > *inputToAddedVertexIndices=nullptr)
 
bool removeFace (int index, bool removeIsolatedVertices=false)
 Removes a single face from the mesh, reducing the number of faces by 1 (calls garbage collection).
 
void removeFaces (const std::vector< int > &faces, bool removeIsolatedVertices=false)
 Remove faces from face list.
 
void removeVertices (const std::vector< int > &vertices, bool removeIsolatedVertices=false)
 Remove vertices from vertex list.
 
const vec3 * verticesPointer () const
 
const vec3 * vertexNormalsPointer () const
 
const vec4f * vertexColorsPointer () const
 
const vec2f * vertexTexCoordsPointer () const
 
TriMeshtriMesh ()
 When changing underlying TriMesh, the user is responsible for emitting signalMeshChanged signal.
 
const TriMeshtriMesh () const
 
MemImagetexture () const
 Returns the mesh texture image.
 
MemImagevertexLabelTexture () const
 Returns the texture image used for colors of mesh vertex labels.
 
MemImagefaceLabelTexture () const
 Returns the texture image used for colors of mesh face labels.
 
void setTexture (std::unique_ptr< MemImage > tex)
 Set mesh texture. The image ownership is transferred to the mesh class.
 
void setVertexLabelTexture (std::unique_ptr< MemImage > tex)
 Set texture for mesh vertex labels. Should have width equal to the number of labels, and height equal to 1. The image ownership is transferred to the mesh class.
 
void setFaceLabelTexture (std::unique_ptr< MemImage > tex)
 Set texture for mesh face labels. Should have width equal to the number of labels, and height equal to 1. The image ownership is transferred to the mesh class.
 
void setFilename (const std::string &name)
 Sets a filename from where this mesh can be loaded.
 
const std::stringfilename () const
 Returns the filename from where this mesh can be loaded or an empty string if it's not on disk.
 
const mat4 & matrixRef () const
 
void requestRenderingBuffers (bool useFaceNormals, Utils::OutputEigenVectorWrapper< double, 3 > positions, std::vector< vec3i > &triangleIndices, Utils::OptionalOutputEigenVectorWrapper< double, 3 > normals={}, Utils::OptionalOutputEigenVectorWrapper< float, 4 > colors={}, Utils::OptionalOutputEigenVectorWrapper< float, 2 > texCoords={}, std::vector< uint32_t > *indices=nullptr, bool faceIndices=true, std::vector< uint32_t > *labels=nullptr, bool faceLabels=true) const
 Copies the mesh data to arrays suitable for OpenGl vertex buffers.
 
void requestRenderingBuffers2 (bool useFaceNormals, Utils::OptionalOutputEigenVectorWrapper< double, 3 > positions, Utils::OptionalOutputEigenVectorWrapper< int, 3 > triangleIndices, Utils::OptionalOutputEigenVectorWrapper< double, 3 > normals={}, Utils::OptionalOutputEigenVectorWrapper< float, 4 > colors={}, Utils::OptionalOutputEigenVectorWrapper< float, 2 > texCoords={}, std::vector< uint32_t > *faceIndices=nullptr, std::vector< uint32_t > *faceLabels=nullptr, std::vector< uint32_t > *vertexIndices=nullptr, std::vector< uint32_t > *vertexLabels=nullptr) const
 More flexible version of requestRenderingBuffers().
 
void requestIndexedBuffers (std::vector< vec3 > &positions, std::vector< vec3i > &triangleIndices, std::vector< vec3 > *normals=nullptr, std::vector< vec4f > *colors=nullptr, std::vector< vec2f > *texCoords=nullptr, std::vector< vec3i > *triangleNormals=nullptr, std::vector< vec3i > *triangleColors=nullptr, std::vector< vec3i > *triangleTexCoords=nullptr) const
 Copies the mesh data to arrays without performing type conversions.
 
void beginUpdate ()
 After this call no signals will be emitted if the mesh data is changed.
 
void endUpdate ()
 End update and send mesh changed signal.
 
bool signalsBlocked () const
 Returns true if the signals are blocked.
 
void emitMeshChangedSignal ()
 
void garbageCollection ()
 
const std::vector< std::unique_ptr< CustomPropertyBase > > & customVertexProperties () const
 
const std::vector< std::unique_ptr< CustomPropertyBase > > & customFaceProperties () const
 
template<typename T>
CustomVertexProperty< T > * addVertexProperty (const std::string &name)
 Wraps an existing property on the underlying TriMesh or creates a new one.
 
template<typename T>
CustomVertexProperty< T > * getVertexProperty (const std::string &name)
 Retrieves a custom property with a given name.
 
template<typename T>
CustomFaceProperty< T > * addFaceProperty (const std::string &name)
 Wraps an existing property on the underlying TriMesh or creates a new one.
 
template<typename T>
CustomFaceProperty< T > * getFaceProperty (const std::string &name)
 Retrieves a custom property with a given name.
 
bool removeVertexProperty (const std::string &name)
 
bool removeFaceProperty (const std::string &name)
 
void createDefaultLabelTexture (bool faceLabels, unsigned int numLabels=100u)
 Create a default texture for vertex or face labels (depending on the input flag 'faceLabels').
 
- Public Member Functions inherited from Data
 Data (const std::string &name="")
 
 Data (const Data &other)
 
Dataoperator= (const Data &other)
 
virtual ~Data ()
 Mandatory virtual destructor.
 
virtual Modality modality () const
 Return the modality of this data.
 
const std::stringname () const
 Return the name of this data.
 
void setName (const std::string &name)
 Sets the name of this data.
 
const DataComponentListcomponents () const
 Returns the list of DataComponents for this data.
 
DataComponentListcomponents ()
 
virtual std::string describe () const
 Human readable description of the data for showing in the info bar.
 
virtual void setMatrixFromWorld (const mat4 &m)
 Set matrix mapping from the world coordinate system to the data coordinate system.
 
virtual void setMatrixToWorld (const mat4 &m)
 Set matrix mapping from the data coordinate system to the world coordinate system.
 
virtual mat4 matrixFromWorld () const
 Get matrix mapping from the world coordinate system to the data coordinate system.
 
virtual mat4 matrixToWorld () const
 Get matrix mapping from the data coordinate system to the world coordinate system.
 
virtual mat4 matrix () const
 Return the transformation matrix.
 

Static Public Member Functions

static std::unique_ptr< MeshcreateFromArrays (const Utils::EigenVectorWrapper< double, 3 > &vertices, const Utils::OptionalEigenVectorWrapper< double, 3 > &normals, const Utils::OptionalEigenVectorWrapper< float, 3 > &colors, const Utils::OptionalEigenVectorWrapper< float, 2 > &texCoords, const std::vector< vec3i > &triangleVertices, const std::vector< vec3i > &triangleNormals, const std::vector< vec3i > &triangleColors, const std::vector< vec3i > &triangleTexCoords)
 Clears the current mesh, then constructs a new one from the given data vectors.
 
- Static Public Member Functions inherited from Data
static std::string modalityString (Data::Modality m)
 Return the name of an image modality.
 
static Data::Modality stringToModality (const std::string &s)
 Returns the modality corresponding to a modality string or NA if nothing matches.
 

Public Attributes

Signal signalMeshChanged
 Signal emitted when the mesh data has changed.
 
- Public Attributes inherited from Data
Signal< const Data * > signalDeleted
 Signal emitted when this instance is deleted.
 
Signal< const Data * > signalMatrixChanged
 Signal emitted when the transformation of this Data has changed.
 
Signal< std::stringsignalNameChanged
 Signal emitted when the name changed.
 

Methods implementing the Data interface

Kind kind () const override
 Return the kind of this data.
 
Geometry::AlignedBox bounds () const override
 Returns the axis-aligned bounding box of this data in world space.
 
Pose::TransformationConvention matrixConvention () const override
 Matrices of meshes map to world coordinate system.
 
void setMatrix (const mat4 &m) override
 Sets tha matrix of this data and sets the bounding box dirty.
 
bool isAnnotationType () const override
 Returns true since the object has a dedicated GlMesh annotation.
 

Iterators

VertexIterator v_begin ()
 
VertexIterator v_end ()
 
FaceIterator f_begin ()
 Iterator over all faces.
 
FaceIterator f_end ()
 
VertexVertexIterator vv_begin (unsigned int id)
 Iterator over neighboring vertices of a vertex.
 
VertexVertexIterator vv_end (unsigned int id)
 
VertexFaceIterator vf_begin (unsigned int id)
 Iterator over faces which contain a provided vertex.
 
VertexFaceIterator vf_end (unsigned int id)
 
FaceVertexIterator fv_begin (unsigned int id)
 Iterator over vertex which are part of a provided face.
 
FaceVertexIterator fv_end (unsigned int id)
 
FaceFaceIterator ff_begin (unsigned int id)
 Iterator over neighboring (sharing an edge) faces of a face.
 
FaceFaceIterator ff_end (unsigned int id)
 

Processing

void computeVertexNormals (VertexNormalWeighting weighting=VertexNormalWeighting::NelsonMax)
 Compute vertex normals as weighted average of normals of faces around a vertex. Replaces previous normals.
 
void computeFaceNormals ()
 Compute face normals. Replaces previous normals.
 

Information about the mesh

Geometry::AlignedBox boundsLocal () const
 Returns the axis-aligned bounding box of this data in local space.
 
bool isManifold () const
 Checks whether mesh is manifold, i.e.
 
bool isClosed () const
 Checks whether mesh is closed, i.e. there are no boundary edges and no isolated vertices.
 
bool isSelfIntersecting () const
 Checks whether mesh is self intersecting, i.e. there are triangles that intersect each other.
 
bool isWatertight (bool checkSelfIntersection) const
 Checks whether mesh is watertight, i.e.
 
std::vector< std::list< std::pair< int, int > > > listHoles () const
 Returns holes in the mesh The returned vector contains for every hole a list of its boundary edges in sequential order.
 

Additional Inherited Members

- Protected Member Functions inherited from Data
void swapWith (Data &other)
 Swaps the data and emits a matrix and name changed signal for both.
 
- Protected Attributes inherited from Data
mat4 m_matrix
 Transformation matrix.
 
std::recursive_mutexm_matrixMutex
 Used to internally synchronize access to the matrix of data.
 
DataComponentList m_dataComponentList
 The list of DataComponents for this data.
 

Member Enumeration Documentation

◆ VertexNormalWeighting

enum class VertexNormalWeighting
strong

Weighting schemes for averaging normals of faces around a vertex to obtain vertex normals.

Enumerator
Uniform 

Face normals are weighted uniformly (no actual weighting is applied)

Angle 

Face normals are weighted by the triangle's interior angle at the vertex.

Area 

Face normals are weighted by the triangle's area.

NelsonMax 

Face normals are weighted as proposed by Nelson Max in "Weights for Computing Vertex Normals from Facet Normals", Journal of Graphics Tools, 4(2) (1999) by the sine of the angle between the two edges sharing the vertex divided by the product of the lengths of the two edges.

Member Function Documentation

◆ createFromArrays()

static std::unique_ptr< Mesh > createFromArrays ( const Utils::EigenVectorWrapper< double, 3 > & vertices,
const Utils::OptionalEigenVectorWrapper< double, 3 > & normals,
const Utils::OptionalEigenVectorWrapper< float, 3 > & colors,
const Utils::OptionalEigenVectorWrapper< float, 2 > & texCoords,
const std::vector< vec3i > & triangleVertices,
const std::vector< vec3i > & triangleNormals,
const std::vector< vec3i > & triangleColors,
const std::vector< vec3i > & triangleTexCoords )
static

Clears the current mesh, then constructs a new one from the given data vectors.

Will avoid duplicate vertices and store properties in half-edges if appropriate. Half-edge properties are used whenever the size of the property vector is not equal to the number of vertices.

Parameters
verticesVertices
normalsVertex normals (or halfedge normals if the size of normals is not equal to the size of vertices)
colorsVertex colors (or halfedge colors if the size of colors is not equal to the size of vertices)
texCoordsVertex texture coordinates (or halfedge texture coordinate if the size of texCoords is not equal to the size of vertices)
triangleVerticesVertex indices from vertices that build up the triangles
triangleNormalsIndices from normals that specify the normal for each vertex that the triangle is built from (note that this has nothing to do with triangle normal). Size must be equal to triangleVertices
triangleColorsIndices from colors that specify the color for each vertex that the triangle is built from (note that this has nothing to do with triangle color). Size must be equal to triangleVertices
triangleTexCoordsIndices from texCoords that specify the texture coordinates for each vertex that the triangle is built from (note that this has nothing to do with triangle texture coordinate). Size must be equal to triangleVertices

◆ kind()

Kind kind ( ) const
overridevirtual

Return the kind of this data.

Implements Data.

◆ bounds()

Geometry::AlignedBox bounds ( ) const
overridevirtual

Returns the axis-aligned bounding box of this data in world space.

Implements Data.

◆ matrixConvention()

Pose::TransformationConvention matrixConvention ( ) const
inlineoverridevirtual

Matrices of meshes map to world coordinate system.

Implements Data.

◆ setMatrix()

void setMatrix ( const mat4 & m)
overridevirtual

Sets tha matrix of this data and sets the bounding box dirty.

Reimplemented from Data.

◆ isAnnotationType()

bool isAnnotationType ( ) const
inlineoverridevirtual

Returns true since the object has a dedicated GlMesh annotation.

Reimplemented from Data.

◆ v_begin()

VertexIterator v_begin ( )

Iterator over all vertices

◆ isManifold()

bool isManifold ( ) const

Checks whether mesh is manifold, i.e.

all vertices are manifold (the faces incident to a vertex form a closed or an open fan) and there are no known vertex duplicates

◆ isWatertight()

bool isWatertight ( bool checkSelfIntersection) const

Checks whether mesh is watertight, i.e.

it is manifold and closed and not self-intersecting if checkSelfIntersection is set to false, it will be assumed that the mesh is not self-intersecting (this significantly speeds up the execution)

◆ listHoles()

std::vector< std::list< std::pair< int, int > > > listHoles ( ) const

Returns holes in the mesh The returned vector contains for every hole a list of its boundary edges in sequential order.

An edge is represented by the indices of the vertices it connects.

◆ unifyHalfedgeProperties()

void unifyHalfedgeProperties ( bool unifyHalfedgeNormals = true,
bool unifyHalfedgeColors = true,
bool unifyHalfedgeTexCoords = true,
bool forceUnification = false )

Converts halfedge to vertex properties if this can be done without losing information Compares the normals, colors and texture coordinates between all halfedges belonging to each vertex.

If a property does not have a single case where different halfedges on the same vertex have different values, it is moved to per-vertex storage. Already existing per-vertex data is removed if this happens. If forceUnification is true, the properties will be unified even if their values are different for different halfedges of the same vertex: colors and normals are averaged, while tex coordinate gets the value of one of the halfedges

◆ faceNormal()

vec3 faceNormal ( int faceIndex) const

Returns the normal of the given face.

If the mesh does not have stored face normals, the value is computed from vertex positions (but still not stored afterwards). If in need of normals for all faces, consider using TriMesh::update_face_normals instead of looping over this method.

◆ setFaceLabel()

void setFaceLabel ( int face,
unsigned int label,
bool createTexture = true )

Set label of the face.

If there is no texture for face label colors, a default one will be created. If the existing texture for face label colors does not have an entry for a new label, the texture will be reset with a default one of appropriate size.

◆ setFaceLabels()

void setFaceLabels ( const std::vector< unsigned int > & labels)

Set label of all faces.

If there is no texture for face label colors, a default one will be created. If the existing texture for face label colors does not have an entry for a new label, the texture will be reset with a default one of appropriate size.

◆ faceLabel()

unsigned int faceLabel ( int face) const

Get label of the face.

Returns 0 if face index is invalid or if face does not contain label property. Use hasFaceLabels() to query the existence of face labels

◆ setVertexLabel()

void setVertexLabel ( int vertex,
unsigned int label )

Set label of the vertex.

If there is no texture for vertex label colors, a default one will be created. If the existing texture for vertex label colors does not have an entry for a new label, the texture will be reset with a default one of appropriate size. Label must not be negative

◆ vertexLabel()

unsigned int vertexLabel ( int vertex) const

Get label of the vertex.

Returns 0 if vertex index is invalid or if vertex does not contain label property. Use hasVertexLabels() to query the existence of vertex labels

◆ removeFace()

bool removeFace ( int index,
bool removeIsolatedVertices = false )

Removes a single face from the mesh, reducing the number of faces by 1 (calls garbage collection).

Equivalent to deleting a triangleVertices entry in the old Mesh class.

◆ removeFaces()

void removeFaces ( const std::vector< int > & faces,
bool removeIsolatedVertices = false )

Remove faces from face list.

Does not remove any vertices by default. When removing multiple faces this method is much more efficient than calling removeFace for every single face

◆ requestRenderingBuffers()

void requestRenderingBuffers ( bool useFaceNormals,
Utils::OutputEigenVectorWrapper< double, 3 > positions,
std::vector< vec3i > & triangleIndices,
Utils::OptionalOutputEigenVectorWrapper< double, 3 > normals = {},
Utils::OptionalOutputEigenVectorWrapper< float, 4 > colors = {},
Utils::OptionalOutputEigenVectorWrapper< float, 2 > texCoords = {},
std::vector< uint32_t > * indices = nullptr,
bool faceIndices = true,
std::vector< uint32_t > * labels = nullptr,
bool faceLabels = true ) const

Copies the mesh data to arrays suitable for OpenGl vertex buffers.

If per-halfedge storage is used, the output data will contain appropriate duplicate vertices. If the mesh does not have colors or texture coordinates, the corresponding vectors will be empty. If input colors are valid (i.e has the size of mesh vertices), it will be re-arranged depending on whether the vertices are duplicated or not. If input colors are invalid (wrong size), they will be replaced by the colors of the underlying mesh (if present) One entry of indices corresponds to the index of the face containing respective vertex, or index of the vertex (depending on faceIndices flag). Needed for index picking operation. One entry of labels corresponds to the label of the face containing respective vertex, or label of the vertex (depending on faceLabels flag)

◆ requestRenderingBuffers2()

void requestRenderingBuffers2 ( bool useFaceNormals,
Utils::OptionalOutputEigenVectorWrapper< double, 3 > positions,
Utils::OptionalOutputEigenVectorWrapper< int, 3 > triangleIndices,
Utils::OptionalOutputEigenVectorWrapper< double, 3 > normals = {},
Utils::OptionalOutputEigenVectorWrapper< float, 4 > colors = {},
Utils::OptionalOutputEigenVectorWrapper< float, 2 > texCoords = {},
std::vector< uint32_t > * faceIndices = nullptr,
std::vector< uint32_t > * faceLabels = nullptr,
std::vector< uint32_t > * vertexIndices = nullptr,
std::vector< uint32_t > * vertexLabels = nullptr ) const

More flexible version of requestRenderingBuffers().

Copies the mesh data into the provided buffers for upload to OpenGL.

◆ requestIndexedBuffers()

void requestIndexedBuffers ( std::vector< vec3 > & positions,
std::vector< vec3i > & triangleIndices,
std::vector< vec3 > * normals = nullptr,
std::vector< vec4f > * colors = nullptr,
std::vector< vec2f > * texCoords = nullptr,
std::vector< vec3i > * triangleNormals = nullptr,
std::vector< vec3i > * triangleColors = nullptr,
std::vector< vec3i > * triangleTexCoords = nullptr ) const

Copies the mesh data to arrays without performing type conversions.

The output will use appropriate index buffers to state what goes where. If the mesh does not have colors or texture coordinates, the corresponding vectors will be empty.

◆ beginUpdate()

void beginUpdate ( )

After this call no signals will be emitted if the mesh data is changed.

This is useful if many update operations must be performed but it is not desired that the signal is emitted for every update. When done with the update operations call endUpdate to emit a single update signal

◆ signalsBlocked()

bool signalsBlocked ( ) const
inline

Returns true if the signals are blocked.

Useful to know whether the signals were blocked before calling beginUpdate - endUpdate. User might want not to call endUpdate, so that the signals remain blocked

◆ createDefaultLabelTexture()

void createDefaultLabelTexture ( bool faceLabels,
unsigned int numLabels = 100u )

Create a default texture for vertex or face labels (depending on the input flag 'faceLabels').

Size of the texture is defined by input parameter 'numLabels'


The documentation for this class was generated from the following file:
Search Tab / S to search, Esc to close