From 4bd1bb2376a32de787995ac44ce616aa52ba64a6 Mon Sep 17 00:00:00 2001 From: nico Date: Tue, 5 Dec 2017 23:24:47 +1100 Subject: [PATCH] refactored the class and removed unused functions --- vcg/complex/algorithms/dual_meshing.h | 84 ++++++--------------------- 1 file changed, 19 insertions(+), 65 deletions(-) diff --git a/vcg/complex/algorithms/dual_meshing.h b/vcg/complex/algorithms/dual_meshing.h index 8d15673a..1a0f8ede 100644 --- a/vcg/complex/algorithms/dual_meshing.h +++ b/vcg/complex/algorithms/dual_meshing.h @@ -27,6 +27,7 @@ #include #include #include +#include namespace vcg { namespace tri { @@ -61,65 +62,8 @@ class DualMeshing vertSeq.push_back(indexV); } - if (startV.IsB()) - { - vcg::face::Pos firstPos=posVec[0]; - firstPos.FlipE(); - assert(firstPos.IsBorder()); - - int indexVt0=vcg::tri::Index(primal,firstPos.V()); - int indexVt1=vcg::tri::Index(primal,firstPos.VFlip()); - std::pair key(std::min(indexVt0,indexVt1), - std::max(indexVt0,indexVt1)); - assert(EdgeMap.count(key)>0); - int indexV0=EdgeMap[key]; - - vcg::face::Pos lastPos=posVec.back(); - assert(lastPos.IsBorder()); - - indexVt0=vcg::tri::Index(primal,lastPos.V()); - indexVt1=vcg::tri::Index(primal,lastPos.VFlip()); - key=std::pair (std::min(indexVt0,indexVt1), - std::max(indexVt0,indexVt1)); - assert(EdgeMap.count(key)>0); - int indexV1=EdgeMap[key]; - - vertSeq.push_back(indexV1); - vertSeq.push_back(indexV0); - } } - static void CreateBorderEdgeVert(PolyMeshType &primal, - PolyMeshType &dual, - std::map, int> &VertMap) - { - VertMap.clear(); - vcg::tri::UpdateFlags::VertexClearB(primal); - - for (size_t i=0;iSetB(); - v1->SetB(); - - int V0Index=vcg::tri::Index(primal,v0); - int V1Index=vcg::tri::Index(primal,v1); - CoordType pos=(v0->P()+v1->P())/2; - vcg::tri::Allocator::AddVertex(dual,pos); - std::pair key(std::min(V0Index,V1Index), - std::max(V0Index,V1Index)); - - VertMap[key]=dual.vert.size()-1; - } - } static void CreateFaceVert(PolyMeshType &primal, PolyMeshType &dual, @@ -137,7 +81,6 @@ class DualMeshing int num=0; if (snapBorder)//search for border edge { - std::vector BorderPos; for (int j=0;jIsB())continue; @@ -145,7 +88,7 @@ class DualMeshing num++; } if (num>0) - pos/=num; + pos/=num; } if (num==0) @@ -153,15 +96,22 @@ class DualMeshing for (int j=0;jP(); - int indexV=vcg::tri::Index(primal,primal.face[i].V(j)); - if (VertFace[indexV]!=-1)continue; - VertFace[indexV]=i; } pos/=(ScalarType)primal.face[i].VN(); } vcg::tri::Allocator::AddVertex(dual,pos); VertMap[i]=dual.vert.size()-1; + dual.vert.back().Q()=i; } + + //then initialize VF first face + for (size_t i=0;i::FaceFace(primal); + vcg::tri::UpdateFlags::VertexBorderFromFaceAdj(primal); std::map, int> VertEdgeMap; - CreateBorderEdgeVert(primal,dual,VertEdgeMap); + std::cout<<"Creating Dual Vertices"< VertFaceMap,VertFace; CreateFaceVert(primal,dual,VertFaceMap,VertFace,snapBorder); + std::cout<<"Creating Dual Faces"< VertSeq; @@ -195,9 +147,11 @@ public: dual.face.back().Alloc(VertSeq.size()); for (size_t j=0;j::RemoveUnreferencedVertex(dual); + //finally remove valence 1 vertices on the border + vcg::PolygonalAlgorithm::RemoveValence2Vertices(dual); } };