better comments

This commit is contained in:
Paolo Cignoni 2012-07-03 09:14:17 +00:00
parent e362d54a25
commit f036874693
1 changed files with 22 additions and 13 deletions

View File

@ -130,6 +130,10 @@ static void VoronoiColoring(MeshType &m, std::vector<VertexType *> &seedVec, boo
tri::UpdateColor<MeshType>::VertexQualityRamp(m); tri::UpdateColor<MeshType>::VertexQualityRamp(m);
} }
// It associates the faces with a given vertex according to the vertex associations
//
// It READS the PerVertex attribute 'sources'
// It WRITES the PerFace attribute 'sources'
static void FaceAssociateRegion(MeshType &m) static void FaceAssociateRegion(MeshType &m)
{ {
@ -141,7 +145,7 @@ static void FaceAssociateRegion(MeshType &m)
std::vector<VertexPointer> vp(3); std::vector<VertexPointer> vp(3);
for(int i=0;i<3;++i) vp[i]=vertexSources[fi->V(i)]; for(int i=0;i<3;++i) vp[i]=vertexSources[fi->V(i)];
for(int i=0;i<3;++i) // First try to assoiciate to the most reached vertex for(int i=0;i<3;++i) // First try to associate to the most reached vertex
{ {
if(vp[0]==vp[1] && vp[0]==vp[2]) faceSources[fi] = vp[0]; if(vp[0]==vp[1] && vp[0]==vp[2]) faceSources[fi] = vp[0];
else else
@ -165,7 +169,6 @@ static void FaceAssociateRegion(MeshType &m)
for(int i=0;i<3;++i) for(int i=0;i<3;++i)
vp[i]=faceSources[fi->FFp(i)]; vp[i]=faceSources[fi->FFp(i)];
int cnt[3]={0,0,0};
if(vp[0]!=0 && (vp[0]==vp[1] || vp[0]==vp[2])) if(vp[0]!=0 && (vp[0]==vp[1] || vp[0]==vp[2]))
faceSources[fi] = vp[0]; faceSources[fi] = vp[0];
else if(vp[1]!=0 && (vp[1]==vp[2])) else if(vp[1]!=0 && (vp[1]==vp[2]))
@ -179,12 +182,14 @@ static void FaceAssociateRegion(MeshType &m)
while(unassCnt>0); while(unassCnt>0);
} }
// Select all the faces with a given source vertex <vp>
// It reads the PerFace attribute 'sources'
static int FaceSelectAssociateRegion(MeshType &m, VertexPointer vp) static int FaceSelectAssociateRegion(MeshType &m, VertexPointer vp)
{ {
PerFacePointerHandle sources = tri::Allocator<MeshType>:: template GetPerFaceAttribute<VertexPointer> (m,"sources"); PerFacePointerHandle sources = tri::Allocator<MeshType>:: template GetPerFaceAttribute<VertexPointer> (m,"sources");
assert(tri::Allocator<MeshType>::IsValidHandle(m,sources)); assert(tri::Allocator<MeshType>::IsValidHandle(m,sources));
tri::UpdateSelection<MeshType>::FaceClear(m); tri::UpdateSelection<MeshType>::Clear(m);
tri::UpdateSelection<MeshType>::VertexClear(m);
int selCnt=0; int selCnt=0;
for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi) for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi)
{ {
@ -197,15 +202,16 @@ static int FaceSelectAssociateRegion(MeshType &m, VertexPointer vp)
return selCnt; return selCnt;
} }
// Given a seed, it selects all the faces that have at least one vertex sourced by the given VertexPointer. // Given a seed <vp>, it selects all the faces that have the minimal distance vertex sourced by the given <vp>.
// vp can be null (it search for unreached faces...) // <vp> can be null (it search for unreached faces...)
// returns the number of selected faces; // returns the number of selected faces;
//
// It reads the PerVertex attribute 'sources'
static int FaceSelectRegion(MeshType &m, VertexPointer vp) static int FaceSelectRegion(MeshType &m, VertexPointer vp)
{ {
PerVertexPointerHandle sources = tri::Allocator<MeshType>:: template GetPerVertexAttribute<VertexPointer> (m,"sources"); PerVertexPointerHandle sources = tri::Allocator<MeshType>:: template GetPerVertexAttribute<VertexPointer> (m,"sources");
assert(tri::Allocator<MeshType>::IsValidHandle(m,sources)); assert(tri::Allocator<MeshType>::IsValidHandle(m,sources));
tri::UpdateSelection<MeshType>::FaceClear(m); tri::UpdateSelection<MeshType>::Clear(m);
tri::UpdateSelection<MeshType>::VertexClear(m);
int selCnt=0; int selCnt=0;
for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi) for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi)
{ {
@ -366,9 +372,12 @@ static void TopologicalVertexColoring(MeshType &m, std::vector<VertexType *> &se
} }
// This function assumes that in the mOld mesh, for each vertex you have a quality that denotes the index of the cluster // Drastic Simplification algorithm.
// mNew is created by collasping onto a single vertex all the vertices that lies in the same cluster. // Similar in philosopy to the classic grid clustering but using a voronoi partition instead of the regular grid.
// Non degenerate triangles are preserved. //
// This function assumes that in the mOld mesh, for each vertex you have a quality that denotes the index of the cluster
// mNew is created by collasping onto a single vertex all the vertices that lies in the same cluster.
// Non degenerate triangles are preserved.
static void VoronoiClustering(MeshType &mOld, MeshType &mNew, std::vector<VertexType *> &seedVec) static void VoronoiClustering(MeshType &mOld, MeshType &mNew, std::vector<VertexType *> &seedVec)
{ {
@ -398,7 +407,7 @@ static void VoronoiClustering(MeshType &mOld, MeshType &mNew, std::vector<Vertex
} }
} }
}; }; // end class VoronoiProcessing
} // end namespace tri } // end namespace tri
} // end namespace vcg } // end namespace vcg