vcg::tri::Clean< CleanMeshType > Class Template Reference
[Trimesh]

Class of static functions to clean/correct/restore meshs. More...

#include <clean.h>

List of all members.

Classes

class  RemoveDuplicateVert_Compare
class  SortedTriple

Public Types

typedef vcg::Box3< ScalarTypeBox3Type
typedef MeshType::ConstFaceIterator ConstFaceIterator
typedef
MeshType::ConstVertexIterator 
ConstVertexIterator
typedef MeshType::FaceContainer FaceContainer
typedef MeshType::FaceIterator FaceIterator
typedef MeshType::FacePointer FacePointer
typedef MeshType::FaceType FaceType
typedef CleanMeshType MeshType
typedef Point3< ScalarTypePoint3x
typedef MeshType::ScalarType ScalarType
typedef GridStaticPtr
< FaceType, ScalarType
TriMeshGrid
typedef MeshType::VertexIterator VertexIterator
typedef MeshType::VertexPointer VertexPointer
typedef MeshType::VertexType VertexType

Static Public Member Functions

static int ConnectedComponents (MeshType &m, std::vector< std::pair< int, FacePointer > > &CCV)
static int CountBitLargePolygons (MeshType &m)
static int CountBitPolygons (const MeshType &m)
static int CountBitQuads (const MeshType &m)
static int CountBitTris (const MeshType &m)
static int CountConnectedComponents (MeshType &m)
static void CountEdges (MeshType &m, int &count_e, int &boundary_e)
static int CountHoles (MeshType &m)
static int CountNonManifoldEdgeFF (MeshType &m, bool SelectFlag=false)
static int CountNonManifoldVertexFF (MeshType &m, bool selectVert=true)
static void FlipMesh (MeshType &m, bool selected=false)
 Flip the orientation of the whole mesh flipping all the faces (by swapping the first two vertices).
static bool HasConsistentEdges (const MeshType &m)
static bool HasConsistentPerFaceFauxFlag (const MeshType &m)
static bool HasConsistentPerWedgeTexCoord (MeshType &m)
static bool HasZeroTexCoordFace (MeshType &m)
static bool IsBitPolygonal (const MeshType &m)
static bool IsBitQuadOnly (const MeshType &m)
static bool IsBitTriOnly (const MeshType &m)
static bool IsBitTriQuadOnly (const MeshType &m)
static bool IsFFAdjacencyConsistent (MeshType &m)
static void IsOrientedMesh (MeshType &m, bool &Oriented, bool &Orientable)
static void IsRegularMesh (MeshType &m, bool &Regular, bool &Semiregular)
static bool IsSizeConsistent (MeshType &m)
static int MergeCloseVertex (MeshType &m, const ScalarType radius)
static int MeshGenus (MeshType &m, int numholes, int numcomponents, int count_e)
static int RemoveDegenerateFace (MeshType &m)
static int RemoveDegenerateVertex (MeshType &m)
static int RemoveDuplicateFace (MeshType &m)
static int RemoveDuplicateVertex (MeshType &m, bool RemoveDegenerateFlag=true)
static int RemoveFaceFoldByFlip (MeshType &m, float normalThresholdDeg=175, bool repeat=true)
static int RemoveFaceOutOfRangeArea (MeshType &m, ScalarType MinAreaThr=0, ScalarType MaxAreaThr=(std::numeric_limits< ScalarType >::max)())
template<bool Selected>
static int RemoveFaceOutOfRangeAreaSel (MeshType &m, ScalarType MinAreaThr=0, ScalarType MaxAreaThr=(std::numeric_limits< ScalarType >::max)())
static int RemoveNonManifoldFace (MeshType &m)
static int RemoveNonManifoldVertex (MeshType &m)
static std::pair< int, int > RemoveSmallConnectedComponentsDiameter (MeshType &m, ScalarType maxDiameter)
 Remove the connected components smaller than a given diameter.
static std::pair< int, int > RemoveSmallConnectedComponentsSize (MeshType &m, int maxCCSize)
static int RemoveTVertexByCollapse (MeshType &m, float threshold=40, bool repeat=true)
static int RemoveTVertexByFlip (MeshType &m, float threshold=40, bool repeat=true)
static int RemoveUnreferencedVertex (MeshType &m, bool DeleteVertexFlag=true)
static int RemoveZeroAreaFace (MeshType &m)
static bool SelfIntersections (MeshType &m, std::vector< FaceType * > &ret)
static bool TestIntersection (FaceType *f0, FaceType *f1)

Detailed Description

template<class CleanMeshType>
class vcg::tri::Clean< CleanMeshType >

Class of static functions to clean/correct/restore meshs.

Definition at line 111 of file clean.h.


Member Typedef Documentation

template<class CleanMeshType>
typedef vcg::Box3<ScalarType> vcg::tri::Clean< CleanMeshType >::Box3Type

Definition at line 126 of file clean.h.

template<class CleanMeshType>
typedef MeshType::ConstFaceIterator vcg::tri::Clean< CleanMeshType >::ConstFaceIterator

Definition at line 124 of file clean.h.

template<class CleanMeshType>
typedef MeshType::ConstVertexIterator vcg::tri::Clean< CleanMeshType >::ConstVertexIterator

Definition at line 119 of file clean.h.

template<class CleanMeshType>
typedef MeshType::FaceContainer vcg::tri::Clean< CleanMeshType >::FaceContainer

Definition at line 125 of file clean.h.

template<class CleanMeshType>
typedef MeshType::FaceIterator vcg::tri::Clean< CleanMeshType >::FaceIterator

Definition at line 123 of file clean.h.

template<class CleanMeshType>
typedef MeshType::FacePointer vcg::tri::Clean< CleanMeshType >::FacePointer

Definition at line 122 of file clean.h.

template<class CleanMeshType>
typedef MeshType::FaceType vcg::tri::Clean< CleanMeshType >::FaceType

Definition at line 121 of file clean.h.

template<class CleanMeshType>
typedef CleanMeshType vcg::tri::Clean< CleanMeshType >::MeshType

Definition at line 115 of file clean.h.

template<class CleanMeshType>
typedef Point3<ScalarType> vcg::tri::Clean< CleanMeshType >::Point3x

Definition at line 129 of file clean.h.

template<class CleanMeshType>
typedef MeshType::ScalarType vcg::tri::Clean< CleanMeshType >::ScalarType

Definition at line 120 of file clean.h.

template<class CleanMeshType>
typedef GridStaticPtr<FaceType, ScalarType > vcg::tri::Clean< CleanMeshType >::TriMeshGrid

Definition at line 128 of file clean.h.

template<class CleanMeshType>
typedef MeshType::VertexIterator vcg::tri::Clean< CleanMeshType >::VertexIterator

Definition at line 118 of file clean.h.

template<class CleanMeshType>
typedef MeshType::VertexPointer vcg::tri::Clean< CleanMeshType >::VertexPointer

Definition at line 117 of file clean.h.

template<class CleanMeshType>
typedef MeshType::VertexType vcg::tri::Clean< CleanMeshType >::VertexType

Definition at line 116 of file clean.h.


Member Function Documentation

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::ConnectedComponents ( MeshType m,
std::vector< std::pair< int, FacePointer > > &  CCV 
) [inline, static]

Definition at line 857 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::CountBitLargePolygons ( MeshType m  )  [inline, static]

The number of polygonal faces is FN - EN_f (each faux edge hides exactly one triangular face or in other words a polygon of n edges has n-3 faux edges.) In the general case where a The number of polygonal faces is FN - EN_f + VN_f where: EN_f is the number of faux edges. VN_f is the number of faux vertices (e.g vertices completely surrounded by faux edges) as a intuitive proof think to a internal vertex that is collapsed onto a border of a polygon: it deletes 2 faces, 1 faux edges and 1 vertex so to keep the balance you have to add back the removed vertex.

Definition at line 549 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::CountBitPolygons ( const MeshType m  )  [inline, static]

How many polygons of any kind? (including triangles)

Definition at line 525 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::CountBitQuads ( const MeshType m  )  [inline, static]

How many quadrilaterals?

Definition at line 497 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::CountBitTris ( const MeshType m  )  [inline, static]

How many triangles? (non polygonal faces)

Definition at line 512 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::CountConnectedComponents ( MeshType m  )  [inline, static]

Definition at line 851 of file clean.h.

template<class CleanMeshType>
static void vcg::tri::Clean< CleanMeshType >::CountEdges ( MeshType m,
int &  count_e,
int &  boundary_e 
) [inline, static]

Definition at line 736 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::CountHoles ( MeshType m  )  [inline, static]

Definition at line 789 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::CountNonManifoldEdgeFF ( MeshType m,
bool  SelectFlag = false 
) [inline, static]

Count the number of non manifold edges in a mesh, e.g. the edges where there are more than 2 incident faces.

Note that this test is not enough to say that a mesh is two manifold, you have to count also the non manifold vertexes.

Definition at line 636 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::CountNonManifoldVertexFF ( MeshType m,
bool  selectVert = true 
) [inline, static]

Count (and eventually select) non 2-Manifold vertexes of a mesh e.g. the vertices with a non 2-manif. neighbourhood but that do not belong to not 2-manif edges. typical situation two cones connected by one vertex.

Definition at line 688 of file clean.h.

template<class CleanMeshType>
static void vcg::tri::Clean< CleanMeshType >::FlipMesh ( MeshType m,
bool  selected = false 
) [inline, static]

Flip the orientation of the whole mesh flipping all the faces (by swapping the first two vertices).

Definition at line 1075 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::HasConsistentEdges ( const MeshType m  )  [inline, static]

Definition at line 610 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::HasConsistentPerFaceFauxFlag ( const MeshType m  )  [inline, static]

Checks that the mesh has consistent per-face faux edges (the ones that merges triangles into larger polygons). A border edge should never be faux, and faux edges should always be reciprocated by another faux edges. It requires FF adjacency.

Definition at line 593 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::HasConsistentPerWedgeTexCoord ( MeshType m  )  [inline, static]

This function simply test that a mesh has some reasonable tex coord.

Definition at line 1301 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::HasZeroTexCoordFace ( MeshType m  )  [inline, static]

Simple check that there are no face with all collapsed tex coords.

Definition at line 1319 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::IsBitPolygonal ( const MeshType m  )  [inline, static]

Definition at line 476 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::IsBitQuadOnly ( const MeshType m  )  [inline, static]

Is the mesh only composed by quadrilaterals?

Definition at line 450 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::IsBitTriOnly ( const MeshType m  )  [inline, static]

Is the mesh only composed by triangles? (non polygonal faces)

Definition at line 465 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::IsBitTriQuadOnly ( const MeshType m  )  [inline, static]

Is the mesh only composed by quadrilaterals and triangles? (no pentas, etc)

Definition at line 483 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::IsFFAdjacencyConsistent ( MeshType m  )  [inline, static]

This function simply test that all the faces have a consistent face-face topology relation. useful for checking that a topology modifying algorithm does not mess something.

Definition at line 1285 of file clean.h.

template<class CleanMeshType>
static void vcg::tri::Clean< CleanMeshType >::IsOrientedMesh ( MeshType m,
bool &  Oriented,
bool &  Orientable 
) [inline, static]

Definition at line 1000 of file clean.h.

template<class CleanMeshType>
static void vcg::tri::Clean< CleanMeshType >::IsRegularMesh ( MeshType m,
bool &  Regular,
bool &  Semiregular 
) [inline, static]

Check if the given mesh is regular, semi-regular or irregular.

Each vertex of a regular mesh has valence 6 except for border vertices which have valence 4.

A semi-regular mesh is derived from an irregular one applying 1-to-4 subdivision recursively. (not checked for now)

All other meshes are irregular.

Definition at line 952 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::IsSizeConsistent ( MeshType m  )  [inline, static]

This function simply test that the vn and fn counters be consistent with the size of the containers and the number of deleted simplexes.

Definition at line 1265 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::MergeCloseVertex ( MeshType m,
const ScalarType  radius 
) [inline, static]

This function merge all the vertices that are closer than the given radius

Definition at line 1359 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::MeshGenus ( MeshType m,
int  numholes,
int  numcomponents,
int  count_e 
) [inline, static]

GENUS.

A topologically invariant property of a surface defined as the largest number of non-intersecting simple closed curves that can be drawn on the surface without separating it.

Roughly speaking, it is the number of holes in a surface. The genus g of a closed surface, also called the geometric genus, is related to the Euler characteristic by the relation $chi$ by $chi==2-2g$.

The genus of a connected, orientable surface is an integer representing the maximum number of cuttings along closed simple curves without rendering the resultant manifold disconnected. It is equal to the number of handles on it.

For general polyhedra the Euler Formula is:

V + F - E = 2 - 2G - B

where V is the number of vertices, F is the number of faces, E is the number of edges, G is the genus and B is the number of boundary polygons.

The above formula is valid for a mesh with one single connected component. By considering multiple connected components the formula becomes:

V + F - E = 2C - 2Gs - B

where C is the number of connected components and Gs is the sum of the genus of all connected components.

Definition at line 933 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveDegenerateFace ( MeshType m  )  [inline, static]

Degenerate faces are faces that are Topologically degenerate, i.e. have two or more vertex reference that link the same vertex (and not only two vertexes with the same coordinates). All Degenerate faces are zero area faces BUT not all zero area faces are degenerate. We do not take care of topology because when we have degenerate faces the topology calculation functions crash.

Definition at line 335 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveDegenerateVertex ( MeshType m  )  [inline, static]

Degenerate vertices are vertices that have coords with invalid floating point values, All the faces incident on deleted vertices are also deleted

Definition at line 298 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveDuplicateFace ( MeshType m  )  [inline, static]

This function removes all duplicate faces of the mesh by looking only at their vertex reference. So it should be called after unification of vertices. Note that it does not update any topology relation that could be affected by this like the VT or TT relation. the reason this function is usually performed BEFORE building any topology information.

Definition at line 236 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveDuplicateVertex ( MeshType m,
bool  RemoveDegenerateFlag = true 
) [inline, static]

This function removes all duplicate vertices of the mesh by looking only at their spatial positions. Note that it does not update any topology relation that could be affected by this like the VT or TT relation. the reason this function is usually performed BEFORE building any topology information.

Definition at line 151 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveFaceFoldByFlip ( MeshType m,
float  normalThresholdDeg = 175,
bool  repeat = true 
) [inline, static]

Definition at line 1088 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveFaceOutOfRangeArea ( MeshType m,
ScalarType  MinAreaThr = 0,
ScalarType  MaxAreaThr = (std::numeric_limits<ScalarType>::max)() 
) [inline, static]

Definition at line 442 of file clean.h.

template<class CleanMeshType>
template<bool Selected>
static int vcg::tri::Clean< CleanMeshType >::RemoveFaceOutOfRangeAreaSel ( MeshType m,
ScalarType  MinAreaThr = 0,
ScalarType  MaxAreaThr = (std::numeric_limits<ScalarType>::max)() 
) [inline, static]

Definition at line 418 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveNonManifoldFace ( MeshType m  )  [inline, static]

Definition at line 375 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveNonManifoldVertex ( MeshType m  )  [inline, static]

Definition at line 354 of file clean.h.

template<class CleanMeshType>
static std::pair<int,int> vcg::tri::Clean< CleanMeshType >::RemoveSmallConnectedComponentsDiameter ( MeshType m,
ScalarType  maxDiameter 
) [inline, static]

Remove the connected components smaller than a given diameter.

Definition at line 1421 of file clean.h.

template<class CleanMeshType>
static std::pair<int,int> vcg::tri::Clean< CleanMeshType >::RemoveSmallConnectedComponentsSize ( MeshType m,
int  maxCCSize 
) [inline, static]

Definition at line 1395 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveTVertexByCollapse ( MeshType m,
float  threshold = 40,
bool  repeat = true 
) [inline, static]

Definition at line 1186 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveTVertexByFlip ( MeshType m,
float  threshold = 40,
bool  repeat = true 
) [inline, static]

Definition at line 1138 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveUnreferencedVertex ( MeshType m,
bool  DeleteVertexFlag = true 
) [inline, static]

This function removes that are not referenced by any face. The function updates the vn counter.

Parameters:
m The mesh
Returns:
The number of removed vertices

Definition at line 267 of file clean.h.

template<class CleanMeshType>
static int vcg::tri::Clean< CleanMeshType >::RemoveZeroAreaFace ( MeshType m  )  [inline, static]

Definition at line 439 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::SelfIntersections ( MeshType m,
std::vector< FaceType * > &  ret 
) [inline, static]

Definition at line 1224 of file clean.h.

template<class CleanMeshType>
static bool vcg::tri::Clean< CleanMeshType >::TestIntersection ( FaceType f0,
FaceType f1 
) [inline, static]

This function test if two face intersect. We assume that the two faces are different. if the faces share an edge no test is done. if the faces share only a vertex, the opposite edge is tested against the face

Definition at line 1338 of file clean.h.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines


vcglib
Author(s): Christian Bersch
autogenerated on Fri Jan 11 09:23:29 2013