ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ccMesh Class Reference

Triangular mesh. More...

#include <ecvMesh.h>

Inheritance diagram for ccMesh:
Collaboration diagram for ccMesh:

Classes

struct  Material
 

Public Types

enum  MESH_SCALAR_FIELD_PROCESS { SMOOTH_MESH_SF , ENHANCE_MESH_SF }
 Mesh scalar field processes. More...
 
using triangleIndexesContainer = ccArray< cloudViewer::VerticesIndexes, 3, unsigned >
 Container of per-triangle vertices indexes (3) More...
 
using triangleMaterialIndexesSet = ccArray< int, 1, int >
 Container of per-triangle material descriptors. More...
 
- Public Types inherited from cloudViewer::GenericMesh
enum class  SimplificationContraction { Average , Quadric }
 Indicates the method that is used for mesh simplification if multiple vertices are combined to a single one. More...
 
enum class  FilterScope { All , Color , Normal , Vertex }
 Indicates the scope of filter operations. More...
 
enum class  DeformAsRigidAsPossibleEnergy { Spokes , Smoothed }
 
using genericTriangleAction = std::function< void(GenericTriangle &)>
 Generic function to apply to a triangle (used by foreach) More...
 
- Public Types inherited from ccHObject
enum  DEPENDENCY_FLAGS {
  DP_NONE = 0 , DP_NOTIFY_OTHER_ON_DELETE = 1 , DP_NOTIFY_OTHER_ON_UPDATE , DP_DELETE_OTHER = 8 ,
  DP_PARENT_OF_OTHER = 24
}
 Dependency flags. More...
 
enum  SelectionBehavior { SELECTION_AA_BBOX , SELECTION_FIT_BBOX , SELECTION_IGNORED }
 Behavior when selected. More...
 
using Container = std::vector< ccHObject * >
 Standard instances container (for children, etc.) More...
 
using Shared = QSharedPointer< ccHObject >
 Shared pointer. More...
 
using SharedContainer = std::vector< Shared >
 Shared instances container (for children, etc.) More...
 
using GlobalBoundingBox = cloudViewer::BoundingBoxTpl< double >
 Global (non-shifted) bounding-box. More...
 
- Public Types inherited from ccSerializableObject
enum  DeserializationFlags { DF_POINT_COORDS_64_BITS , DF_SCALAR_VAL_32_BITS = 2 }
 Deserialization flags (bit-field) More...
 
typedef QMultiMap< unsigned, unsigned > LoadedIDMap
 Map of loaded unique IDs (old ID --> new ID) More...
 

Public Member Functions

 ccMesh (ccGenericPointCloud *vertices=nullptr)
 Default ccMesh constructor. More...
 
 ccMesh (const ccMesh &mesh)
 
 ccMesh (const std::vector< Eigen::Vector3d > &vertices, const std::vector< Eigen::Vector3i > &triangles)
 Parameterized Constructor. More...
 
 ccMesh (cloudViewer::GenericIndexedMesh *giMesh, ccGenericPointCloud *giVertices)
 ccMesh constructor (from a cloudViewer::GenericIndexedMesh) More...
 
 ~ccMesh () override
 Default destructor. More...
 
CV_CLASS_ENUM getClassID () const override
 Returns class ID. More...
 
void setAssociatedCloud (ccGenericPointCloud *cloud)
 Sets the associated vertices cloud (warning) More...
 
ccMeshcloneMesh (ccGenericPointCloud *vertices=nullptr, ccMaterialSet *clonedMaterials=nullptr, NormsIndexesTableType *clonedNormsTable=nullptr, TextureCoordsContainer *cloneTexCoords=nullptr)
 Clones this entity. More...
 
ccMeshpartialClone (const std::vector< unsigned > &triangleIndices, int *warnings=nullptr) const
 Creates a new mesh from a selection of triangles (partial clone) More...
 
bool merge (const ccMesh *mesh, bool createSubMesh)
 Merges another mesh into this one. More...
 
ccMeshoperator= (const ccMesh &mesh)
 
ccMeshoperator+= (const ccMesh &mesh)
 
ccMesh operator+ (const ccMesh &mesh) const
 
void clear ()
 
unsigned getUniqueIDForDisplay () const override
 Returns object unqiue ID used for display. More...
 
ccBBox getOwnBB (bool withGLFeatures=false) override
 Returns the entity's own bounding-box. More...
 
bool isSerializable () const override
 Returns whether object is serializable of not. More...
 
const ccGLMatrixgetGLTransformationHistory () const override
 Returns the transformation 'history' matrix. More...
 
ccGenericPointCloudgetAssociatedCloud () const override
 Returns the vertices cloud. More...
 
void refreshBB () override
 Forces bounding-box update. More...
 
bool interpolateNormalsBC (unsigned triIndex, const CCVector3d &w, CCVector3 &N) override
 Interpolates normal(s) inside a given triangle. More...
 
bool interpolateColors (unsigned triIndex, const CCVector3 &P, ecvColor::Rgb &C) override
 Interpolates RGB colors inside a given triangle. More...
 
void computeInterpolationWeights (unsigned triIndex, const CCVector3 &P, CCVector3d &weights) const override
 Returns the (barycentric) interpolation weights for a given triangle. More...
 
bool getColorFromMaterial (unsigned triIndex, const CCVector3 &P, ecvColor::Rgb &C, bool interpolateColorIfNoTexture) override
 
bool getVertexColorFromMaterial (unsigned triIndex, unsigned char vertIndex, ecvColor::Rgb &C, bool returnColorIfNoTexture) override
 
unsigned capacity () const override
 Returns max capacity. More...
 
void forEach (genericTriangleAction action) override
 Fast iteration mechanism. More...
 
void placeIteratorAtBeginning () override
 Places the mesh iterator at the beginning. More...
 
cloudViewer::GenericTriangle_getNextTriangle () override
 Returns the next triangle (relatively to the global iterator position) More...
 
cloudViewer::GenericTriangle_getTriangle (unsigned triangleIndex) override
 Returns the ith triangle. More...
 
cloudViewer::VerticesIndexesgetNextTriangleVertIndexes () override
 
cloudViewer::VerticesIndexesgetTriangleVertIndexes (unsigned triangleIndex) override
 Returns the indexes of the vertices of a given triangle. More...
 
virtual void getTriangleVertices (unsigned triangleIndex, CCVector3 &A, CCVector3 &B, CCVector3 &C) const override
 Returns the vertices of a given triangle. More...
 
virtual void getTriangleVertices (unsigned triangleIndex, double A[3], double B[3], double C[3]) const override
 
unsigned int getVerticeSize () const
 
Eigen::Vector3d getVertice (size_t index) const
 
void setVertice (size_t index, const Eigen::Vector3d &vertice)
 
void addVertice (const Eigen::Vector3d &vertice)
 
std::vector< Eigen::Vector3d > getEigenVertices () const
 
void addEigenVertices (const std::vector< Eigen::Vector3d > &vertices)
 
void setEigenVertices (const std::vector< Eigen::Vector3d > &vertices)
 
Eigen::Vector3d getVertexNormal (size_t index) const
 
void setVertexNormal (size_t index, const Eigen::Vector3d &normal)
 
void addVertexNormal (const Eigen::Vector3d &normal)
 
std::vector< Eigen::Vector3d > getVertexNormals () const
 
void addVertexNormals (const std::vector< Eigen::Vector3d > &normals)
 
void setVertexNormals (const std::vector< Eigen::Vector3d > &normals)
 
Eigen::Vector3d getVertexColor (size_t index) const
 
void setVertexColor (size_t index, const Eigen::Vector3d &color)
 
void addVertexColor (const Eigen::Vector3d &color)
 
std::vector< Eigen::Vector3d > getVertexColors () const
 
ColorsTableTypegetVertexColorsPtr ()
 
void addVertexColors (const std::vector< Eigen::Vector3d > &colors)
 
void setVertexColors (const std::vector< Eigen::Vector3d > &colors)
 
bool HasVertices () const
 
std::vector< CCVector3 > & getVerticesPtr ()
 
const std::vector< CCVector3 > & getVertices () const
 
virtual unsigned size () const override
 Returns the number of triangles. More...
 
void getBoundingBox (CCVector3 &bbMin, CCVector3 &bbMax) override
 Returns the mesh bounding-box. More...
 
bool normalsAvailable () const override
 Returns whether normals are available. More...
 
bool interpolateNormals (unsigned triIndex, const CCVector3 &P, CCVector3 &N) override
 Interpolates normal(s) inside a given triangle. More...
 
void getTriangleVertIndexes (size_t triangleIndex, Eigen::Vector3i &vertIndx) const
 
virtual const cloudViewer::VerticesIndexesgetTriangleVertIndexes (unsigned triangleIndex) const
 
bool hasColors () const override
 Returns whether colors are enabled or not. More...
 
bool hasNormals () const override
 Returns whether normals are enabled or not. More...
 
bool HasVertexNormals () const
 
bool hasScalarFields () const override
 Returns whether one or more scalar fields are instantiated. More...
 
bool hasDisplayedScalarField () const override
 Returns whether an active scalar field is available or not. More...
 
bool normalsShown () const override
 Returns whether normals are shown or not. More...
 
void toggleMaterials () override
 Toggles material display state. More...
 
void invertNormals ()
 Inverts normals (if any) More...
 
void shiftTriangleIndexes (unsigned shift)
 Shifts all triangles indexes. More...
 
void flipTriangles ()
 Flips the triangle. More...
 
void addTriangle (unsigned i1, unsigned i2, unsigned i3)
 Adds a triangle to the mesh. More...
 
void addTriangle (const cloudViewer::VerticesIndexes &triangle)
 
void addTriangle (const Eigen::Vector3i &index)
 
void addTriangles (const std::vector< Eigen::Vector3i > &triangles)
 
void setTriangle (size_t index, const Eigen::Vector3i &triangle)
 
void setTriangles (const std::vector< Eigen::Vector3i > &triangles)
 
Eigen::Vector3i getTriangle (size_t index) const
 
std::vector< Eigen::Vector3i > getTriangles () const
 
triangleIndexesContainergetTrianglesPtr () const
 
bool reserve (std::size_t n)
 Reserves the memory to store the vertex indexes (3 per triangle) More...
 
bool reserveAssociatedCloud (std::size_t n, bool init_color=false, bool init_normal=false)
 
bool resize (size_t n)
 Resizes the array of vertex indexes (3 per triangle) More...
 
bool resizeAssociatedCloud (std::size_t n)
 
void shrinkToFit ()
 Removes unused capacity. More...
 
void shrinkVertexToFit ()
 
bool hasTriNormals () const override
 Returns whether the mesh has per-triangle normals. More...
 
bool HasTriangleNormals () const
 
void getTriangleNormalIndexes (unsigned triangleIndex, int &i1, int &i2, int &i3) const override
 Returns a triplet of normal indexes for a given triangle (if any) More...
 
bool getTriangleNormals (unsigned triangleIndex, CCVector3 &Na, CCVector3 &Nb, CCVector3 &Nc) const override
 Returns a given triangle normal. More...
 
bool getTriangleNormals (unsigned triangleIndex, double Na[3], double Nb[3], double Nc[3]) const override
 
bool getTriangleNormals (unsigned triangleIndex, Eigen::Vector3d &Na, Eigen::Vector3d &Nb, Eigen::Vector3d &Nc) const override
 
std::vector< Eigen::Vector3d > getTriangleNormals () const
 
std::vector< CCVector3 * > getTriangleNormalsPtr () const
 
Eigen::Vector3d getTriangleNorm (size_t index) const
 
bool setTriangleNorm (size_t index, const Eigen::Vector3d &triangle_normal)
 
bool setTriangleNormalIndexes (size_t triangleIndex, CompressedNormType value)
 
CompressedNormType getTriangleNormalIndexes (size_t triangleIndex)
 
bool addTriangleNorm (const CCVector3 &N)
 
bool addTriangleNorm (const Eigen::Vector3d &N)
 
std::vector< Eigen::Vector3d > getTriangleNorms () const
 
bool setTriangleNorms (const std::vector< Eigen::Vector3d > &triangle_normals)
 
bool addTriangleNorms (const std::vector< Eigen::Vector3d > &triangle_normals)
 
NormsIndexesTableTypegetTriNormsTable () const override
 Returns per-triangle normals shared array. More...
 
void setTriNormsTable (NormsIndexesTableType *triNormsTable, bool autoReleaseOldTable=true)
 Sets per-triangle normals array (may be shared) More...
 
void clearTriNormals ()
 Removes per-triangle normals. More...
 
bool arePerTriangleNormalsEnabled () const
 Returns whether per triangle normals are enabled. More...
 
bool reservePerTriangleNormalIndexes ()
 Reserves memory to store per-triangle triplets of normal indexes. More...
 
void addTriangleNormalIndexes (int i1, int i2, int i3)
 Adds a triplet of normal indexes for next triangle. More...
 
void setTriangleNormalIndexes (unsigned triangleIndex, int i1, int i2, int i3)
 Sets a triplet of normal indexes for a given triangle. More...
 
void removePerTriangleNormalIndexes ()
 Removes any per-triangle triplets of normal indexes. More...
 
void invertPerTriangleNormals ()
 Invert per-triangle normals. More...
 
bool hasMaterials () const override
 
const ccMaterialSetgetMaterialSet () const override
 
int getTriangleMtlIndex (unsigned triangleIndex) const override
 Returns a given triangle material indexes. More...
 
bool convertMaterialsToVertexColors ()
 Converts materials to vertex colors. More...
 
bool hasPerTriangleMtlIndexes () const
 Returns whether this mesh as per-triangle material index. More...
 
bool reservePerTriangleMtlIndexes ()
 Reserves memory to store per-triangle material index. More...
 
void removePerTriangleMtlIndexes ()
 Removes any per-triangle material indexes. More...
 
void addTriangleMtlIndex (int mtlIndex)
 Adds triangle material index for next triangle. More...
 
void setTriangleMtlIndexesTable (triangleMaterialIndexesSet *matIndexesTable, bool autoReleaseOldTable=true)
 Sets per-triangle material indexes array. More...
 
const triangleMaterialIndexesSetgetTriangleMtlIndexesTable () const
 Returns the per-triangle material indexes array. More...
 
void setTriangleMtlIndex (unsigned triangleIndex, int mtlIndex)
 Sets triangle material indexes. More...
 
void setMaterialSet (ccMaterialSet *materialSet, bool autoReleaseOldMaterialSet=true)
 Sets associated material set (may be shared) More...
 
bool hasTextures () const override
 Returns whether textures are available for this mesh. More...
 
TextureCoordsContainergetTexCoordinatesTable () const override
 Returns per-triangle texture coordinates array. More...
 
void getTriangleTexCoordinates (unsigned triIndex, TexCoords2D *&tx1, TexCoords2D *&tx2, TexCoords2D *&tx3) const override
 Returns per-triangle texture coordinates (pointer to) More...
 
void getTexCoordinates (unsigned index, TexCoords2D *&tx) const override
 
bool hasPerTriangleTexCoordIndexes () const override
 Returns whether this mesh as per-triangle triplets of tex coords indexes. More...
 
void getTriangleTexCoordinatesIndexes (unsigned triangleIndex, int &i1, int &i2, int &i3) const override
 Returns the triplet of tex coords indexes for a given triangle. More...
 
void setTexCoordinatesTable (TextureCoordsContainer *texCoordsTable, bool autoReleaseOldTable=true)
 Sets per-triangle texture coordinates array (may be shared) More...
 
bool reservePerTriangleTexCoordIndexes ()
 Reserves memory to store per-triangle triplets of tex coords indexes. More...
 
void removePerTriangleTexCoordIndexes ()
 Remove per-triangle tex coords indexes. More...
 
void addTriangleTexCoordIndexes (int i1, int i2, int i3)
 Adds a triplet of tex coords indexes for next triangle. More...
 
void setTriangleTexCoordIndexes (unsigned triangleIndex, int i1, int i2, int i3)
 Sets a triplet of tex coords indexes for a given triangle. More...
 
bool computeNormals (bool perVertex)
 Computes normals. More...
 
bool computePerVertexNormals ()
 Computes per-vertex normals. More...
 
bool computePerTriangleNormals ()
 Computes per-triangle normals. More...
 
bool laplacianSmooth (unsigned nbIteration=100, PointCoordinateType factor=static_cast< PointCoordinateType >(0.01), ecvProgressDialog *progressCb=nullptr)
 Laplacian smoothing. More...
 
bool processScalarField (MESH_SCALAR_FIELD_PROCESS process)
 
ccMeshsubdivide (PointCoordinateType maxArea) const
 
ccMeshcreateNewMeshFromSelection (bool removeSelectedTriangles, std::vector< int > *newIndexesOfRemainingTriangles=nullptr, bool withChildEntities=false)
 Creates a new mesh with the selected vertices only. More...
 
void swapTriangles (unsigned index1, unsigned index2)
 Swaps two triangles. More...
 
void removeTriangles (size_t index)
 
void transformTriNormals (const ccGLMatrix &trans)
 Transforms the mesh per-triangle normals. More...
 
bool mergeDuplicatedVertices (unsigned char octreeLevel=DefaultMergeDulicateVerticesLevel, QWidget *parentWidget=nullptr)
 Merges duplicated vertices. More...
 
bool hasAdjacencyList () const
 Returns true if the mesh contains adjacency normals. More...
 
bool hasTriangleUvs () const
 
bool hasTriangleMaterialIds () const
 
bool hasEigenTextures () const
 Returns true if the mesh has texture. More...
 
virtual bool IsEmpty () const override
 
virtual Eigen::Vector3d GetMinBound () const override
 Returns min bounds for geometry coordinates. More...
 
virtual Eigen::Vector3d GetMaxBound () const override
 Returns max bounds for geometry coordinates. More...
 
virtual Eigen::Vector3d GetCenter () const override
 Returns the center of the geometry coordinates. More...
 
virtual ccBBox GetAxisAlignedBoundingBox () const override
 Returns an axis-aligned bounding box of the geometry. More...
 
virtual ecvOrientedBBox GetOrientedBoundingBox () const override
 
virtual ccMeshTransform (const Eigen::Matrix4d &transformation) override
 Apply transformation (4x4 matrix) to the geometry coordinates. More...
 
virtual ccMeshTranslate (const Eigen::Vector3d &translation, bool relative=true) override
 Apply translation to the geometry coordinates. More...
 
virtual ccMeshScale (const double s, const Eigen::Vector3d &center) override
 Apply scaling to the geometry coordinates. Given a scaling factor $s$, and center $c$, a given point $p$ is transformed according to $s (p - c) + c$. More...
 
virtual ccMeshRotate (const Eigen::Matrix3d &R, const Eigen::Vector3d &center) override
 Apply rotation to the geometry coordinates and normals. Given a rotation matrix $R$, and center $c$, a given point $p$ is transformed according to $R (p - c) + c$. More...
 
ccMeshPaintUniformColor (const Eigen::Vector3d &color)
 Assigns each vertex in the ccMesh the same color. More...
 
std::tuple< std::shared_ptr< ccMesh >, std::vector< size_t > > ComputeConvexHull () const
 
std::unordered_map< Eigen::Vector2i, double, cloudViewer::utility::hash_eigen< Eigen::Vector2i > > ComputeEdgeWeightsCot (const std::unordered_map< Eigen::Vector2i, std::vector< int >, cloudViewer::utility::hash_eigen< Eigen::Vector2i >> &edges_to_vertices, double min_weight=std::numeric_limits< double >::lowest()) const
 Function that computes for each edge in the triangle mesh and passed as parameter edges_to_vertices the cot weight. More...
 
ccMeshComputeTriangleNormals (bool normalized=true)
 Function to compute triangle normals, usually called before rendering. More...
 
ccMeshComputeVertexNormals (bool normalized=true)
 Function to compute vertex normals, usually called before rendering. More...
 
ccMeshNormalizeNormals ()
 
ccMeshComputeAdjacencyList ()
 Function to compute adjacency list, call before adjacency list is. More...
 
ccMeshRemoveDuplicatedVertices ()
 Function that removes duplicated verties, i.e., vertices that have identical coordinates. More...
 
ccMeshRemoveDuplicatedTriangles ()
 Function that removes duplicated triangles, i.e., removes triangles that reference the same three vertices, independent of their order. More...
 
ccMeshRemoveUnreferencedVertices ()
 This function removes vertices from the triangle mesh that are not referenced in any triangle of the mesh. More...
 
ccMeshRemoveDegenerateTriangles ()
 Function that removes degenerate triangles, i.e., triangles that reference a single vertex multiple times in a single triangle. More...
 
ccMeshRemoveNonManifoldEdges ()
 Function that removes all non-manifold edges, by successively deleting triangles with the smallest surface area adjacent to the non-manifold edge until the number of adjacent triangles to the edge is <= 2. More...
 
ccMeshMergeCloseVertices (double eps)
 Function that will merge close by vertices to a single one. The vertex position, normal and color will be the average of the vertices. More...
 
std::shared_ptr< ccMeshFilterSharpen (int number_of_iterations, double strength, FilterScope scope=FilterScope::All) const
 Function to sharpen triangle mesh. More...
 
std::shared_ptr< ccMeshFilterSmoothSimple (int number_of_iterations, FilterScope scope=FilterScope::All) const
 Function to smooth triangle mesh with simple neighbour average. More...
 
std::shared_ptr< ccMeshFilterSmoothLaplacian (int number_of_iterations, double lambda, FilterScope scope=FilterScope::All) const
 Function to smooth triangle mesh using Laplacian. More...
 
std::shared_ptr< ccMeshFilterSmoothTaubin (int number_of_iterations, double lambda=0.5, double mu=-0.53, FilterScope scope=FilterScope::All) const
 Function to smooth triangle mesh using method of Taubin, "Curve and Surface Smoothing Without Shrinkage", 1995. Applies in each iteration two times FilterSmoothLaplacian, first with lambda and second with mu as smoothing parameter. This method avoids shrinkage of the triangle mesh. More...
 
int EulerPoincareCharacteristic () const
 
std::vector< Eigen::Vector2i > GetNonManifoldEdges (bool allow_boundary_edges=true) const
 
bool IsEdgeManifold (bool allow_boundary_edges=true) const
 
std::vector< int > GetNonManifoldVertices () const
 
bool IsVertexManifold () const
 
std::vector< Eigen::Vector2i > GetSelfIntersectingTriangles () const
 
bool IsSelfIntersecting () const
 
bool IsBoundingBoxIntersecting (const ccMesh &other) const
 
bool IsIntersecting (const ccMesh &other) const
 
bool IsOrientable () const
 
bool IsWatertight () const
 
bool OrientTriangles ()
 
std::unordered_map< Eigen::Vector2i, std::vector< int >, cloudViewer::utility::hash_eigen< Eigen::Vector2i > > GetEdgeToTrianglesMap () const
 
std::unordered_map< Eigen::Vector2i, std::vector< int >, cloudViewer::utility::hash_eigen< Eigen::Vector2i > > GetEdgeToVerticesMap () const
 
double GetTriangleArea (size_t triangle_idx) const
 
double GetSurfaceArea () const
 
double GetSurfaceArea (std::vector< double > &triangle_areas) const
 
double GetVolume () const
 
Eigen::Vector4d GetTrianglePlane (size_t triangle_idx) const
 
std::shared_ptr< ccPointCloudSamplePointsUniformlyImpl (size_t number_of_points, std::vector< double > &triangle_areas, double surface_area, bool use_triangle_normal, int seed)
 
std::shared_ptr< ccPointCloudSamplePointsUniformly (size_t number_of_points, bool use_triangle_normal=false, int seed=-1)
 
std::shared_ptr< ccPointCloudSamplePointsPoissonDisk (size_t number_of_points, double init_factor=5, const std::shared_ptr< ccPointCloud > pcl_init=nullptr, bool use_triangle_normal=false, int seed=-1)
 
std::shared_ptr< ccMeshSubdivideMidpoint (int number_of_iterations) const
 
std::shared_ptr< ccMeshSubdivideLoop (int number_of_iterations) const
 
std::shared_ptr< ccMeshSimplifyVertexClustering (double voxel_size, SimplificationContraction contraction=SimplificationContraction::Average) const
 
std::shared_ptr< ccMeshSimplifyQuadricDecimation (int target_number_of_triangles, double maximum_error=std::numeric_limits< double >::infinity(), double boundary_weight=1.0) const
 
std::shared_ptr< ccMeshSelectByIndex (const std::vector< size_t > &indices, bool cleanup=true) const
 
std::shared_ptr< ccMeshCrop (const ccBBox &bbox) const
 
std::shared_ptr< ccMeshCrop (const ecvOrientedBBox &bbox) const
 
std::tuple< std::vector< int >, std::vector< size_t >, std::vector< double > > ClusterConnectedTriangles () const
 Function that clusters connected triangles, i.e., triangles that are connected via edges are assigned the same cluster index. More...
 
void RemoveTrianglesByIndex (const std::vector< size_t > &triangle_indices)
 This function removes the triangles with index in triangle_indices. Call RemoveUnreferencedVertices to clean up vertices afterwards. More...
 
void RemoveTrianglesByMask (const std::vector< bool > &triangle_mask)
 This function removes the triangles that are masked in triangle_mask. Call RemoveUnreferencedVertices to clean up vertices afterwards. More...
 
void RemoveVerticesByIndex (const std::vector< size_t > &vertex_indices)
 This function removes the vertices with index in vertex_indices. Note that also all triangles associated with the vertices are removeds. More...
 
void RemoveVerticesByMask (const std::vector< bool > &vertex_mask)
 This function removes the vertices that are masked in vertex_mask. Note that also all triangles associated with the vertices are removed.. More...
 
std::shared_ptr< ccMeshDeformAsRigidAsPossible (const std::vector< int > &constraint_vertex_indices, const std::vector< Eigen::Vector3d > &constraint_vertex_positions, size_t max_iter, DeformAsRigidAsPossibleEnergy energy=DeformAsRigidAsPossibleEnergy::Spokes, double smoothed_alpha=0.01) const
 This function deforms the mesh using the method by Sorkine and Alexa, "As-Rigid-As-Possible Surface Modeling", 2007. More...
 
- Public Member Functions inherited from ccGenericMesh
 ccGenericMesh (QString name=QString())
 Default constructor. More...
 
 ~ccGenericMesh () override=default
 Destructor. More...
 
void showNormals (bool state) override
 Sets normals visibility. More...
 
virtual bool isShownAsWire () const
 Returns whether the mesh is displayed as wired or with plain facets. More...
 
virtual void showWired (bool state)
 Sets whether mesh should be displayed as a wire or with plain facets. More...
 
virtual bool isShownAsPoints () const
 Returns whether the mesh is displayed as wired or with plain facets. More...
 
virtual void showPoints (bool state)
 
virtual bool triNormsShown () const
 Returns whether per-triangle normals are shown or not. More...
 
virtual void showTriNorms (bool state)
 Sets whether to show or not per-triangle normals. More...
 
virtual bool materialsShown () const
 Sets whether textures/material should be displayed or not. More...
 
virtual void showMaterials (bool state)
 Sets whether textures should be displayed or not. More...
 
virtual bool stipplingEnabled () const
 Returns whether polygon stippling is enabled or not. More...
 
void enableStippling (bool state)
 Enables polygon stippling. More...
 
ccPointCloudsamplePoints (bool densityBased, double samplingParameter, bool withNormals, bool withRGB, bool withTexture, cloudViewer::GenericProgressCallback *pDlg=nullptr)
 Samples points on a mesh. More...
 
void importParametersFrom (const ccGenericMesh *mesh)
 Imports the parameters from another mesh. More...
 
virtual bool trianglePicking (const CCVector2d &clickPos, const ccGLCameraParameters &camera, int &nearestTriIndex, double &nearestSquareDist, CCVector3d &nearestPoint, CCVector3d *barycentricCoords=nullptr) const
 Brute force triangle picking. More...
 
virtual bool trianglePicking (unsigned triIndex, const CCVector2d &clickPos, const ccGLCameraParameters &camera, CCVector3d &point, CCVector3d *barycentricCoords=nullptr) const
 Triangle picking (single triangle) More...
 
bool computePointPosition (unsigned triIndex, const CCVector2d &uv, CCVector3 &P, bool warningIfOutside=true) const
 
void setGlobalShift (const CCVector3d &shift) override
 Sets shift applied to original coordinates (information storage only) More...
 
void setGlobalScale (double scale) override
 
const CCVector3dgetGlobalShift () const override
 Returns the shift applied to original coordinates. More...
 
double getGlobalScale () const override
 Returns the scale applied to original coordinates. More...
 
bool updateTextures (const std::string &texture_file)
 
bool updateTextures (const std::vector< std::string > &texture_files)
 
- Public Member Functions inherited from cloudViewer::GenericIndexedMesh
 GenericIndexedMesh ()=default
 
 ~GenericIndexedMesh () override=default
 Default destructor. More...
 
- Public Member Functions inherited from cloudViewer::GenericMesh
 GenericMesh ()=default
 
virtual ~GenericMesh ()=default
 Default destructor. More...
 
virtual bool hasTriangles () const
 
- Public Member Functions inherited from ccShiftedObject
 ccShiftedObject (QString name=QString())
 Default constructor. More...
 
 ccShiftedObject (const ccShiftedObject &s)
 Copy constructor. More...
 
void copyGlobalShiftAndScale (const ccShiftedObject &s)
 Copies the Global Shift and Scale from another entity. More...
 
virtual void setGlobalShift (double x, double y, double z)
 Sets shift applied to original coordinates (information storage only) More...
 
bool isShifted () const
 Returns whether the cloud is shifted or not. More...
 
template<typename T >
CCVector3d toGlobal3d (const Vector3Tpl< T > &Plocal) const
 Returns the point back-projected into the original coordinates system. More...
 
template<typename T >
CCVector3d toLocal3d (const Vector3Tpl< T > &Pglobal) const
 Returns the point projected into the local (shifted) coordinates system. More...
 
template<typename T >
CCVector3 toLocal3pc (const Vector3Tpl< T > &Pglobal) const
 Returns the point projected into the local (shifted) coordinates system. More...
 
bool getOwnGlobalBB (CCVector3d &minCorner, CCVector3d &maxCorner) override
 
GlobalBoundingBox getOwnGlobalBB (bool withGLFeatures=false) override
 
- Public Member Functions inherited from ccHObject
 ccHObject (QString name=QString())
 Default constructor. More...
 
 ccHObject (const ccHObject &object)
 Copy constructor. More...
 
virtual ~ccHObject () override
 Default destructor. More...
 
virtual Eigen::Vector2d GetMin2DBound () const
 
virtual Eigen::Vector2d GetMax2DBound () const
 
virtual ccHObjectScale (const double s)
 
virtual ccHObjectRotate (const Eigen::Matrix3d &R)
 
QString getViewId () const
 
bool isGroup () const
 Returns whether the instance is a group. More...
 
ccHObjectgetParent () const
 Returns parent object. More...
 
virtual QIcon getIcon () const
 Returns the icon associated to this entity. More...
 
void addDependency (ccHObject *otherObject, int flags, bool additive=true)
 Adds a new dependence (additive or not) More...
 
int getDependencyFlagsWith (const ccHObject *otherObject)
 Returns the dependency flags with a given object. More...
 
void removeDependencyWith (ccHObject *otherObject)
 Removes any dependency flags with a given object. More...
 
void removeDependencyFlag (ccHObject *otherObject, DEPENDENCY_FLAGS flag)
 Removes a given dependency flag. More...
 
virtual bool addChild (ccHObject *child, int dependencyFlags=DP_PARENT_OF_OTHER, int insertIndex=-1)
 Adds a child. More...
 
unsigned getChildrenNumber () const
 Returns the number of children. More...
 
unsigned int getChildCountRecursive () const
 Returns the total number of children under this object recursively. More...
 
ccHObjectgetChild (unsigned childPos) const
 Returns the ith child. More...
 
ccHObjectfind (unsigned uniqueID)
 Finds an entity in this object hierarchy. More...
 
unsigned filterChildren (Container &filteredChildren, bool recursive=false, CV_CLASS_ENUM filter=CV_TYPES::OBJECT, bool strict=false) const
 Collects the children corresponding to a certain pattern. More...
 
void detachChild (ccHObject *child)
 Detaches a specific child. More...
 
void detachAllChildren ()
 Removes a specific child. More...
 
void getTypeID_recursive (std::vector< removeInfo > &rmInfos, bool relative)
 
void getTypeID_recursive (std::vector< hideInfo > &hdInfos, bool relative)
 
void removeChild (ccHObject *child)
 
void removeChild (int pos)
 Removes a specific child given its index. More...
 
void removeAllChildren ()
 Removes all children. More...
 
int getChildIndex (const ccHObject *aChild) const
 Returns child index. More...
 
void swapChildren (unsigned firstChildIndex, unsigned secondChildIndex)
 Swaps two children. More...
 
int getIndex () const
 Returns index relatively to its parent or -1 if no parent. More...
 
void transferChild (ccHObject *child, ccHObject &newParent)
 Transfer a given child to another parent. More...
 
void transferChildren (ccHObject &newParent, bool forceFatherDependent=false)
 Transfer all children to another parent. More...
 
ccHObjectgetFirstChild () const
 Shortcut: returns first child. More...
 
ccHObjectgetLastChild () const
 Shortcut: returns last child. More...
 
bool isAncestorOf (const ccHObject *anObject) const
 Returns true if the current object is an ancestor of the specified one. More...
 
void removeFromRenderScreen (bool recursive=true)
 
void hideObject_recursive (bool recursive)
 
void hideBB (CC_DRAW_CONTEXT context)
 
void showBB (CC_DRAW_CONTEXT context)
 
void setRedrawFlagRecursive (bool redraw=false)
 
void setForceRedrawRecursive (bool redraw=false)
 
void setPointSizeRecursive (int pSize)
 
void setLineWidthRecursive (PointCoordinateType width)
 
virtual ccBBox getBB_recursive (bool withGLFeatures=false, bool onlyEnabledChildren=true)
 Returns the bounding-box of this entity and it's children. More...
 
virtual GlobalBoundingBox getGlobalBB_recursive (bool withGLFeatures=false, bool onlyEnabledChildren=true)
 Returns the global bounding-box of this entity and it's children. More...
 
virtual ccBBox getDisplayBB_recursive (bool relative)
 Returns the bounding-box of this entity and it's children WHEN DISPLAYED. More...
 
virtual ccBBox getOwnFitBB (ccGLMatrix &trans)
 Returns best-fit bounding-box (if available) More...
 
virtual void drawBB (CC_DRAW_CONTEXT &context, const ecvColor::Rgb &col)
 Draws the entity (and its children) bounding-box. More...
 
void draw (CC_DRAW_CONTEXT &context) override
 Draws entity and its children. More...
 
void updateNameIn3DRecursive ()
 
void setHideShowType (CC_DRAW_CONTEXT &context)
 
void setRemoveType (CC_DRAW_CONTEXT &context)
 
ENTITY_TYPE getEntityType () const
 
virtual void redrawDisplay (bool forceRedraw=true, bool only2D=false)
 Redraws associated display. More...
 
bool getAbsoluteGLTransformation (ccGLMatrix &trans) const
 
virtual bool isDisplayed () const
 Returns whether the object is actually displayed (visible) or not. More...
 
virtual bool isBranchEnabled () const
 Returns whether the object and all its ancestors are enabled. More...
 
virtual void redrawDisplay_recursive (bool p)
 
virtual void refreshDisplay_recursive (bool p)
 
virtual void setSelected_recursive (bool p)
 
virtual void toggleActivation_recursive ()
 
virtual void toggleVisibility_recursive ()
 
virtual void toggleColors_recursive ()
 
virtual void resetGLTransformationHistory_recursive ()
 
virtual void toggleNormals_recursive ()
 
virtual void toggleSF_recursive ()
 
virtual void toggleShowName_recursive ()
 
unsigned findMaxUniqueID_recursive () const
 Returns the max 'unique ID' of this entity and its siblings. More...
 
void applyGLTransformation_recursive (const ccGLMatrix *trans=nullptr)
 Applies the active OpenGL transformation to the entity (recursive) More...
 
virtual void notifyGeometryUpdate ()
 
bool toFile (QFile &out, short dataVersion) const override
 Saves data to binary stream. More...
 
bool fromFile (QFile &in, short dataVersion, int flags, LoadedIDMap &oldToNewIDMap) override
 Loads data from binary stream. More...
 
short minimumFileVersion () const override
 Returns the minimum file version required to save this instance. More...
 
bool fromFileNoChildren (QFile &in, short dataVersion, int flags, LoadedIDMap &oldToNewIDMap)
 Custom version of ccSerializableObject::fromFile. More...
 
virtual bool isShareable () const
 Returns whether object is shareable or not. More...
 
virtual void setSelectionBehavior (SelectionBehavior mode)
 Sets selection behavior (when displayed) More...
 
virtual SelectionBehavior getSelectionBehavior () const
 Returns selection behavior. More...
 
virtual void setGLTransformationHistory (const ccGLMatrix &mat)
 Sets the transformation 'history' matrix (handle with care!) More...
 
virtual void resetGLTransformationHistory ()
 Resets the transformation 'history' matrix. More...
 
bool pushDisplayState () override
 Pushes the current display state (overridden) More...
 
void popDisplayState (bool apply=true) override
 Pops the last pushed display state (overridden) More...
 
- Public Member Functions inherited from ccObject
 ccObject (QString name=QString())
 Default constructor. More...
 
 ccObject (const ccObject &object)
 Copy constructor. More...
 
virtual QString getName () const
 Returns object name. More...
 
virtual void setName (const QString &name)
 Sets object name. More...
 
virtual void setRemoveFlag (bool removeFlag)
 Sets removeFlag. More...
 
virtual bool getRemoveFlag ()
 Returns removeFlag. More...
 
virtual unsigned getUniqueID () const
 Returns object unique ID. More...
 
virtual void setUniqueID (unsigned ID)
 Changes unique ID. More...
 
virtual bool isEnabled () const
 Returns whether the object is enabled or not. More...
 
virtual void setEnabled (bool state)
 Sets the "enabled" property. More...
 
virtual void toggleActivation ()
 Toggles the "enabled" property. More...
 
virtual bool isLocked () const
 Returns whether the object is locked or not. More...
 
virtual void setLocked (bool state)
 Sets the "enabled" property. More...
 
bool isLeaf () const
 
bool isCustom () const
 
bool isHierarchy () const
 
bool isKindOf (CV_CLASS_ENUM type) const
 
bool isA (CV_CLASS_ENUM type) const
 
QVariant getMetaData (const QString &key) const
 Returns a given associated meta data. More...
 
bool removeMetaData (const QString &key)
 Removes a given associated meta-data. More...
 
void setMetaData (const QString &key, const QVariant &data)
 Sets a meta-data element. More...
 
void setMetaData (const QVariantMap &dataset, bool overwrite=false)
 Sets several meta-data elements at a time. More...
 
bool hasMetaData (const QString &key) const
 Returns whether a meta-data element with the given key exists or not. More...
 
const QVariantMap & metaData () const
 Returns meta-data map (const only) More...
 
void setBaseName (const QString &baseName)
 
QString getBaseName () const
 
void setFullPath (const QString &fullPaht)
 
QString getFullPath () const
 
- Public Member Functions inherited from ccSerializableObject
virtual ~ccSerializableObject ()=default
 Destructor. More...
 
- Public Member Functions inherited from ccDrawableObject
 ccDrawableObject ()
 Default constructor. More...
 
 ccDrawableObject (const ccDrawableObject &object)
 Copy constructor. More...
 
virtual ~ccDrawableObject ()=default
 
virtual bool isVisible () const
 Returns whether entity is visible or not. More...
 
virtual void setVisible (bool state)
 Sets entity visibility. More...
 
virtual void toggleVisibility ()
 Toggles visibility. More...
 
virtual bool isRedraw () const
 Returns whether entity is to be redraw. More...
 
virtual void setRedraw (bool state)
 Sets entity redraw mode. More...
 
virtual void setForceRedraw (bool state)
 Sets force redraw. More...
 
virtual void setFixedId (bool state)
 
virtual bool isFixedId ()
 
virtual bool isVisibilityLocked () const
 Returns whether visibility is locked or not. More...
 
virtual void lockVisibility (bool state)
 Locks/unlocks visibility. More...
 
virtual bool isSelected () const
 Returns whether entity is selected or not. More...
 
virtual void setSelected (bool state)
 Selects/Unselects entity. More...
 
virtual void getDrawingParameters (glDrawParams &params) const
 Returns main OpenGL parameters for this entity. More...
 
virtual bool colorsShown () const
 Returns whether colors are shown or not. More...
 
virtual void showColors (bool state)
 Sets colors visibility. More...
 
virtual void toggleColors ()
 Toggles colors display state. More...
 
virtual void toggleNormals ()
 Toggles normals display state. More...
 
virtual void showSF (bool state)
 Sets active scalarfield visibility. More...
 
virtual void toggleSF ()
 Toggles SF display state. More...
 
virtual bool sfShown () const
 Returns whether active scalar field is visible. More...
 
virtual void showNameIn3D (bool state)
 Sets whether name should be displayed in 3D. More...
 
virtual bool nameShownIn3D () const
 Returns whether name is displayed in 3D or not. More...
 
virtual void toggleShowName ()
 Toggles name in 3D display state. More...
 
virtual bool isColorOverridden () const
 
virtual const ecvColor::RgbgetTempColor () const
 Returns current temporary (unique) color. More...
 
virtual void setTempColor (const ecvColor::Rgb &col, bool autoActivate=true)
 Sets current temporary (unique) More...
 
virtual void enableTempColor (bool state)
 Set temporary color activation state. More...
 
virtual float getOpacity () const
 
virtual void setOpacity (float opacity)
 Set opacity activation state. More...
 
virtual void setGLTransformation (const ccGLMatrix &trans)
 Associates entity with a GL transformation (rotation + translation) More...
 
virtual void enableGLTransformation (bool state)
 Enables/disables associated GL transformation. More...
 
virtual bool isGLTransEnabled () const
 Returns whether a GL transformation is enabled or not. More...
 
virtual const ccGLMatrixgetGLTransformation () const
 Returns associated GL transformation. More...
 
virtual void resetGLTransformation ()
 Resets associated GL transformation. More...
 
virtual void rotateGL (const ccGLMatrix &rotMat)
 Multiplies (left) current GL transformation by a rotation matrix. More...
 
virtual void translateGL (const CCVector3 &trans)
 Translates current GL transformation by a rotation matrix. More...
 
virtual void removeAllClipPlanes ()
 Removes all clipping planes (if any) More...
 
virtual bool addClipPlanes (const ccClipPlane &plane)
 Registers a new clipping plane. More...
 
virtual void toggleClipPlanes (CC_DRAW_CONTEXT &context, bool enable)
 Enables or disables clipping planes (OpenGL) More...
 
virtual void applyDisplayState (const DisplayState &state)
 Applies a display state. More...
 

Static Public Member Functions

static cloudViewer::VerticesIndexes GetOrderedTriangle (int vidx0, int vidx1, int vidx2)
 
static ccMeshTriangulate (ccGenericPointCloud *cloud, cloudViewer::TRIANGULATION_TYPES type, bool updateNormals=false, PointCoordinateType maxEdgeLength=0, unsigned char dim=2)
 Creates a Delaunay 2.5D mesh from a point cloud. More...
 
static ccMeshTriangulateTwoPolylines (ccPolyline *p1, ccPolyline *p2, CCVector3 *projectionDir=nullptr)
 Creates a Delaunay 2.5D mesh from two polylines. More...
 
static double ComputeTriangleArea (const Eigen::Vector3d &p0, const Eigen::Vector3d &p1, const Eigen::Vector3d &p2)
 Function that computes the area of a mesh triangle. More...
 
static Eigen::Vector3i GetEigneOrderedTriangle (int vidx0, int vidx1, int vidx2)
 
static Eigen::Vector4d ComputeTrianglePlane (const Eigen::Vector3d &p0, const Eigen::Vector3d &p1, const Eigen::Vector3d &p2)
 
static Eigen::Vector2i GetOrderedEdge (int vidx0, int vidx1)
 Helper function to get an edge with ordered vertex indices. More...
 
static std::shared_ptr< ccMeshCreateFromPointCloudAlphaShape (const ccPointCloud &pcd, double alpha, std::shared_ptr< cloudViewer::geometry::TetraMesh > tetra_mesh=nullptr, std::vector< size_t > *pt_map=nullptr)
 Alpha shapes are a generalization of the convex hull. With decreasing alpha value the shape schrinks and creates cavities. See Edelsbrunner and Muecke, "Three-Dimensional Alpha Shapes", 1994. More...
 
static std::shared_ptr< ccMeshCreateFromPointCloudBallPivoting (const ccPointCloud &pcd, const std::vector< double > &radii)
 
static std::tuple< std::shared_ptr< ccMesh >, std::vector< double > > CreateFromPointCloudPoisson (const ccPointCloud &pcd, size_t depth=8, size_t width=0, float scale=1.1f, bool linear_fit=false, float point_weight=2.f, float samples_per_node=1.5f, int boundary_type=2, int n_threads=-1)
 Function that computes a triangle mesh from a oriented PointCloud pcd. This implements the Screened Poisson Reconstruction proposed in Kazhdan and Hoppe, "Screened Poisson Surface Reconstruction", 2013. This function uses the original implementation by Kazhdan. See https://github.com/mkazhdan/PoissonRecon. More...
 
static std::shared_ptr< ccMeshCreateTetrahedron (double radius=1.0, bool create_uv_map=false)
 
static std::shared_ptr< ccMeshCreateOctahedron (double radius=1.0, bool create_uv_map=false)
 
static std::shared_ptr< ccMeshCreateIcosahedron (double radius=1.0, bool create_uv_map=false)
 
static std::shared_ptr< ccMeshCreatePlane (double width=1.0, double height=1.0, bool create_uv_map=false)
 
static std::shared_ptr< ccMeshCreateBox (double width=1.0, double height=1.0, double depth=1.0, bool create_uv_map=false, bool map_texture_to_each_face=false)
 
static std::shared_ptr< ccMeshCreateSphere (double radius=1.0, int resolution=20, bool create_uv_map=false)
 
static std::shared_ptr< ccMeshCreateCylinder (double radius=1.0, double height=2.0, int resolution=20, int split=4, bool create_uv_map=false)
 
static std::shared_ptr< ccMeshCreateCone (double radius=1.0, double height=2.0, int resolution=20, int split=1, bool create_uv_map=false)
 
static std::shared_ptr< ccMeshCreateTorus (double torus_radius=1.0, double tube_radius=0.5, int radial_resolution=30, int tubular_resolution=20)
 
static std::shared_ptr< ccMeshCreateArrow (double cylinder_radius=1.0, double cone_radius=1.5, double cylinder_height=5.0, double cone_height=4.0, int resolution=20, int cylinder_split=4, int cone_split=1)
 
static std::shared_ptr< ccMeshCreateCoordinateFrame (double size=1.0, const Eigen::Vector3d &origin=Eigen::Vector3d(0.0, 0.0, 0.0))
 
static std::shared_ptr< ccMeshCreateMobius (int length_split=70, int width_split=15, int twists=1, double radius=1, double flatness=1, double width=1, double scale=1)
 
- Static Public Member Functions inherited from ccGenericMesh
static bool IsCloudVerticesOfMesh (ccGenericPointCloud *cloud, ccGenericMesh **mesh=nullptr)
 Helper to determine if the input cloud acts as vertices of a mesh. More...
 
- Static Public Member Functions inherited from ccHObject
static ccHObjectNew (CV_CLASS_ENUM objectType, const char *name=nullptr)
 Static factory. More...
 
static ccHObjectNew (const QString &pluginId, const QString &classId, const char *name=nullptr)
 Static factory (version to be used by external plugin factories) More...
 
static Eigen::Vector3d ComputeMinBound (const std::vector< Eigen::Vector3d > &points)
 Compute min bound of a list points. More...
 
static Eigen::Vector3d ComputeMaxBound (const std::vector< Eigen::Vector3d > &points)
 Compute max bound of a list points. More...
 
static Eigen::Vector3d ComputeCenter (const std::vector< Eigen::Vector3d > &points)
 Computer center of a list of points. More...
 
static void ResizeAndPaintUniformColor (std::vector< Eigen::Vector3d > &colors, std::size_t size, const Eigen::Vector3d &color)
 Resizes the colors vector and paints a uniform color. More...
 
static void TransformPoints (const Eigen::Matrix4d &transformation, std::vector< Eigen::Vector3d > &points)
 Transforms all points with the transformation matrix. More...
 
static void TransformNormals (const Eigen::Matrix4d &transformation, std::vector< Eigen::Vector3d > &normals)
 Transforms the normals with the transformation matrix. More...
 
static void TransformCovariances (const Eigen::Matrix4d &transformation, std::vector< Eigen::Matrix3d > &covariances)
 Transforms all covariance matrices with the transformation. More...
 
static void TranslatePoints (const Eigen::Vector3d &translation, std::vector< Eigen::Vector3d > &points, bool relative)
 Apply translation to the geometry coordinates. More...
 
static void ScalePoints (const double scale, std::vector< Eigen::Vector3d > &points, const Eigen::Vector3d &center)
 Scale the coordinates of all points by the scaling factor scale. More...
 
static void RotatePoints (const Eigen::Matrix3d &R, std::vector< Eigen::Vector3d > &points, const Eigen::Vector3d &center)
 Rotate all points with the rotation matrix R. More...
 
static void RotateNormals (const Eigen::Matrix3d &R, std::vector< Eigen::Vector3d > &normals)
 Rotate all normals with the rotation matrix R. More...
 
static void RotateCovariances (const Eigen::Matrix3d &R, std::vector< Eigen::Matrix3d > &covariances)
 Rotate all covariance matrices with the rotation matrix R. More...
 
static Eigen::Matrix3d GetRotationMatrixFromXYZ (const Eigen::Vector3d &rotation)
 Get Rotation Matrix from XYZ RotationType. More...
 
static Eigen::Matrix3d GetRotationMatrixFromYZX (const Eigen::Vector3d &rotation)
 Get Rotation Matrix from YZX RotationType. More...
 
static Eigen::Matrix3d GetRotationMatrixFromZXY (const Eigen::Vector3d &rotation)
 Get Rotation Matrix from ZXY RotationType. More...
 
static Eigen::Matrix3d GetRotationMatrixFromXZY (const Eigen::Vector3d &rotation)
 Get Rotation Matrix from XZY RotationType. More...
 
static Eigen::Matrix3d GetRotationMatrixFromZYX (const Eigen::Vector3d &rotation)
 Get Rotation Matrix from ZYX RotationType. More...
 
static Eigen::Matrix3d GetRotationMatrixFromYXZ (const Eigen::Vector3d &rotation)
 Get Rotation Matrix from YXZ RotationType. More...
 
static Eigen::Matrix3d GetRotationMatrixFromAxisAngle (const Eigen::Vector3d &rotation)
 Get Rotation Matrix from AxisAngle RotationType. More...
 
static Eigen::Matrix3d GetRotationMatrixFromQuaternion (const Eigen::Vector4d &rotation)
 Get Rotation Matrix from Quaternion. More...
 
static Eigen::Matrix3d GetRotationMatrixFromEulerAngle (const Eigen::Vector3d &rotation)
 Get Rotation Matrix from Euler angle. More...
 
- Static Public Member Functions inherited from ccObject
static unsigned GetCurrentDBVersion ()
 Returns current database version. More...
 
static void SetUniqueIDGenerator (ccUniqueIDGenerator::Shared generator)
 Sets the unique ID generator. More...
 
static ccUniqueIDGenerator::Shared GetUniqueIDGenerator ()
 Returns the unique ID generator. More...
 
static unsigned GetNextUniqueID ()
 Returns a new unassigned unique ID. More...
 
static unsigned GetLastUniqueID ()
 Returns last assigned unique ID. More...
 
static CV_CLASS_ENUM ReadClassIDFromFile (QFile &in, short dataVersion)
 Helper: reads out class ID from a binary stream. More...
 
- Static Public Member Functions inherited from ccSerializableObject
static bool WriteError ()
 Sends a custom error message (write error) and returns 'false'. More...
 
static bool ReadError ()
 Sends a custom error message (read error) and returns 'false'. More...
 
static bool MemoryError ()
 Sends a custom error message (not enough memory) and returns 'false'. More...
 
static bool CorruptError ()
 Sends a custom error message (corrupted file) and returns 'false'. More...
 

Public Attributes

std::vector< std::unordered_set< int > > adjacency_list_
 
std::vector< Eigen::Vector2d > triangle_uvs_
 List of uv coordinates per triangle. More...
 
std::vector< std::pair< std::string, Material > > materials_
 
std::vector< int > triangle_material_ids_
 List of material ids. More...
 
std::vector< cloudViewer::geometry::Imagetextures_
 Textures of the image. More...
 

Static Public Attributes

static const unsigned char DefaultMergeDulicateVerticesLevel = 10
 Default octree level for the 'mergeDuplicatedVertices' algorithm. More...
 

Protected Types

using triangleTexCoordIndexesSet = ccArray< Tuple3i, 3, int >
 Set of triplets of indexes referring to mesh texture coordinates. More...
 
using triangleNormalsIndexesSet = ccArray< Tuple3i, 3, int >
 Set of triplets of indexes referring to mesh normals. More...
 

Protected Member Functions

void FilterSmoothLaplacianHelper (std::shared_ptr< ccMesh > &mesh, const std::vector< CCVector3 > &prev_vertices, const std::vector< CCVector3 > &prev_vertex_normals, const ColorsTableType &prev_vertex_colors, const std::vector< std::unordered_set< int >> &adjacency_list, double lambda, bool filter_vertex, bool filter_normal, bool filter_color) const
 
void drawMeOnly (CC_DRAW_CONTEXT &context) override
 Enables (OpenGL) stipple mask. More...
 
bool toFile_MeOnly (QFile &out, short dataVersion) const override
 Save own object data. More...
 
short minimumFileVersion_MeOnly () const override
 
bool fromFile_MeOnly (QFile &in, short dataVersion, int flags, LoadedIDMap &oldToNewIDMap) override
 Loads own object data. More...
 
void applyGLTransformation (const ccGLMatrix &trans) override
 Applies a GL transformation to the entity. More...
 
void onUpdateOf (ccHObject *obj) override
 This method is called when another object (geometry) is updated. More...
 
void onDeletionOf (const ccHObject *obj) override
 This method is called when another object is deleted. More...
 
void computeInterpolationWeights (const cloudViewer::VerticesIndexes &vertIndexes, const CCVector3 &P, CCVector3d &weights) const
 
bool interpolateNormals (const cloudViewer::VerticesIndexes &vertIndexes, const CCVector3d &w, CCVector3 &N, const Tuple3i *triNormIndexes=nullptr)
 
bool interpolateColors (const cloudViewer::VerticesIndexes &vertIndexes, const CCVector3 &P, ecvColor::Rgb &C)
 
bool pushSubdivide (unsigned indexA, unsigned indexB, unsigned indexC)
 Used internally by 'subdivide'. More...
 
virtual void showNormals_extended (bool p)
 
- Protected Member Functions inherited from ccGenericMesh
virtual bool trianglePicking (unsigned triIndex, const CCVector2d &clickPos, const ccGLMatrix &trans, bool noGLTrans, const ccGenericPointCloud &vertices, const ccGLCameraParameters &camera, CCVector3d &point, CCVector3d *barycentricCoords=nullptr) const
 Triangle picking (single triangle) More...
 
void handleColorRamp (CC_DRAW_CONTEXT &context)
 Handles the color ramp display. More...
 
- Protected Member Functions inherited from ccShiftedObject
bool saveShiftInfoToFile (QFile &out) const
 Serialization helper (output) More...
 
bool loadShiftInfoFromFile (QFile &in)
 Serialization helper (input) More...
 
- Protected Member Functions inherited from ccHObject
virtual void setParent (ccHObject *anObject)
 Sets parent object. More...
 
virtual void drawNameIn3D ()
 Draws the entity name in 3D. More...
 
- Protected Member Functions inherited from ccObject
virtual bool getFlagState (CV_OBJECT_FLAG flag) const
 Returns flag state. More...
 
virtual void setFlagState (CV_OBJECT_FLAG flag, bool state)
 Sets flag state. More...
 
bool toFile (QFile &out, short dataVersion) const override
 Saves data to binary stream. More...
 
short minimumFileVersion () const override
 Returns the minimum file version required to save this instance. More...
 
bool fromFile (QFile &in, short dataVersion, int flags, LoadedIDMap &oldToNewIDMap) override
 Reimplemented from ccSerializableObject::fromFile. More...
 

Protected Attributes

ccGenericPointCloudm_associatedCloud
 associated cloud (vertices) More...
 
NormsIndexesTableTypem_triNormals
 Per-triangle normals. More...
 
TextureCoordsContainerm_texCoords
 Texture coordinates. More...
 
ccMaterialSetm_materials
 Materials. More...
 
triangleIndexesContainerm_triVertIndexes
 Triangles' vertices indexes (3 per triangle) More...
 
unsigned m_globalIterator
 Iterator on the list of triangles. More...
 
cloudViewer::SimpleRefTriangle m_currentTriangle
 Dump triangle structure to transmit temporary data. More...
 
ccBBox m_bBox
 Bounding-box. More...
 
triangleMaterialIndexesSetm_triMtlIndexes
 Per-triangle material indexes. More...
 
triangleTexCoordIndexesSetm_texCoordIndexes
 Mesh tex coords indexes (per-triangle) More...
 
triangleNormalsIndexesSetm_triNormalIndexes
 Mesh normals indexes (per-triangle) More...
 
- Protected Attributes inherited from ccGenericMesh
bool m_triNormsShown
 Per-triangle normals display flag. More...
 
bool m_materialsShown
 Texture/material display flag. More...
 
bool m_showWired
 Wireframe display mode. More...
 
bool m_showPoints
 points display mode More...
 
bool m_stippling
 Polygon stippling state. More...
 
- Protected Attributes inherited from ccShiftedObject
CCVector3d m_globalShift
 Global shift (typically applied at loading time) More...
 
double m_globalScale
 Global scale (typically applied at loading time) More...
 
- Protected Attributes inherited from ccHObject
ccHObjectm_parent
 Parent. More...
 
Container m_children
 Children. More...
 
SelectionBehavior m_selectionBehavior
 Selection behavior. More...
 
std::map< ccHObject *, int > m_dependencies
 Dependencies map. More...
 
ccGLMatrix m_glTransHistory
 Cumulative GL transformation. More...
 
bool m_isDeleting
 Flag to safely handle dependencies when the object is being deleted. More...
 
- Protected Attributes inherited from ccObject
QString m_name
 Object name. More...
 
QString m_baseName
 
QString m_filePath
 
bool m_removeFlag
 
unsigned m_flags
 Object flags. More...
 
QVariantMap m_metaData
 Associated meta-data. More...
 
- Protected Attributes inherited from ccDrawableObject
bool m_fixedId
 
bool m_modelRedraw
 
bool m_forceRedraw
 
float m_opacity
 
bool m_visible
 Specifies whether the object is visible or not. More...
 
bool m_selected
 Specifies whether the object is selected or not. More...
 
bool m_lockedVisibility
 Specifies whether the visibility can be changed by user or not. More...
 
bool m_colorsDisplayed
 Specifies whether colors should be displayed. More...
 
bool m_normalsDisplayed
 Specifies whether normals should be displayed. More...
 
bool m_sfDisplayed
 Specifies whether scalar field should be displayed. More...
 
ecvColor::Rgb m_tempColor
 Temporary (unique) color. More...
 
bool m_colorIsOverridden
 Temporary (unique) color activation state. More...
 
ccGLMatrix m_glTrans
 Current GL transformation. More...
 
bool m_glTransEnabled
 Current GL transformation activation state. More...
 
bool m_showNameIn3D
 Whether name is displayed in 3D or not. More...
 
CCVector3d m_nameIn3DPos
 Last 2D position of the '3D' name. More...
 
ccClipPlaneSet m_clipPlanes
 Active clipping planes (used for display only) More...
 
std::vector< DisplayState::Sharedm_displayStateStack
 The stack of pushed display states. More...
 

Additional Inherited Members

- Static Protected Member Functions inherited from ccGenericMesh
static CCVector3GetVertexBuffer ()
 
static CCVector3GetNormalsBuffer ()
 
static ecvColor::RgbGetColorsBuffer ()
 
static unsigned * GetWireVertexIndexes ()
 Returns a pre-initialized array of vertex indexes for wired display. More...
 

Detailed Description

Triangular mesh.

Definition at line 35 of file ecvMesh.h.

Member Typedef Documentation

◆ triangleIndexesContainer

Container of per-triangle vertices indexes (3)

Definition at line 277 of file ecvMesh.h.

◆ triangleMaterialIndexesSet

Container of per-triangle material descriptors.

Definition at line 447 of file ecvMesh.h.

◆ triangleNormalsIndexesSet

Set of triplets of indexes referring to mesh normals.

Definition at line 1521 of file ecvMesh.h.

◆ triangleTexCoordIndexesSet

Set of triplets of indexes referring to mesh texture coordinates.

Definition at line 1516 of file ecvMesh.h.

Member Enumeration Documentation

◆ MESH_SCALAR_FIELD_PROCESS

Mesh scalar field processes.

Enumerator
SMOOTH_MESH_SF 

Smooth

ENHANCE_MESH_SF 

Enhance

Definition at line 554 of file ecvMesh.h.

Constructor & Destructor Documentation

◆ ccMesh() [1/4]

ccMesh::ccMesh ( ccGenericPointCloud vertices = nullptr)
explicit

Default ccMesh constructor.

Parameters
verticesthe vertices cloud

◆ ccMesh() [2/4]

ccMesh::ccMesh ( const ccMesh mesh)

◆ ccMesh() [3/4]

ccMesh::ccMesh ( const std::vector< Eigen::Vector3d > &  vertices,
const std::vector< Eigen::Vector3i > &  triangles 
)
explicit

Parameterized Constructor.

Parameters
verticeslist of vertices.
triangleslist of triangles.

◆ ccMesh() [4/4]

ccMesh::ccMesh ( cloudViewer::GenericIndexedMesh giMesh,
ccGenericPointCloud giVertices 
)
explicit

ccMesh constructor (from a cloudViewer::GenericIndexedMesh)

The GenericIndexedMesh should refer to a known ccGenericPointCloud.

Parameters
giMeshthe GenericIndexedMesh
giVerticesgiMesh vertices

◆ ~ccMesh()

ccMesh::~ccMesh ( )
override

Default destructor.

Member Function Documentation

◆ _getNextTriangle()

cloudViewer::GenericTriangle* ccMesh::_getNextTriangle ( )
overridevirtual

Returns the next triangle (relatively to the global iterator position)

Virtual method to handle the mesh global iterator. Global iterator position should be increased each time this method is called. The returned object can be temporary.

Returns
a triangle

Implements cloudViewer::GenericMesh.

Referenced by qVoxFallProcess::Compute().

◆ _getTriangle()

cloudViewer::GenericTriangle* ccMesh::_getTriangle ( unsigned  triangleIndex)
overridevirtual

Returns the ith triangle.

Virtual method to request a triangle with a specific index. The returned object can be temporary.

Parameters
triangleIndexof the requested triangle (between 0 and the mesh size-1)
Returns
the requested triangle, or 0 if index value is not valid

Implements cloudViewer::GenericIndexedMesh.

◆ addEigenVertices()

void ccMesh::addEigenVertices ( const std::vector< Eigen::Vector3d > &  vertices)

◆ addTriangle() [1/3]

void ccMesh::addTriangle ( const cloudViewer::VerticesIndexes triangle)

◆ addTriangle() [2/3]

void ccMesh::addTriangle ( const Eigen::Vector3i &  index)
inline

Definition at line 260 of file ecvMesh.h.

◆ addTriangle() [3/3]

void ccMesh::addTriangle ( unsigned  i1,
unsigned  i2,
unsigned  i3 
)

Adds a triangle to the mesh.

Warning
Bounding-box validity is broken after a call to this method. However, for the sake of performance, no call to notifyGeometryUpdate is made automatically. Make sure to do so when all modifications are done!
Parameters
i1first vertex index (relatively to the vertex cloud)
i2second vertex index (relatively to the vertex cloud)
i3third vertex index (relatively to the vertex cloud)

Referenced by MeshWrapper< Real >::addTriangle(), cloudViewer::io::AddTrianglesByEarClipping(), DistanceMapGenerationTool::ConvertConicalMapToMesh(), DistanceMapGenerationTool::ConvertProfileToMesh(), define_ccMesh(), FromFbxMesh(), STEPFilter::importStepFile(), CSVMatrixFilter::loadFile(), DRCFilter::loadFile(), cloudViewer::io::ReadTriangleMeshFromGLTF(), cloudViewer::io::ReadTriangleMeshFromOBJ(), cloudViewer::io::ReadTriangleMeshUsingASSIMP(), cloudViewer::t::geometry::TriangleMesh::ToLegacy(), Cloth::toMesh(), and GrainsAsEllipsoids::updateMeshAndLineSet().

◆ addTriangleMtlIndex()

void ccMesh::addTriangleMtlIndex ( int  mtlIndex)

◆ addTriangleNorm() [1/2]

bool ccMesh::addTriangleNorm ( const CCVector3 N)

◆ addTriangleNorm() [2/2]

bool ccMesh::addTriangleNorm ( const Eigen::Vector3d &  N)

◆ addTriangleNormalIndexes()

void ccMesh::addTriangleNormalIndexes ( int  i1,
int  i2,
int  i3 
)

Adds a triplet of normal indexes for next triangle.

Make sure per-triangle normal indexes array is allocated (see reservePerTriangleNormalIndexes)

Parameters
i1first vertex normal index
i2second vertex normal index
i3third vertex normal index

Referenced by FromFbxMesh(), and cloudViewer::geometry::pybind_trianglemesh().

◆ addTriangleNorms()

bool ccMesh::addTriangleNorms ( const std::vector< Eigen::Vector3d > &  triangle_normals)

◆ addTriangles()

void ccMesh::addTriangles ( const std::vector< Eigen::Vector3i > &  triangles)
inline

Definition at line 265 of file ecvMesh.h.

Referenced by define_ccMesh(), and cloudViewer::geometry::pybind_trianglemesh().

◆ addTriangleTexCoordIndexes()

void ccMesh::addTriangleTexCoordIndexes ( int  i1,
int  i2,
int  i3 
)

Adds a triplet of tex coords indexes for next triangle.

Make sure per-triangle tex coords indexes array is allocated (see reservePerTriangleTexCoordIndexes)

Parameters
i1first vertex tex coords index
i2second vertex tex coords index
i3third vertex tex coords index

Referenced by DistanceMapGenerationTool::ConvertConicalMapToMesh(), DistanceMapGenerationTool::ConvertProfileToMesh(), ccCropTool::Crop(), FromFbxMesh(), CSVMatrixFilter::loadFile(), and cloudViewer::geometry::pybind_trianglemesh().

◆ addVertexColor()

void ccMesh::addVertexColor ( const Eigen::Vector3d &  color)

◆ addVertexColors()

void ccMesh::addVertexColors ( const std::vector< Eigen::Vector3d > &  colors)

◆ addVertexNormal()

void ccMesh::addVertexNormal ( const Eigen::Vector3d &  normal)

◆ addVertexNormals()

void ccMesh::addVertexNormals ( const std::vector< Eigen::Vector3d > &  normals)

◆ addVertice()

void ccMesh::addVertice ( const Eigen::Vector3d &  vertice)

◆ applyGLTransformation()

void ccMesh::applyGLTransformation ( const ccGLMatrix trans)
overrideprotectedvirtual

Applies a GL transformation to the entity.

this = rotMat*(this-rotCenter)+(rotCenter+trans)

Parameters
transa ccGLMatrix structure

Reimplemented from ccHObject.

◆ arePerTriangleNormalsEnabled()

bool ccMesh::arePerTriangleNormalsEnabled ( ) const

Returns whether per triangle normals are enabled.

To enable per triangle normals, you should:

  • first, reserve memory for triangles (this is always the first thing to do)
  • associate this mesh to a triangle normals array (see ccMesh::setTriNormsTable)
  • reserve memory to store per-triangle normal indexes with ccMesh::reservePerTriangleNormalIndexes
  • add for each triangle a triplet of indexes (referring to stored normals)

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ capacity()

unsigned ccMesh::capacity ( ) const
overridevirtual

Returns max capacity.

Implements ccGenericMesh.

Referenced by MeshWrapper< Real >::checkMeshCapacity(), and STEPFilter::importStepFile().

◆ clear()

◆ clearTriNormals()

void ccMesh::clearTriNormals ( )
inline

◆ cloneMesh()

ccMesh* ccMesh::cloneMesh ( ccGenericPointCloud vertices = nullptr,
ccMaterialSet clonedMaterials = nullptr,
NormsIndexesTableType clonedNormsTable = nullptr,
TextureCoordsContainer cloneTexCoords = nullptr 
)

Clones this entity.

All the main features of the entity are cloned, except from the octree

Parameters
verticesvertices set to use (will be automatically - AND OPTIMALLY - cloned if 0)
clonedMaterialsfor internal use
clonedNormsTablefor internal use
cloneTexCoordsfor internal use
Returns
a copy of this entity

Referenced by qVoxFallProcess::Compute(), and cloudViewer::geometry::pybind_trianglemesh().

◆ ClusterConnectedTriangles()

std::tuple<std::vector<int>, std::vector<size_t>, std::vector<double> > ccMesh::ClusterConnectedTriangles ( ) const

Function that clusters connected triangles, i.e., triangles that are connected via edges are assigned the same cluster index.

Returns
A vector that contains the cluster index per triangle, a second vector contains the number of triangles per cluster, and a third vector contains the surface area per cluster.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ ComputeAdjacencyList()

ccMesh& ccMesh::ComputeAdjacencyList ( )

Function to compute adjacency list, call before adjacency list is.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ ComputeConvexHull()

std::tuple<std::shared_ptr<ccMesh>, std::vector<size_t> > ccMesh::ComputeConvexHull ( ) const

◆ ComputeEdgeWeightsCot()

std::unordered_map<Eigen::Vector2i, double, cloudViewer::utility::hash_eigen<Eigen::Vector2i> > ccMesh::ComputeEdgeWeightsCot ( const std::unordered_map< Eigen::Vector2i, std::vector< int >, cloudViewer::utility::hash_eigen< Eigen::Vector2i >> &  edges_to_vertices,
double  min_weight = std::numeric_limits< double >::lowest() 
) const

Function that computes for each edge in the triangle mesh and passed as parameter edges_to_vertices the cot weight.

Parameters
edges_to_verticesmap from edge to vector of neighbouring vertices.
min_weightminimum weight returned. Weights smaller than this get clamped.
Returns
cot weight per edge.

◆ computeInterpolationWeights() [1/2]

void ccMesh::computeInterpolationWeights ( const cloudViewer::VerticesIndexes vertIndexes,
const CCVector3 P,
CCVector3d weights 
) const
protected

Same as other 'computeInterpolationWeights' method with a set of 3 vertices indexes

◆ computeInterpolationWeights() [2/2]

void ccMesh::computeInterpolationWeights ( unsigned  triIndex,
const CCVector3 P,
CCVector3d weights 
) const
overridevirtual

Returns the (barycentric) interpolation weights for a given triangle.

Reimplemented from ccGenericMesh.

◆ computeNormals()

bool ccMesh::computeNormals ( bool  perVertex)

Computes normals.

Parameters
perVertexwhether normals should be computed per-vertex or per-triangle
Returns
success

Referenced by qPoissonRecon::doAction(), cloudViewer::geometry::pybind_trianglemesh(), and ecvPoissonReconDlg::start().

◆ computePerTriangleNormals()

bool ccMesh::computePerTriangleNormals ( )

Computes per-triangle normals.

Referenced by qVoxFallTransform::CreateVoxelMesh(), ccCropTool::Crop(), and STEPFilter::importStepFile().

◆ computePerVertexNormals()

bool ccMesh::computePerVertexNormals ( )

Computes per-vertex normals.

Referenced by ccCropTool::Crop(), qCSF::doAction(), and CSVMatrixFilter::loadFile().

◆ ComputeTriangleArea()

static double ccMesh::ComputeTriangleArea ( const Eigen::Vector3d &  p0,
const Eigen::Vector3d &  p1,
const Eigen::Vector3d &  p2 
)
static

Function that computes the area of a mesh triangle.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ ComputeTriangleNormals()

ccMesh& ccMesh::ComputeTriangleNormals ( bool  normalized = true)

Function to compute triangle normals, usually called before rendering.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ ComputeTrianglePlane()

static Eigen::Vector4d ccMesh::ComputeTrianglePlane ( const Eigen::Vector3d &  p0,
const Eigen::Vector3d &  p1,
const Eigen::Vector3d &  p2 
)
static

Function that computes the plane equation from the three points. If the three points are co-linear, then this function returns the invalid plane (0, 0, 0, 0).

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ ComputeVertexNormals()

ccMesh& ccMesh::ComputeVertexNormals ( bool  normalized = true)

Function to compute vertex normals, usually called before rendering.

Referenced by main(), and cloudViewer::geometry::pybind_trianglemesh().

◆ convertMaterialsToVertexColors()

bool ccMesh::convertMaterialsToVertexColors ( )

Converts materials to vertex colors.

Warning: this method will overwrite colors (if any)

Referenced by ccEntityAction::convertTextureToColor(), and cloudViewer::geometry::pybind_trianglemesh().

◆ CreateArrow()

static std::shared_ptr<ccMesh> ccMesh::CreateArrow ( double  cylinder_radius = 1.0,
double  cone_radius = 1.5,
double  cylinder_height = 5.0,
double  cone_height = 4.0,
int  resolution = 20,
int  cylinder_split = 4,
int  cone_split = 1 
)
static

Factory function to create an arrow mesh (TriangleMeshFactory.cpp) The axis of the cone with cone_radius will be along the z-axis. The cylinder with cylinder_radius is from (0, 0, 0) to (0, 0, cylinder_height), and the cone is from (0, 0, cylinder_height) to (0, 0, cylinder_height + cone_height). The cone will be split into resolution segments. The cylinder_height will be split into cylinder_split segments. The cone_height will be split into cone_split segments.

Parameters
cylinder_radiusdefines the radius of the cylinder.
cone_radiusdefines the radius of the cone.
cylinder_heightdefines the height of the cylinder. The cylinder is from (0, 0, 0) to (0, 0, cylinder_height)
cone_heightdefines the height of the cone. The axis of the cone will be from (0, 0, cylinder_height) to (0, 0, cylinder_height + cone_height).
resolutiondefines the cone will be split into resolution segments.
cylinder_splitdefines the cylinder_height will be split into cylinder_split segments.
cone_splitdefines the cone_height will be split into cone_split segments.

Referenced by cloudViewer::t::geometry::TriangleMesh::CreateArrow(), and cloudViewer::geometry::pybind_trianglemesh().

◆ CreateBox()

static std::shared_ptr<ccMesh> ccMesh::CreateBox ( double  width = 1.0,
double  height = 1.0,
double  depth = 1.0,
bool  create_uv_map = false,
bool  map_texture_to_each_face = false 
)
static

Factory function to create a box mesh (TriangleMeshFactory.cpp) The left bottom corner on the front will be placed at (0, 0, 0).

Parameters
widthis x-directional length.
heightis y-directional length.
depthis z-directional length.
create_uv_mapadd default UV map to the shape.
map_texture_to_each_faceif true, maps the entire texture image to each face. If false, sets the default uv map to the mesh.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ CreateCone()

static std::shared_ptr<ccMesh> ccMesh::CreateCone ( double  radius = 1.0,
double  height = 2.0,
int  resolution = 20,
int  split = 1,
bool  create_uv_map = false 
)
static

Factory function to create a cone mesh (TriangleMeshFactory.cpp) The axis of the cone will be from (0, 0, 0) to (0, 0, height). The circle with radius will be split into resolution segments. The height will be split into split segments.

Parameters
radiusdefines the radius of the cone.
heightdefines the height of the cone.
resolutiondefines that the circle will be split into resolution segments
splitdefines that the height will be split into split segments.
create_uv_mapadd default UV map to the mesh.

Referenced by cloudViewer::t::geometry::TriangleMesh::CreateCone(), and cloudViewer::geometry::pybind_trianglemesh().

◆ CreateCoordinateFrame()

static std::shared_ptr<ccMesh> ccMesh::CreateCoordinateFrame ( double  size = 1.0,
const Eigen::Vector3d &  origin = Eigen::Vector3d(0.0, 0.0, 0.0) 
)
static

Factory function to create a coordinate frame mesh (TriangleMeshFactory.cpp). arrows respectively.

Parameters
sizeis the length of the axes.
sizedefines the size of the coordinate frame.
origindefines the origin of the cooridnate frame.

Referenced by cloudViewer::visualization::Visualizer::BuildUtilities(), cloudViewer::t::geometry::TriangleMesh::CreateCoordinateFrame(), cloudViewer::geometry::pybind_trianglemesh(), and cloudViewer::visualization::Visualizer::ResetViewPoint().

◆ CreateCylinder()

static std::shared_ptr<ccMesh> ccMesh::CreateCylinder ( double  radius = 1.0,
double  height = 2.0,
int  resolution = 20,
int  split = 4,
bool  create_uv_map = false 
)
static

Factory function to create a cylinder mesh (TriangleMeshFactory.cpp) The axis of the cylinder will be from (0, 0, -height/2) to (0, 0, height/2). The circle with radius will be split into resolution segments. The height will be split into split segments.

Parameters
radiusdefines the radius of the cylinder.
heightdefines the height of the cylinder.
resolutiondefines that the circle will be split into resolution segments
splitdefines that the height will be split into split segments.
create_uv_mapadd default UV map to the mesh.

Referenced by cloudViewer::t::geometry::TriangleMesh::CreateCylinder(), and cloudViewer::geometry::pybind_trianglemesh().

◆ CreateFromPointCloudAlphaShape()

static std::shared_ptr<ccMesh> ccMesh::CreateFromPointCloudAlphaShape ( const ccPointCloud pcd,
double  alpha,
std::shared_ptr< cloudViewer::geometry::TetraMesh tetra_mesh = nullptr,
std::vector< size_t > *  pt_map = nullptr 
)
static

Alpha shapes are a generalization of the convex hull. With decreasing alpha value the shape schrinks and creates cavities. See Edelsbrunner and Muecke, "Three-Dimensional Alpha Shapes", 1994.

Parameters
pcdPointCloud for what the alpha shape should be computed.
alphaparameter to controll the shape. A very big value will give a shape close to the convex hull.
tetra_meshIf not a nullptr, than uses this to construct the alpha shape. Otherwise, ComputeDelaunayTetrahedralization is called.
pt_mapOptional map from tetra_mesh vertex indices to pcd points.
Returns
ccMesh of the alpha shape.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ CreateFromPointCloudBallPivoting()

static std::shared_ptr<ccMesh> ccMesh::CreateFromPointCloudBallPivoting ( const ccPointCloud pcd,
const std::vector< double > &  radii 
)
static

Function that computes a triangle mesh from a oriented PointCloud

Parameters
pcd.This implements the Ball Pivoting algorithm proposed in F. Bernardini et al., "The ball-pivoting algorithm for surface reconstruction", 1999. The implementation is also based on the algorithms outlined in Digne, "An Analysis and Implementation of a Parallel Ball Pivoting Algorithm", 2014. The surface reconstruction is done by rolling a ball with a given radius (cf.
radii)over the point cloud, whenever the ball touches three points a triangle is created.
pcddefines the PointCloud from which the ccMesh surface is reconstructed. Has to contain normals.
radiidefines the radii of the ball that are used for the surface reconstruction.

Referenced by cloudViewer::pipelines::registration::BenchmarkCreateFromPointCloudBallPivoting(), and cloudViewer::geometry::pybind_trianglemesh().

◆ CreateFromPointCloudPoisson()

static std::tuple<std::shared_ptr<ccMesh>, std::vector<double> > ccMesh::CreateFromPointCloudPoisson ( const ccPointCloud pcd,
size_t  depth = 8,
size_t  width = 0,
float  scale = 1.1f,
bool  linear_fit = false,
float  point_weight = 2.f,
float  samples_per_node = 1.5f,
int  boundary_type = 2,
int  n_threads = -1 
)
static

Function that computes a triangle mesh from a oriented PointCloud pcd. This implements the Screened Poisson Reconstruction proposed in Kazhdan and Hoppe, "Screened Poisson Surface Reconstruction", 2013. This function uses the original implementation by Kazhdan. See https://github.com/mkazhdan/PoissonRecon.

Parameters
pcdPointCloud with normals and optionally colors.
depthMaximum depth of the tree that will be used for surface reconstruction. Running at depth d corresponds to solving on a grid whose resolution is no larger than 2^d x 2^d x 2^d. Note that since the reconstructor adapts the octree to the sampling density, the specified reconstruction depth is only an upper bound.
widthSpecifies the target width of the finest level octree cells. This parameter is ignored if depth is specified.
scaleSpecifies the ratio between the diameter of the cube used for reconstruction and the diameter of the samples' bounding cube.
linear_fitIf true, the reconstructor use linear interpolation to estimate the positions of iso-vertices.
point_weightThe importance that interpolation of the point samples is given in the formulation of the screened Poisson equation. The results of the original (unscreened) Poisson Reconstruction can be obtained by setting this value to 0
samples_per_nodeThe minimum number of sample points that should fall within an octree node as the octree construction is adapted to sampling density. This parameter specifies the minimum number of points that should fall within an octree node. For noise-free samples, small values in the range [1.0 - 5.0] can be used. For more noisy samples, larger values in the range [15.0 - 20.0] may be needed to provide a smoother, noise-reduced, reconstruction.
boundary_typeBoundary type for the finite elements
n_threadsNumber of threads used for reconstruction. Set to -1 to automatically determine it.
Returns
The estimated ccMesh, and per vertex densitie values that can be used to to trim the mesh.

Referenced by doReconstruct(), and cloudViewer::geometry::pybind_trianglemesh().

◆ CreateIcosahedron()

static std::shared_ptr<ccMesh> ccMesh::CreateIcosahedron ( double  radius = 1.0,
bool  create_uv_map = false 
)
static

Factory function to create an icosahedron mesh (trianglemeshfactory.cpp). The mesh centroid will be at (0,0,0) and

Parameters
radiusdefines the distance from the center to the mesh vertices.
create_uv_mapadd default UV map to the mesh.

Referenced by cloudViewer::t::geometry::TriangleMesh::CreateIcosahedron(), and cloudViewer::geometry::pybind_trianglemesh().

◆ CreateMobius()

static std::shared_ptr<ccMesh> ccMesh::CreateMobius ( int  length_split = 70,
int  width_split = 15,
int  twists = 1,
double  radius = 1,
double  flatness = 1,
double  width = 1,
double  scale = 1 
)
static

Factory function to create a Mobius strip.

Parameters
length_splitdefines the number of segments along the Mobius strip.
width_splitdefines the number of segments along the width of the Mobius strip.
twistsdefines the number of twists of the strip.
radiusdefines the radius of the Mobius strip.
flatnesscontrols the height of the strip.
widthcontrols the width of the Mobius strip.
scaleis used to scale the entire Mobius strip.

Referenced by cloudViewer::t::geometry::TriangleMesh::CreateMobius(), and cloudViewer::geometry::pybind_trianglemesh().

◆ createNewMeshFromSelection()

ccMesh* ccMesh::createNewMeshFromSelection ( bool  removeSelectedTriangles,
std::vector< int > *  newIndexesOfRemainingTriangles = nullptr,
bool  withChildEntities = false 
)

Creates a new mesh with the selected vertices only.

This method is called after a graphical segmentation. It creates a new mesh structure with the vertices that are tagged as "visible" (see ccGenericPointCloud::visibilityArray). This method will also update this mesh if removeSelectedFaces is true. In this case, all "selected" triangles will be removed from this mesh's instance.

    \param  removeSelectedTriangles         specifies if the

faces composed only of 'selected' vertices should be removed or not. If true, the visibility array will be automatically unallocated on completion

Parameters
newIndexesOfRemainingTrianglesthe new indexes of the remaining triangles (if removeSelectedTriangles is true - optional). Must be initially empty or have the same size as the original mesh.
withChildEntitieswhether child entities should be transferred as well (see ccHObjectCaster::CloneChildren)
Returns
the new mesh (if successful) or itself if all vertices were visible/selected

Referenced by ecvFilterByLabelDlg::apply(), ccGraphicalSegmentationTool::applySegmentation(), and cloudViewer::geometry::pybind_trianglemesh().

◆ CreateOctahedron()

static std::shared_ptr<ccMesh> ccMesh::CreateOctahedron ( double  radius = 1.0,
bool  create_uv_map = false 
)
static

Factory function to create an octahedron mesh (trianglemeshfactory.cpp). the mesh centroid will be at (0,0,0) and radius defines the distance from the center to the mesh vertices.

Parameters
radiusdefines the distance from centroid to mesh vetices.
create_uv_mapadd default UV map to the mesh.

Referenced by cloudViewer::t::geometry::TriangleMesh::CreateOctahedron(), and cloudViewer::geometry::pybind_trianglemesh().

◆ CreatePlane()

static std::shared_ptr<ccMesh> ccMesh::CreatePlane ( double  width = 1.0,
double  height = 1.0,
bool  create_uv_map = false 
)
static

Factory function to create a plane mesh (TriangleMeshFactory.cpp) The left bottom corner on the front will be placed at (0, 0, 0).

Parameters
widthis x-directional length.
heightis y-directional length.
create_uv_mapadd default UV map to the shape.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ CreateSphere()

static std::shared_ptr<ccMesh> ccMesh::CreateSphere ( double  radius = 1.0,
int  resolution = 20,
bool  create_uv_map = false 
)
static

Factory function to create a sphere mesh (TriangleMeshFactory.cpp) The sphere with radius will be centered at (0, 0, 0). Its axis is aligned with z-axis.

Parameters
radiusdefines radius of the sphere.
resolutiondefines the resolution of the sphere. The longitudes will be split into resolution segments (i.e. there are resolution + 1 latitude lines including the north and south pole). The latitudes will be split into `2 * resolution segments (i.e. there are 2 * resolution longitude lines.)
create_uv_mapadd default UV map to the mesh.

Referenced by cloudViewer::t::geometry::TriangleMesh::CreateSphere(), cloudViewer::geometry::pybind_trianglemesh(), and cloudViewer::visualization::rendering::LightDirectionInteractorLogic::StartMouseDrag().

◆ CreateTetrahedron()

static std::shared_ptr<ccMesh> ccMesh::CreateTetrahedron ( double  radius = 1.0,
bool  create_uv_map = false 
)
static

Factory function to create a tetrahedron mesh (trianglemeshfactory.cpp). the mesh centroid will be at (0,0,0) and radius defines the distance from the center to the mesh vertices.

Parameters
radiusdefines the distance from centroid to mesh vetices.
create_uv_mapadd default UV map to the mesh.

Referenced by cloudViewer::t::geometry::TriangleMesh::CreateTetrahedron(), and cloudViewer::geometry::pybind_trianglemesh().

◆ CreateTorus()

static std::shared_ptr<ccMesh> ccMesh::CreateTorus ( double  torus_radius = 1.0,
double  tube_radius = 0.5,
int  radial_resolution = 30,
int  tubular_resolution = 20 
)
static

Factory function to create a torus mesh (TriangleMeshFactory.cpp) The torus will be centered at (0, 0, 0) and a radius of torus_radius. The tube of the torus will have a radius of tube_radius. The number of segments in radial and tubular direction are radial_resolution and tubular_resolution respectively.

Parameters
torus_radiusdefines the radius from the center of the torus to the center of the tube.
tube_radiusdefines the radius of the torus tube.
radial_resolutiondefines the he number of segments along the radial direction.
tubular_resolutiondefines the number of segments along the tubular direction.

Referenced by cloudViewer::t::geometry::TriangleMesh::CreateTorus(), and cloudViewer::geometry::pybind_trianglemesh().

◆ Crop() [1/2]

std::shared_ptr<ccMesh> ccMesh::Crop ( const ccBBox bbox) const

Function to crop pointcloud into output pointcloud All points with coordinates outside the bounding box

Parameters
bboxare clipped.
bboxdefines the input Axis Aligned Bounding Box.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ Crop() [2/2]

std::shared_ptr<ccMesh> ccMesh::Crop ( const ecvOrientedBBox bbox) const

Function to crop pointcloud into output pointcloud All points with coordinates outside the bounding box

Parameters
bboxare clipped.
bboxdefines the input Oriented Bounding Box.

◆ DeformAsRigidAsPossible()

std::shared_ptr<ccMesh> ccMesh::DeformAsRigidAsPossible ( const std::vector< int > &  constraint_vertex_indices,
const std::vector< Eigen::Vector3d > &  constraint_vertex_positions,
size_t  max_iter,
DeformAsRigidAsPossibleEnergy  energy = DeformAsRigidAsPossibleEnergy::Spokes,
double  smoothed_alpha = 0.01 
) const

This function deforms the mesh using the method by Sorkine and Alexa, "As-Rigid-As-Possible Surface Modeling", 2007.

Parameters
constraint_vertex_indicesIndices of the triangle vertices that should be constrained by the vertex positions in constraint_vertex_positions.
constraint_vertex_positionsVertex positions used for the constraints.
max_itermaximum number of iterations to minimize energy functional.
energyenergy model that should be optimized
smoothed_alphaalpha parameter of the smoothed ARAP model
Returns
The deformed ccMesh

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ drawMeOnly()

void ccMesh::drawMeOnly ( CC_DRAW_CONTEXT context)
overrideprotectedvirtual

Enables (OpenGL) stipple mask.

Reimplemented from ccGenericMesh.

Reimplemented in ccPlane.

◆ EulerPoincareCharacteristic()

int ccMesh::EulerPoincareCharacteristic ( ) const

Function that computes the Euler-Poincaré characteristic, i.e., V + F - E, where V is the number of vertices, F is the number of triangles, and E is the number of edges.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ FilterSharpen()

std::shared_ptr<ccMesh> ccMesh::FilterSharpen ( int  number_of_iterations,
double  strength,
FilterScope  scope = FilterScope::All 
) const

Function to sharpen triangle mesh.

The output value ($v_o$) is the input value ($v_i$) plus strength times the input value minus the sum of he adjacent values. $v_o = v_i x strength (v_i * |N| - \sum_{n \in N} v_n)$.

Parameters
number_of_iterationsdefines the number of repetitions of this operation.
strength- The strength of the filter.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ FilterSmoothLaplacian()

std::shared_ptr<ccMesh> ccMesh::FilterSmoothLaplacian ( int  number_of_iterations,
double  lambda,
FilterScope  scope = FilterScope::All 
) const

Function to smooth triangle mesh using Laplacian.

$v_o = v_i \cdot \lambda (sum_{n \in N} w_n v_n - v_i)$, with $v_i$ being the input value, $v_o$ the output value, $N$ is the set of adjacent neighbours, $w_n$ is the weighting of the neighbour based on the inverse distance (closer neighbours have higher weight),

Parameters
number_of_iterationsdefines the number of repetitions of this operation.
lambdais the smoothing parameter.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ FilterSmoothLaplacianHelper()

void ccMesh::FilterSmoothLaplacianHelper ( std::shared_ptr< ccMesh > &  mesh,
const std::vector< CCVector3 > &  prev_vertices,
const std::vector< CCVector3 > &  prev_vertex_normals,
const ColorsTableType prev_vertex_colors,
const std::vector< std::unordered_set< int >> &  adjacency_list,
double  lambda,
bool  filter_vertex,
bool  filter_normal,
bool  filter_color 
) const
protected

◆ FilterSmoothSimple()

std::shared_ptr<ccMesh> ccMesh::FilterSmoothSimple ( int  number_of_iterations,
FilterScope  scope = FilterScope::All 
) const

Function to smooth triangle mesh with simple neighbour average.

$v_o = \frac{v_i + \sum_{n \in N} v_n)}{|N| + 1}$, with $v_i$ being the input value, $v_o$ the output value, and $N$ is the set of adjacent neighbours.

Parameters
number_of_iterationsdefines the number of repetitions of this operation.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ FilterSmoothTaubin()

std::shared_ptr<ccMesh> ccMesh::FilterSmoothTaubin ( int  number_of_iterations,
double  lambda = 0.5,
double  mu = -0.53,
FilterScope  scope = FilterScope::All 
) const

Function to smooth triangle mesh using method of Taubin, "Curve and Surface Smoothing Without Shrinkage", 1995. Applies in each iteration two times FilterSmoothLaplacian, first with lambda and second with mu as smoothing parameter. This method avoids shrinkage of the triangle mesh.

Parameters
number_of_iterationsdefines the number of repetitions of this operation.
lambdais the filter parameter
muis the filter parameter

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ flipTriangles()

void ccMesh::flipTriangles ( )

Flips the triangle.

Swaps the second and third vertices indexes

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ forEach()

void ccMesh::forEach ( genericTriangleAction  action)
overridevirtual

Fast iteration mechanism.

Virtual method to apply a function to the whole mesh

Parameters
actionfunction to apply (see GenericMesh::genericTriangleAction)

Implements cloudViewer::GenericMesh.

◆ fromFile_MeOnly()

bool ccMesh::fromFile_MeOnly ( QFile &  in,
short  dataVersion,
int  flags,
LoadedIDMap oldToNewIDMap 
)
overrideprotectedvirtual

Loads own object data.

Called by 'fromFile' (recursive scheme) To be overloaded (but still called ;) by subclass.

Parameters
ininput file
dataVersionfile version
flagsdeserialization flags (see ccSerializableObject::DeserializationFlags)
oldToNewIDMapmap to link old IDs with new IDs

Reimplemented from ccGenericMesh.

Reimplemented in ccTorus, ccSphere, ccQuadric, and ccPlane.

◆ getAssociatedCloud()

◆ GetAxisAlignedBoundingBox()

virtual ccBBox ccMesh::GetAxisAlignedBoundingBox ( ) const
overridevirtual

Returns an axis-aligned bounding box of the geometry.

Reimplemented from ccHObject.

Referenced by cloudViewer::visualization::rendering::TriangleMeshBuffersBuilder::ComputeAABB().

◆ getBoundingBox()

void ccMesh::getBoundingBox ( CCVector3 bbMin,
CCVector3 bbMax 
)
overridevirtual

Returns the mesh bounding-box.

Virtual method to request the mesh bounding-box limits. It is equivalent to the bounding-box of the cloud composed of the mesh vertexes.

Parameters
bbMinlower bounding-box limits (Xmin,Ymin,Zmin)
bbMaxhigher bounding-box limits (Xmax,Ymax,Zmax)

Implements cloudViewer::GenericMesh.

◆ GetCenter()

virtual Eigen::Vector3d ccMesh::GetCenter ( ) const
overridevirtual

Returns the center of the geometry coordinates.

Reimplemented from ccHObject.

◆ getClassID()

CV_CLASS_ENUM ccMesh::getClassID ( ) const
inlineoverridevirtual

Returns class ID.

Reimplemented from ccHObject.

Reimplemented in ccTorus, ccSphere, ccQuadric, and ccPlane.

Definition at line 63 of file ecvMesh.h.

References CV_TYPES::MESH.

◆ getColorFromMaterial()

bool ccMesh::getColorFromMaterial ( unsigned  triIndex,
const CCVector3 P,
ecvColor::Rgb C,
bool  interpolateColorIfNoTexture 
)
overridevirtual

! Returns RGB color from a given triangle material/texture **

Parameters
triIndextriangle index

Implements ccGenericMesh.

◆ GetEdgeToTrianglesMap()

std::unordered_map<Eigen::Vector2i, std::vector<int>, cloudViewer::utility::hash_eigen<Eigen::Vector2i> > ccMesh::GetEdgeToTrianglesMap ( ) const

Function that returns a map from edges (vertex0, vertex1) to the triangle indices the given edge belongs to.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ GetEdgeToVerticesMap()

std::unordered_map<Eigen::Vector2i, std::vector<int>, cloudViewer::utility::hash_eigen<Eigen::Vector2i> > ccMesh::GetEdgeToVerticesMap ( ) const

Function that returns a map from edges (vertex0, vertex1) to the vertex (vertex2) indices the given edge belongs to.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ getEigenVertices()

◆ GetEigneOrderedTriangle()

static Eigen::Vector3i ccMesh::GetEigneOrderedTriangle ( int  vidx0,
int  vidx1,
int  vidx2 
)
inlinestatic

Definition at line 965 of file ecvMesh.h.

References std::swap().

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ getGLTransformationHistory()

const ccGLMatrix& ccMesh::getGLTransformationHistory ( ) const
overridevirtual

Returns the transformation 'history' matrix.

Reimplemented from ccHObject.

◆ getMaterialSet()

const ccMaterialSet* ccMesh::getMaterialSet ( ) const
inlineoverridevirtual

Implements ccGenericMesh.

Definition at line 412 of file ecvMesh.h.

Referenced by ToFbxMesh().

◆ GetMaxBound()

virtual Eigen::Vector3d ccMesh::GetMaxBound ( ) const
overridevirtual

Returns max bounds for geometry coordinates.

Reimplemented from ccHObject.

◆ GetMinBound()

virtual Eigen::Vector3d ccMesh::GetMinBound ( ) const
overridevirtual

Returns min bounds for geometry coordinates.

Reimplemented from ccHObject.

◆ getNextTriangleVertIndexes()

cloudViewer::VerticesIndexes* ccMesh::getNextTriangleVertIndexes ( )
overridevirtual

Returns the indexes of the vertices of the next triangle (relatively to the global iterator position)

Returns
the triangle indexes (or 0 if the global iterator is out of bounds)

Implements cloudViewer::GenericIndexedMesh.

◆ GetNonManifoldEdges()

std::vector<Eigen::Vector2i> ccMesh::GetNonManifoldEdges ( bool  allow_boundary_edges = true) const

Function that returns the non-manifold edges of the triangle mesh. If

Parameters
allow_boundary_edgesis set to false, than also boundary edges are returned

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ GetNonManifoldVertices()

std::vector<int> ccMesh::GetNonManifoldVertices ( ) const

Function that returns a list of non-manifold vertex indices. A vertex is manifold if its star is edge‐manifold and edge‐connected. (Two or more faces connected only by a vertex and not by an edge.)

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ GetOrderedEdge()

static Eigen::Vector2i ccMesh::GetOrderedEdge ( int  vidx0,
int  vidx1 
)
inlinestatic

Helper function to get an edge with ordered vertex indices.

Definition at line 1005 of file ecvMesh.h.

References max(), and min().

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ GetOrderedTriangle()

static cloudViewer::VerticesIndexes ccMesh::GetOrderedTriangle ( int  vidx0,
int  vidx1,
int  vidx2 
)
inlinestatic

Definition at line 92 of file ecvMesh.h.

References std::swap().

◆ GetOrientedBoundingBox()

virtual ecvOrientedBBox ccMesh::GetOrientedBoundingBox ( ) const
overridevirtual

Reimplemented from ccHObject.

◆ getOwnBB()

ccBBox ccMesh::getOwnBB ( bool  withGLFeatures = false)
overridevirtual

Returns the entity's own bounding-box.

Children bboxes are ignored.

Parameters
withGLFeatureswhether to take into account display-only elements (if any)
Returns
bounding-box

Reimplemented from ccHObject.

Referenced by ccDBRoot::alignCameraWithEntity().

◆ GetSelfIntersectingTriangles()

std::vector<Eigen::Vector2i> ccMesh::GetSelfIntersectingTriangles ( ) const

Function that returns a list of triangles that are intersecting the mesh.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ GetSurfaceArea() [1/2]

double ccMesh::GetSurfaceArea ( ) const

Function that computes the surface area of the mesh, i.e. the sum of the individual triangle surfaces.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ GetSurfaceArea() [2/2]

double ccMesh::GetSurfaceArea ( std::vector< double > &  triangle_areas) const

Function that computes the surface area of the mesh, i.e. the sum of the individual triangle surfaces.

◆ getTexCoordinates()

void ccMesh::getTexCoordinates ( unsigned  index,
TexCoords2D *&  tx 
) const
overridevirtual

Implements ccGenericMesh.

◆ getTexCoordinatesTable()

TextureCoordsContainer* ccMesh::getTexCoordinatesTable ( ) const
inlineoverridevirtual

Returns per-triangle texture coordinates array.

Implements ccGenericMesh.

Definition at line 476 of file ecvMesh.h.

Referenced by CCMeshToDraco(), and ToFbxMesh().

◆ getTriangle()

Eigen::Vector3i ccMesh::getTriangle ( size_t  index) const

◆ GetTriangleArea()

double ccMesh::GetTriangleArea ( size_t  triangle_idx) const

Function that computes the area of a mesh triangle identified by the triangle index

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ getTriangleMtlIndex()

int ccMesh::getTriangleMtlIndex ( unsigned  triangleIndex) const
overridevirtual

Returns a given triangle material indexes.

Implements ccGenericMesh.

Referenced by ccCropTool::Crop(), and ToFbxMesh().

◆ getTriangleMtlIndexesTable()

const triangleMaterialIndexesSet* ccMesh::getTriangleMtlIndexesTable ( ) const
inline

Returns the per-triangle material indexes array.

Definition at line 454 of file ecvMesh.h.

◆ getTriangleNorm()

Eigen::Vector3d ccMesh::getTriangleNorm ( size_t  index) const

◆ getTriangleNormalIndexes() [1/2]

CompressedNormType ccMesh::getTriangleNormalIndexes ( size_t  triangleIndex)

◆ getTriangleNormalIndexes() [2/2]

void ccMesh::getTriangleNormalIndexes ( unsigned  triangleIndex,
int &  i1,
int &  i2,
int &  i3 
) const
overridevirtual

Returns a triplet of normal indexes for a given triangle (if any)

Parameters
[in]triangleIndextriangle index
[out]i1first vertex normal index (or -1 if none)
[out]i2second vertex normal index (or -1 if none)
[out]i3third vertex normal index (or -1 if none)

Implements ccGenericMesh.

Referenced by cloudViewer::geometry::pybind_trianglemesh(), and ToFbxMesh().

◆ getTriangleNormals() [1/4]

std::vector<Eigen::Vector3d> ccMesh::getTriangleNormals ( ) const

◆ getTriangleNormals() [2/4]

bool ccMesh::getTriangleNormals ( unsigned  triangleIndex,
CCVector3 Na,
CCVector3 Nb,
CCVector3 Nc 
) const
overridevirtual

Returns a given triangle normal.

Mesh must have triangle normals associated (see hasTriNormals)

Implements ccGenericMesh.

◆ getTriangleNormals() [3/4]

bool ccMesh::getTriangleNormals ( unsigned  triangleIndex,
double  Na[3],
double  Nb[3],
double  Nc[3] 
) const
overridevirtual

Reimplemented from ccGenericMesh.

◆ getTriangleNormals() [4/4]

bool ccMesh::getTriangleNormals ( unsigned  triangleIndex,
Eigen::Vector3d &  Na,
Eigen::Vector3d &  Nb,
Eigen::Vector3d &  Nc 
) const
overridevirtual

Reimplemented from ccGenericMesh.

◆ getTriangleNormalsPtr()

std::vector<CCVector3*> ccMesh::getTriangleNormalsPtr ( ) const

◆ getTriangleNorms()

std::vector<Eigen::Vector3d> ccMesh::getTriangleNorms ( ) const

◆ GetTrianglePlane()

Eigen::Vector4d ccMesh::GetTrianglePlane ( size_t  triangle_idx) const

Function that computes the plane equation of a mesh triangle identified by the triangle index.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ getTriangles()

std::vector<Eigen::Vector3i> ccMesh::getTriangles ( ) const

◆ getTrianglesPtr()

triangleIndexesContainer* ccMesh::getTrianglesPtr ( ) const
inline

Definition at line 279 of file ecvMesh.h.

Referenced by cloudViewer::io::rpc::SetTriangleMesh().

◆ getTriangleTexCoordinates()

void ccMesh::getTriangleTexCoordinates ( unsigned  triIndex,
TexCoords2D *&  tx1,
TexCoords2D *&  tx2,
TexCoords2D *&  tx3 
) const
overridevirtual

Returns per-triangle texture coordinates (pointer to)

Implements ccGenericMesh.

◆ getTriangleTexCoordinatesIndexes()

void ccMesh::getTriangleTexCoordinatesIndexes ( unsigned  triangleIndex,
int &  i1,
int &  i2,
int &  i3 
) const
overridevirtual

Returns the triplet of tex coords indexes for a given triangle.

Parameters
triangleIndextriangle index
i1first vertex tex coords index
i2second vertex tex coords index
i3third vertex tex coords index

Implements ccGenericMesh.

Referenced by ToFbxMesh().

◆ getTriangleVertices() [1/2]

virtual void ccMesh::getTriangleVertices ( unsigned  triangleIndex,
CCVector3 A,
CCVector3 B,
CCVector3 C 
) const
overridevirtual

Returns the vertices of a given triangle.

Parameters
[in]triangleIndexindex of the triangle (between 0 and the size(mesh)-1)
[out]Afirst vertex
[out]Bsecond vertex
[out]Cthird vertex

Implements cloudViewer::GenericIndexedMesh.

◆ getTriangleVertices() [2/2]

virtual void ccMesh::getTriangleVertices ( unsigned  triangleIndex,
double  A[3],
double  B[3],
double  C[3] 
) const
overridevirtual

◆ getTriangleVertIndexes() [1/3]

void ccMesh::getTriangleVertIndexes ( size_t  triangleIndex,
Eigen::Vector3i &  vertIndx 
) const

◆ getTriangleVertIndexes() [2/3]

virtual const cloudViewer::VerticesIndexes* ccMesh::getTriangleVertIndexes ( unsigned  triangleIndex) const
virtual

◆ getTriangleVertIndexes() [3/3]

cloudViewer::VerticesIndexes* ccMesh::getTriangleVertIndexes ( unsigned  triangleIndex)
overridevirtual

Returns the indexes of the vertices of a given triangle.

Parameters
triangleIndexindex of the triangle (between 0 and size(mesh)-1)
Returns
the triangle indexes (or 0 if index value is not valid)

Implements cloudViewer::GenericIndexedMesh.

Referenced by CCMeshToDraco(), ccCropTool::Crop(), cloudViewer::t::geometry::TriangleMesh::FromLegacy(), and CSVMatrixFilter::loadFile().

◆ getTriNormsTable()

NormsIndexesTableType* ccMesh::getTriNormsTable ( ) const
inlineoverridevirtual

Returns per-triangle normals shared array.

Implements ccGenericMesh.

Definition at line 344 of file ecvMesh.h.

Referenced by main(), and ToFbxMesh().

◆ getUniqueIDForDisplay()

unsigned ccMesh::getUniqueIDForDisplay ( ) const
overridevirtual

Returns object unqiue ID used for display.

Reimplemented from ccHObject.

◆ getVertexColor()

Eigen::Vector3d ccMesh::getVertexColor ( size_t  index) const

◆ getVertexColorFromMaterial()

bool ccMesh::getVertexColorFromMaterial ( unsigned  triIndex,
unsigned char  vertIndex,
ecvColor::Rgb C,
bool  returnColorIfNoTexture 
)
overridevirtual

! Returns RGB color of a vertex from a given triangle material/texture **

Parameters
triIndextriangle index

Implements ccGenericMesh.

◆ getVertexColors()

std::vector<Eigen::Vector3d> ccMesh::getVertexColors ( ) const

◆ getVertexColorsPtr()

ColorsTableType* ccMesh::getVertexColorsPtr ( )

◆ getVertexNormal()

Eigen::Vector3d ccMesh::getVertexNormal ( size_t  index) const

◆ getVertexNormals()

std::vector<Eigen::Vector3d> ccMesh::getVertexNormals ( ) const

◆ getVertice()

◆ getVertices()

const std::vector<CCVector3>& ccMesh::getVertices ( ) const

◆ getVerticeSize()

◆ getVerticesPtr()

std::vector<CCVector3>& ccMesh::getVerticesPtr ( )

◆ GetVolume()

double ccMesh::GetVolume ( ) const

Function that computes the volume of the mesh, under the condition that it is watertight and orientable. See Zhang and Chen, "Efficient feature extraction for 2D/3D objects in mesh representation", 2001.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ hasAdjacencyList()

bool ccMesh::hasAdjacencyList ( ) const
inline

Returns true if the mesh contains adjacency normals.

Definition at line 712 of file ecvMesh.h.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ hasColors()

bool ccMesh::hasColors ( ) const
overridevirtual

◆ hasDisplayedScalarField()

bool ccMesh::hasDisplayedScalarField ( ) const
overridevirtual

Returns whether an active scalar field is available or not.

Reimplemented from ccDrawableObject.

◆ hasEigenTextures()

bool ccMesh::hasEigenTextures ( ) const
inline

Returns true if the mesh has texture.

Definition at line 726 of file ecvMesh.h.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ hasMaterials()

bool ccMesh::hasMaterials ( ) const
overridevirtual

◆ hasNormals()

◆ hasPerTriangleMtlIndexes()

bool ccMesh::hasPerTriangleMtlIndexes ( ) const
inline

Returns whether this mesh as per-triangle material index.

Definition at line 421 of file ecvMesh.h.

Referenced by FromFbxMesh(), and cloudViewer::geometry::pybind_trianglemesh().

◆ hasPerTriangleTexCoordIndexes()

bool ccMesh::hasPerTriangleTexCoordIndexes ( ) const
inlineoverridevirtual

Returns whether this mesh as per-triangle triplets of tex coords indexes.

Implements ccGenericMesh.

Definition at line 484 of file ecvMesh.h.

Referenced by ToFbxMesh().

◆ hasScalarFields()

bool ccMesh::hasScalarFields ( ) const
overridevirtual

Returns whether one or more scalar fields are instantiated.

WARNING: doesn't mean a scalar field is currently displayed (see ccDrawableObject::hasDisplayedScalarField).

Reimplemented from ccDrawableObject.

◆ hasTextures()

bool ccMesh::hasTextures ( ) const
overridevirtual

Returns whether textures are available for this mesh.

Implements ccGenericMesh.

Referenced by cloudViewer::io::rpc::SetTriangleMesh(), and ToFbxMesh().

◆ hasTriangleMaterialIds()

bool ccMesh::hasTriangleMaterialIds ( ) const
inline

◆ HasTriangleNormals()

bool ccMesh::HasTriangleNormals ( ) const
inline

Definition at line 314 of file ecvMesh.h.

References ccGenericMesh::hasTriNormals().

◆ hasTriangleUvs()

◆ hasTriNormals()

bool ccMesh::hasTriNormals ( ) const
overridevirtual

◆ HasVertexNormals()

bool ccMesh::HasVertexNormals ( ) const

◆ HasVertices()

bool ccMesh::HasVertices ( ) const
inline

◆ interpolateColors() [1/2]

bool ccMesh::interpolateColors ( const cloudViewer::VerticesIndexes vertIndexes,
const CCVector3 P,
ecvColor::Rgb C 
)
protected

Same as other 'interpolateColors' method with a set of 3 vertices indexes

◆ interpolateColors() [2/2]

bool ccMesh::interpolateColors ( unsigned  triIndex,
const CCVector3 P,
ecvColor::Rgb C 
)
overridevirtual

Interpolates RGB colors inside a given triangle.

Parameters
triIndextriangle index
Ppoint where to interpolate (should be inside the triangle!)
[out]Cinterpolated color
Returns
success

Implements ccGenericMesh.

◆ interpolateNormals() [1/2]

bool ccMesh::interpolateNormals ( const cloudViewer::VerticesIndexes vertIndexes,
const CCVector3d w,
CCVector3 N,
const Tuple3i triNormIndexes = nullptr 
)
protected

Same as other 'interpolateNormals' method with a set of 3 vertices indexes

◆ interpolateNormals() [2/2]

bool ccMesh::interpolateNormals ( unsigned  triIndex,
const CCVector3 P,
CCVector3 N 
)
overridevirtual

Interpolates normal(s) inside a given triangle.

This method should be ideally overriden by the child class if normals are supported

Parameters
[in]triIndextriangle index
[in]Ppoint where to interpolate (should be inside the triangle!)
[out]Ninterpolated normal
Returns
success

Reimplemented from cloudViewer::GenericIndexedMesh.

◆ interpolateNormalsBC()

bool ccMesh::interpolateNormalsBC ( unsigned  triIndex,
const CCVector3d w,
CCVector3 N 
)
overridevirtual

Interpolates normal(s) inside a given triangle.

Parameters
triIndextriangle index
wbarycentric coordinates
[out]Ninterpolated normal
Returns
success

Implements ccGenericMesh.

◆ invertNormals()

void ccMesh::invertNormals ( )

Inverts normals (if any)

Either the per-triangle normals, or the per-vertex ones

Referenced by ccEntityAction::invertNormals(), and CommandInvertNormal::process().

◆ invertPerTriangleNormals()

void ccMesh::invertPerTriangleNormals ( )

Invert per-triangle normals.

◆ IsBoundingBoxIntersecting()

bool ccMesh::IsBoundingBoxIntersecting ( const ccMesh other) const

Function that tests if the bounding boxes of the triangle meshes are intersecting.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ IsEdgeManifold()

bool ccMesh::IsEdgeManifold ( bool  allow_boundary_edges = true) const

Function that checks if the given triangle mesh is edge-manifold. A mesh is edge­-manifold if each edge is bounding either one or two triangles. If allow_boundary_edges is set to false, then this function returns false if there exists boundary edges.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ IsEmpty()

virtual bool ccMesh::IsEmpty ( ) const
inlineoverridevirtual

Reimplemented from ccHObject.

Definition at line 735 of file ecvMesh.h.

References cloudViewer::GenericMesh::hasTriangles().

Referenced by doReconstruct(), and main().

◆ IsIntersecting()

bool ccMesh::IsIntersecting ( const ccMesh other) const

Function that tests if the triangle mesh intersects another triangle mesh. Tests each triangle against each other triangle.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ IsOrientable()

bool ccMesh::IsOrientable ( ) const

Function that tests if the given triangle mesh is orientable, i.e. the triangles can oriented in such a way that all normals point towards the outside.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ IsSelfIntersecting()

bool ccMesh::IsSelfIntersecting ( ) const

Function that tests if the triangle mesh is self-intersecting. Tests each triangle pair for intersection.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ isSerializable()

bool ccMesh::isSerializable ( ) const
inlineoverridevirtual

Returns whether object is serializable of not.

Reimplemented from ccGenericMesh.

Definition at line 139 of file ecvMesh.h.

◆ IsVertexManifold()

bool ccMesh::IsVertexManifold ( ) const

Function that checks if all vertices in the triangle mesh are manifold. A vertex is manifold if its star is edge‐manifold and edge‐connected. (Two or more faces connected only by a vertex and not by an edge.)

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ IsWatertight()

bool ccMesh::IsWatertight ( ) const

Function that tests if the given triangle mesh is watertight by checking if it is vertex manifold and edge-manifold with no boundary edges, but not self-intersecting.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ laplacianSmooth()

bool ccMesh::laplacianSmooth ( unsigned  nbIteration = 100,
PointCoordinateType  factor = static_cast< PointCoordinateType >(0.01),
ecvProgressDialog progressCb = nullptr 
)

Laplacian smoothing.

Parameters
nbIterationsmoothing iterations
factorsmoothing 'force'
progressCbprogress dialog callback

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ merge()

bool ccMesh::merge ( const ccMesh mesh,
bool  createSubMesh 
)

Merges another mesh into this one.

Parameters
meshmesh to be merged in this one
createSubMeshwhether to create a submesh entity corresponding to the added mesh
Returns
success

Referenced by qVoxFallProcess::Compute(), and cloudViewer::geometry::pybind_trianglemesh().

◆ MergeCloseVertices()

ccMesh& ccMesh::MergeCloseVertices ( double  eps)

Function that will merge close by vertices to a single one. The vertex position, normal and color will be the average of the vertices.

Parameters
epsdefines the maximum distance of close by vertices. This function might help to close triangle soups.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ mergeDuplicatedVertices()

bool ccMesh::mergeDuplicatedVertices ( unsigned char  octreeLevel = DefaultMergeDulicateVerticesLevel,
QWidget *  parentWidget = nullptr 
)

Merges duplicated vertices.

Referenced by STEPFilter::importStepFile().

◆ minimumFileVersion_MeOnly()

short ccMesh::minimumFileVersion_MeOnly ( ) const
overrideprotectedvirtual

Returns the minimum file version required to save this instance's own data To be overloaded (but still called ;) by subclass. Used internally by minimumFileVersion() to compute the overall minimum.

Reimplemented from ccGenericMesh.

Reimplemented in ccTorus, ccSphere, ccQuadric, and ccPlane.

◆ NormalizeNormals()

ccMesh& ccMesh::NormalizeNormals ( )

Normalize both triangle normals and vertex normals to length 1. Normalize point normals to length 1.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ normalsAvailable()

bool ccMesh::normalsAvailable ( ) const
inlineoverridevirtual

Returns whether normals are available.

Reimplemented from ccGenericMesh.

Definition at line 215 of file ecvMesh.h.

References ccDrawableObject::hasNormals().

◆ normalsShown()

bool ccMesh::normalsShown ( ) const
overridevirtual

Returns whether normals are shown or not.

Reimplemented from ccDrawableObject.

Referenced by qCork::doAction().

◆ onDeletionOf()

void ccMesh::onDeletionOf ( const ccHObject obj)
overrideprotectedvirtual

This method is called when another object is deleted.

For internal use.

Reimplemented from ccHObject.

◆ onUpdateOf()

void ccMesh::onUpdateOf ( ccHObject obj)
overrideprotectedvirtual

This method is called when another object (geometry) is updated.

For internal use.

Reimplemented from ccHObject.

◆ operator+()

ccMesh ccMesh::operator+ ( const ccMesh mesh) const

◆ operator+=()

ccMesh& ccMesh::operator+= ( const ccMesh mesh)

◆ operator=()

ccMesh& ccMesh::operator= ( const ccMesh mesh)

◆ OrientTriangles()

bool ccMesh::OrientTriangles ( )

If the mesh is orientable then this function rearranges the triangles such that all normals point towards the outside/inside.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ PaintUniformColor()

ccMesh& ccMesh::PaintUniformColor ( const Eigen::Vector3d &  color)

Assigns each vertex in the ccMesh the same color.

Parameters
colorRGB colors of vertices.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ partialClone()

ccMesh* ccMesh::partialClone ( const std::vector< unsigned > &  triangleIndices,
int *  warnings = nullptr 
) const

Creates a new mesh from a selection of triangles (partial clone)

Similar to ccPointCloud::partialClone but for meshes.

Parameters
triangleIndicesIndices of triangles to include in the partial clone
warnings[optional] to store warnings
Returns
a partial clone of this mesh (or nullptr if an error occurred)

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ placeIteratorAtBeginning()

void ccMesh::placeIteratorAtBeginning ( )
overridevirtual

Places the mesh iterator at the beginning.

Virtual method to handle the mesh global iterator

Implements cloudViewer::GenericMesh.

Referenced by qVoxFallProcess::Compute().

◆ processScalarField()

bool ccMesh::processScalarField ( MESH_SCALAR_FIELD_PROCESS  process)

Applies process to the mesh scalar field (the one associated to its vertices in fact) A very simple smoothing/enhancement algorithm based on each vertex direct neighbours. Prior to calling this method, one should check first that the vertices are associated to a scalar field. Warning: the processed scalar field must be enabled for both INPUT & OUTPUT! (see ccGenericCloud::setCurrentScalarField)

Parameters
processeither 'smooth' or 'enhance'

Referenced by ccEntityAction::processMeshSF(), and cloudViewer::geometry::pybind_trianglemesh().

◆ pushSubdivide()

bool ccMesh::pushSubdivide ( unsigned  indexA,
unsigned  indexB,
unsigned  indexC 
)
protected

Used internally by 'subdivide'.

◆ refreshBB()

void ccMesh::refreshBB ( )
overridevirtual

Forces bounding-box update.

Implements ccGenericMesh.

◆ RemoveDegenerateTriangles()

ccMesh& ccMesh::RemoveDegenerateTriangles ( )

Function that removes degenerate triangles, i.e., triangles that reference a single vertex multiple times in a single triangle.

They are usually the product of removing duplicated vertices.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ RemoveDuplicatedTriangles()

ccMesh& ccMesh::RemoveDuplicatedTriangles ( )

Function that removes duplicated triangles, i.e., removes triangles that reference the same three vertices, independent of their order.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ RemoveDuplicatedVertices()

ccMesh& ccMesh::RemoveDuplicatedVertices ( )

Function that removes duplicated verties, i.e., vertices that have identical coordinates.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ RemoveNonManifoldEdges()

ccMesh& ccMesh::RemoveNonManifoldEdges ( )

Function that removes all non-manifold edges, by successively deleting triangles with the smallest surface area adjacent to the non-manifold edge until the number of adjacent triangles to the edge is <= 2.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ removePerTriangleMtlIndexes()

void ccMesh::removePerTriangleMtlIndexes ( )

Removes any per-triangle material indexes.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ removePerTriangleNormalIndexes()

void ccMesh::removePerTriangleNormalIndexes ( )

Removes any per-triangle triplets of normal indexes.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ removePerTriangleTexCoordIndexes()

void ccMesh::removePerTriangleTexCoordIndexes ( )

◆ removeTriangles()

void ccMesh::removeTriangles ( size_t  index)

◆ RemoveTrianglesByIndex()

void ccMesh::RemoveTrianglesByIndex ( const std::vector< size_t > &  triangle_indices)

This function removes the triangles with index in triangle_indices. Call RemoveUnreferencedVertices to clean up vertices afterwards.

Parameters
triangle_indicesIndices of the triangles that should be removed.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ RemoveTrianglesByMask()

void ccMesh::RemoveTrianglesByMask ( const std::vector< bool > &  triangle_mask)

This function removes the triangles that are masked in triangle_mask. Call RemoveUnreferencedVertices to clean up vertices afterwards.

Parameters
triangle_maskMask of triangles that should be removed. Should have same size as triangles_.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ RemoveUnreferencedVertices()

ccMesh& ccMesh::RemoveUnreferencedVertices ( )

This function removes vertices from the triangle mesh that are not referenced in any triangle of the mesh.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ RemoveVerticesByIndex()

void ccMesh::RemoveVerticesByIndex ( const std::vector< size_t > &  vertex_indices)

This function removes the vertices with index in vertex_indices. Note that also all triangles associated with the vertices are removeds.

Parameters
triangle_indicesIndices of the triangles that should be removed.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ RemoveVerticesByMask()

void ccMesh::RemoveVerticesByMask ( const std::vector< bool > &  vertex_mask)

This function removes the vertices that are masked in vertex_mask. Note that also all triangles associated with the vertices are removed..

Parameters
vertex_maskMask of vertices that should be removed. Should have same size as vertices_.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ reserve()

bool ccMesh::reserve ( std::size_t  n)

Reserves the memory to store the vertex indexes (3 per triangle)

Parameters
nthe number of triangles to reserve
Returns
true if the method succeeds, false otherwise

Referenced by MeshWrapper< Real >::checkMeshCapacity(), DistanceMapGenerationTool::ConvertConicalMapToMesh(), DistanceMapGenerationTool::ConvertProfileToMesh(), FromFbxMesh(), STEPFilter::importStepFile(), CSVMatrixFilter::loadFile(), DRCFilter::loadFile(), cloudViewer::geometry::pybind_trianglemesh(), and Cloth::toMesh().

◆ reserveAssociatedCloud()

bool ccMesh::reserveAssociatedCloud ( std::size_t  n,
bool  init_color = false,
bool  init_normal = false 
)

◆ reservePerTriangleMtlIndexes()

bool ccMesh::reservePerTriangleMtlIndexes ( )

Reserves memory to store per-triangle material index.

Before adding per-triangle material index to the mesh (with ccMesh::addTriangleMtlIndex()) be sure to reserve the necessary amount of memory with this method. This method reserves memory for as many material descriptors as the number of triangles in the mesh (effictively stored or reserved - a call to ccMesh::reserve prior to this one is mandatory).

Returns
true if ok, false if there's not enough memory

Referenced by DistanceMapGenerationTool::ConvertConicalMapToMesh(), DistanceMapGenerationTool::ConvertProfileToMesh(), ccCropTool::Crop(), FromFbxMesh(), CSVMatrixFilter::loadFile(), and cloudViewer::geometry::pybind_trianglemesh().

◆ reservePerTriangleNormalIndexes()

bool ccMesh::reservePerTriangleNormalIndexes ( )

Reserves memory to store per-triangle triplets of normal indexes.

Before adding per-triangle normal indexes triplets to the mesh (with ccMesh::addTriangleNormalsIndexes()) be sure to reserve the necessary amount of memory with this method. This method reserves memory for as many normals indexes triplets as the number of triangles in the mesh (effictively stored or reserved - a call to ccMesh::reserve prior to this one is mandatory).

Returns
true if ok, false if there's not enough memory

Referenced by FromFbxMesh(), and cloudViewer::geometry::pybind_trianglemesh().

◆ reservePerTriangleTexCoordIndexes()

bool ccMesh::reservePerTriangleTexCoordIndexes ( )

Reserves memory to store per-triangle triplets of tex coords indexes.

Before adding per-triangle tex coords indexes triplets to the mesh (with ccMesh::addTriangleTexCoordIndexes()) be sure to reserve the necessary amount of memory with this method. This method reserves memory for as many tex coords indexes triplets as the number of triangles in the mesh (effictively stored or reserved - a call to ccMesh::reserve prior to this one is mandatory).

Returns
true if ok, false if there's not enough memory

Referenced by DistanceMapGenerationTool::ConvertConicalMapToMesh(), DistanceMapGenerationTool::ConvertProfileToMesh(), FromFbxMesh(), CSVMatrixFilter::loadFile(), and cloudViewer::geometry::pybind_trianglemesh().

◆ resize()

bool ccMesh::resize ( size_t  n)

Resizes the array of vertex indexes (3 per triangle)

If the new number of elements is smaller than the actual size, the overflooding elements will be deleted.

Parameters
nthe new number of triangles
Returns
true if the method succeeds, false otherwise

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ resizeAssociatedCloud()

bool ccMesh::resizeAssociatedCloud ( std::size_t  n)

◆ Rotate()

virtual ccMesh& ccMesh::Rotate ( const Eigen::Matrix3d &  R,
const Eigen::Vector3d &  center 
)
overridevirtual

Apply rotation to the geometry coordinates and normals. Given a rotation matrix $R$, and center $c$, a given point $p$ is transformed according to $R (p - c) + c$.

Parameters
RA 3x3 rotation matrix
centerRotation center that is used for the rotation.

Reimplemented from ccHObject.

◆ SamplePointsPoissonDisk()

std::shared_ptr<ccPointCloud> ccMesh::SamplePointsPoissonDisk ( size_t  number_of_points,
double  init_factor = 5,
const std::shared_ptr< ccPointCloud pcl_init = nullptr,
bool  use_triangle_normal = false,
int  seed = -1 
)

Function to sample number_of_points points (blue noise). Based on the method presented in Yuksel, "Sample Elimination for Generating Poisson Disk Sample Sets", EUROGRAPHICS, 2015 The PointCloud pcl_init is used for sample elimination if given, otherwise a PointCloud is first uniformly sampled with init_number_of_points x number_of_points number of points. use_triangle_normal Set to true to assign the triangle normals to the returned points instead of the interpolated vertex normals. The triangle normals will be computed and added to the mesh if necessary. seed Sets the seed value used in the random generator, set to -1 to use a random seed value with each function call.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ SamplePointsUniformly()

std::shared_ptr<ccPointCloud> ccMesh::SamplePointsUniformly ( size_t  number_of_points,
bool  use_triangle_normal = false,
int  seed = -1 
)

Function to sample

Parameters
number_of_pointspoints uniformly from the mesh.
use_triangle_normalSet to true to assign the triangle normals to the returned points instead of the interpolated vertex normals. The triangle normals will be computed and added to the mesh if necessary.
seedSets the seed value used in the random generator, set to -1 to use a random seed value with each function call.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ SamplePointsUniformlyImpl()

std::shared_ptr<ccPointCloud> ccMesh::SamplePointsUniformlyImpl ( size_t  number_of_points,
std::vector< double > &  triangle_areas,
double  surface_area,
bool  use_triangle_normal,
int  seed 
)

Function to sample

Parameters
number_of_pointspoints uniformly from the mesh.

◆ Scale()

virtual ccMesh& ccMesh::Scale ( const double  s,
const Eigen::Vector3d &  center 
)
overridevirtual

Apply scaling to the geometry coordinates. Given a scaling factor $s$, and center $c$, a given point $p$ is transformed according to $s (p - c) + c$.

Parameters
scaleThe scale parameter that is multiplied to the points/vertices of the geometry.
centerScale center that is used to resize the geometry.

Reimplemented from ccHObject.

◆ SelectByIndex()

std::shared_ptr<ccMesh> ccMesh::SelectByIndex ( const std::vector< size_t > &  indices,
bool  cleanup = true 
) const

Function to select points from input ccMesh into output ccMesh Vertices with indices in indices are selected.

Parameters
indicesdefines Indices of vertices to be selected.
cleanupIf true it automatically calls ccMesh::RemoveDuplicatedVertices, ccMesh::RemoveDuplicatedTriangles, ccMesh::RemoveUnreferencedVertices, and ccMesh::RemoveDegenerateTriangles

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ setAssociatedCloud()

void ccMesh::setAssociatedCloud ( ccGenericPointCloud cloud)

Sets the associated vertices cloud (warning)

Referenced by define_ccMesh(), and cloudViewer::geometry::pybind_trianglemesh().

◆ setEigenVertices()

void ccMesh::setEigenVertices ( const std::vector< Eigen::Vector3d > &  vertices)

◆ setMaterialSet()

void ccMesh::setMaterialSet ( ccMaterialSet materialSet,
bool  autoReleaseOldMaterialSet = true 
)

◆ setTexCoordinatesTable()

void ccMesh::setTexCoordinatesTable ( TextureCoordsContainer texCoordsTable,
bool  autoReleaseOldTable = true 
)

◆ setTriangle()

void ccMesh::setTriangle ( size_t  index,
const Eigen::Vector3i &  triangle 
)

◆ setTriangleMtlIndex()

void ccMesh::setTriangleMtlIndex ( unsigned  triangleIndex,
int  mtlIndex 
)

Sets triangle material indexes.

Cf. ccMesh::reservePerTriangleMtlIndexes.

Parameters
triangleIndextriangle index
mtlIndextriangle material index

Referenced by ccCropTool::Crop(), and cloudViewer::geometry::pybind_trianglemesh().

◆ setTriangleMtlIndexesTable()

void ccMesh::setTriangleMtlIndexesTable ( triangleMaterialIndexesSet matIndexesTable,
bool  autoReleaseOldTable = true 
)

Sets per-triangle material indexes array.

◆ setTriangleNorm()

bool ccMesh::setTriangleNorm ( size_t  index,
const Eigen::Vector3d &  triangle_normal 
)

◆ setTriangleNormalIndexes() [1/2]

bool ccMesh::setTriangleNormalIndexes ( size_t  triangleIndex,
CompressedNormType  value 
)

◆ setTriangleNormalIndexes() [2/2]

void ccMesh::setTriangleNormalIndexes ( unsigned  triangleIndex,
int  i1,
int  i2,
int  i3 
)

Sets a triplet of normal indexes for a given triangle.

Parameters
triangleIndextriangle index
i1first vertex normal index
i2second vertex normal index
i3third vertex normal index

◆ setTriangleNorms()

bool ccMesh::setTriangleNorms ( const std::vector< Eigen::Vector3d > &  triangle_normals)

◆ setTriangles()

void ccMesh::setTriangles ( const std::vector< Eigen::Vector3i > &  triangles)

◆ setTriangleTexCoordIndexes()

void ccMesh::setTriangleTexCoordIndexes ( unsigned  triangleIndex,
int  i1,
int  i2,
int  i3 
)

Sets a triplet of tex coords indexes for a given triangle.

Parameters
triangleIndextriangle index
i1first vertex tex coords index
i2second vertex tex coords index
i3third vertex tex coords index

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ setTriNormsTable()

void ccMesh::setTriNormsTable ( NormsIndexesTableType triNormsTable,
bool  autoReleaseOldTable = true 
)

Sets per-triangle normals array (may be shared)

Referenced by FromFbxMesh().

◆ setVertexColor()

void ccMesh::setVertexColor ( size_t  index,
const Eigen::Vector3d &  color 
)

◆ setVertexColors()

void ccMesh::setVertexColors ( const std::vector< Eigen::Vector3d > &  colors)

◆ setVertexNormal()

void ccMesh::setVertexNormal ( size_t  index,
const Eigen::Vector3d &  normal 
)

◆ setVertexNormals()

void ccMesh::setVertexNormals ( const std::vector< Eigen::Vector3d > &  normals)

◆ setVertice()

void ccMesh::setVertice ( size_t  index,
const Eigen::Vector3d &  vertice 
)

◆ shiftTriangleIndexes()

void ccMesh::shiftTriangleIndexes ( unsigned  shift)

Shifts all triangles indexes.

Parameters
shiftindex shift (positive)

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ showNormals_extended()

virtual void ccMesh::showNormals_extended ( bool  p)
inlineprotectedvirtual

Definition at line 1487 of file ecvMesh.h.

◆ shrinkToFit()

void ccMesh::shrinkToFit ( )
inline

◆ shrinkVertexToFit()

void ccMesh::shrinkVertexToFit ( )

◆ SimplifyQuadricDecimation()

std::shared_ptr<ccMesh> ccMesh::SimplifyQuadricDecimation ( int  target_number_of_triangles,
double  maximum_error = std::numeric_limits< double >::infinity(),
double  boundary_weight = 1.0 
) const

Function to simplify mesh using Quadric Error Metric Decimation by Garland and Heckbert.

Parameters
target_number_of_trianglesdefines the number of triangles that the simplified mesh should have. It is not guaranteed that this number will be reached.
maximum_errordefines the maximum error where a vertex is allowed to be merged
boundary_weighta weight applied to edge vertices used to preserve boundaries

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ SimplifyVertexClustering()

std::shared_ptr<ccMesh> ccMesh::SimplifyVertexClustering ( double  voxel_size,
SimplificationContraction  contraction = SimplificationContraction::Average 
) const

Function to simplify mesh using Vertex Clustering. The result can be a non-manifold mesh.

Parameters
voxel_size- The size of the voxel within vertices are pooled.
contraction- Method to aggregate vertex information. Average computes a simple average, Quadric minimizes the distance to the adjacent planes.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ size()

◆ subdivide()

ccMesh* ccMesh::subdivide ( PointCoordinateType  maxArea) const

Subdivides mesh (so as to ensure that all triangles are falls below 'maxArea')

Returns
subdivided mesh (if successful)

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ SubdivideLoop()

std::shared_ptr<ccMesh> ccMesh::SubdivideLoop ( int  number_of_iterations) const

Function to subdivide triangle mesh using Loop's scheme. Cf. Charles T. Loop, "Smooth subdivision surfaces based on triangles",

  1. Each triangle is subdivided into four triangles per iteration.
    Parameters
    number_of_iterationsdefines a single iteration splits each triangle into four triangles that cover the same surface.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ SubdivideMidpoint()

std::shared_ptr<ccMesh> ccMesh::SubdivideMidpoint ( int  number_of_iterations) const

Function to subdivide triangle mesh using the simple midpoint algorithm. Each triangle is subdivided into four triangles per iteration and the new vertices lie on the midpoint of the triangle edges.

Parameters
number_of_iterationsdefines a single iteration splits each triangle into four triangles that cover the same surface.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ swapTriangles()

void ccMesh::swapTriangles ( unsigned  index1,
unsigned  index2 
)

Swaps two triangles.

Automatically updates internal structures (i.e. lookup tables for material, normals, etc.).

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ toFile_MeOnly()

bool ccMesh::toFile_MeOnly ( QFile &  out,
short  dataVersion 
) const
overrideprotectedvirtual

Save own object data.

Called by 'toFile' (recursive scheme) To be overloaded (but still called ;) by subclass.

Parameters
outoutput file
dataVersiontarget file version for compatibility control

Reimplemented from ccGenericMesh.

Reimplemented in ccTorus, ccSphere, ccQuadric, and ccPlane.

◆ toggleMaterials()

void ccMesh::toggleMaterials ( )
inlineoverridevirtual

Toggles material display state.

Reimplemented from ccDrawableObject.

Definition at line 233 of file ecvMesh.h.

References ccGenericMesh::materialsShown(), and ccGenericMesh::showMaterials().

◆ Transform()

virtual ccMesh& ccMesh::Transform ( const Eigen::Matrix4d &  transformation)
overridevirtual

Apply transformation (4x4 matrix) to the geometry coordinates.

Reimplemented from ccHObject.

Referenced by cloudViewer::io::ReadTriangleMeshFromGLTF().

◆ transformTriNormals()

void ccMesh::transformTriNormals ( const ccGLMatrix trans)

Transforms the mesh per-triangle normals.

Referenced by ccGraphicalTransformationTool::apply(), and cloudViewer::geometry::pybind_trianglemesh().

◆ Translate()

virtual ccMesh& ccMesh::Translate ( const Eigen::Vector3d &  translation,
bool  relative = true 
)
overridevirtual

Apply translation to the geometry coordinates.

Parameters
translationA 3D vector to transform the geometry.
relativeIf true, the translation is directly applied to the geometry. Otherwise, the geometry center is moved to the translation.

Reimplemented from ccHObject.

Referenced by cloudViewer::io::ReadTriangleMeshFromGLTF().

◆ Triangulate()

static ccMesh* ccMesh::Triangulate ( ccGenericPointCloud cloud,
cloudViewer::TRIANGULATION_TYPES  type,
bool  updateNormals = false,
PointCoordinateType  maxEdgeLength = 0,
unsigned char  dim = 2 
)
static

◆ TriangulateTwoPolylines()

static ccMesh* ccMesh::TriangulateTwoPolylines ( ccPolyline p1,
ccPolyline p2,
CCVector3 projectionDir = nullptr 
)
static

Creates a Delaunay 2.5D mesh from two polylines.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

Member Data Documentation

◆ adjacency_list_

std::vector<std::unordered_set<int> > ccMesh::adjacency_list_

The set adjacency_list[i] contains the indices of adjacent vertices of vertex i.

Definition at line 622 of file ecvMesh.h.

Referenced by cloudViewer::geometry::pybind_trianglemesh().

◆ DefaultMergeDulicateVerticesLevel

const unsigned char ccMesh::DefaultMergeDulicateVerticesLevel = 10
static

Default octree level for the 'mergeDuplicatedVertices' algorithm.

Definition at line 612 of file ecvMesh.h.

Referenced by STEPFilter::importStepFile().

◆ m_associatedCloud

ccGenericPointCloud* ccMesh::m_associatedCloud
protected

associated cloud (vertices)

Definition at line 1490 of file ecvMesh.h.

◆ m_bBox

ccBBox ccMesh::m_bBox
protected

Bounding-box.

Definition at line 1510 of file ecvMesh.h.

◆ m_currentTriangle

cloudViewer::SimpleRefTriangle ccMesh::m_currentTriangle
protected

Dump triangle structure to transmit temporary data.

Definition at line 1507 of file ecvMesh.h.

◆ m_globalIterator

unsigned ccMesh::m_globalIterator
protected

Iterator on the list of triangles.

Definition at line 1505 of file ecvMesh.h.

◆ m_materials

ccMaterialSet* ccMesh::m_materials
protected

Materials.

Definition at line 1499 of file ecvMesh.h.

◆ m_texCoordIndexes

triangleTexCoordIndexesSet* ccMesh::m_texCoordIndexes
protected

Mesh tex coords indexes (per-triangle)

Definition at line 1518 of file ecvMesh.h.

◆ m_texCoords

TextureCoordsContainer* ccMesh::m_texCoords
protected

Texture coordinates.

Definition at line 1496 of file ecvMesh.h.

◆ m_triMtlIndexes

triangleMaterialIndexesSet* ccMesh::m_triMtlIndexes
protected

Per-triangle material indexes.

Definition at line 1513 of file ecvMesh.h.

◆ m_triNormalIndexes

triangleNormalsIndexesSet* ccMesh::m_triNormalIndexes
protected

Mesh normals indexes (per-triangle)

Definition at line 1523 of file ecvMesh.h.

◆ m_triNormals

NormsIndexesTableType* ccMesh::m_triNormals
protected

Per-triangle normals.

Definition at line 1493 of file ecvMesh.h.

◆ m_triVertIndexes

triangleIndexesContainer* ccMesh::m_triVertIndexes
protected

Triangles' vertices indexes (3 per triangle)

Definition at line 1502 of file ecvMesh.h.

◆ materials_

◆ textures_

◆ triangle_material_ids_

std::vector<int> ccMesh::triangle_material_ids_

◆ triangle_uvs_


The documentation for this class was generated from the following file: