From 1236df14c590e653bf17aab434b11de6f735768b Mon Sep 17 00:00:00 2001 From: cignoni Date: Thu, 23 Apr 2009 21:21:21 +0000 Subject: [PATCH] Added RemoveDuplicateFace Function --- vcg/complex/trimesh/clean.h | 59 ++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/vcg/complex/trimesh/clean.h b/vcg/complex/trimesh/clean.h index d4515faf..844c25fd 100644 --- a/vcg/complex/trimesh/clean.h +++ b/vcg/complex/trimesh/clean.h @@ -389,7 +389,65 @@ private: return deleted; } + class SortedTriple + { + public: + SortedTriple() {} + SortedTriple(unsigned int v0, unsigned int v1, unsigned int v2,FacePointer _fp) + { + v[0]=v0;v[1]=v1;v[2]=v2; + fp=_fp; + std::sort(v,v+3); + } + bool operator < (const SortedTriple &p) const + { + return (v[2]!=p.v[2])?(v[2] fvec; + for(fi=m.face.begin();fi!=m.face.end();++fi) + if(!(*fi).IsD()) + { + fvec.push_back(SortedTriple( tri::Index(m,(*fi).V(0)), + tri::Index(m,(*fi).V(1)), + tri::Index(m,(*fi).V(2)), + &*fi)); + } + assert (m.fn == fvec.size()); + //for(int i=0;i::DeleteFace(m, *(fvec[i].fp) ); + //qDebug("deleting face %i (pos in fvec %i)",tri::Index(m,fvec[i].fp) ,i); + } + } + return total; + } /** This function removes that are not referenced by any face. The function updates the vn counter. @param m The mesh @return The number of removed vertices @@ -1351,7 +1409,6 @@ static int MergeCloseVertex(MeshType &m, const ScalarType radius) typedef vcg::vertex::PointDistanceFunctor VDistFunct; std::vector closests; int mergedCnt=0; - VDistFunct distFunctor; Point3f closestPt; sht.Set(m.vert.begin(), m.vert.end()); UpdateFlags::VertexClearV(m);