From ec6129c9fd9611c8276253f2e8f5566bbbe8d376 Mon Sep 17 00:00:00 2001 From: Paolo Cignoni Date: Tue, 28 Feb 2017 16:39:41 +0100 Subject: [PATCH] Corrected Cleaning for poisson (removal of vertexes with bad normals) --- .../filter_screened_poisson.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/meshlabplugins/filter_screened_poisson/filter_screened_poisson.cpp b/src/meshlabplugins/filter_screened_poisson/filter_screened_poisson.cpp index 85cc91597..02e4b29f8 100644 --- a/src/meshlabplugins/filter_screened_poisson/filter_screened_poisson.cpp +++ b/src/meshlabplugins/filter_screened_poisson/filter_screened_poisson.cpp @@ -555,11 +555,15 @@ void PoissonClean(MeshType &m, bool scaleNormal, bool cleanFlag) vcg::tri::UpdateNormal::NormalizePerVertex(m); if(cleanFlag) { - for (auto vi = m.vert.begin(); vi != m.vert.end(); ++vi) - if (vcg::SquaredNorm(vi->N()) < std::numeric_limits::min()*10.0) - vi->setD(); + for (auto vi = m.vert.begin(); vi != m.vert.end(); ++vi) + if (vcg::SquaredNorm(vi->N()) < std::numeric_limits::min()*10.0) + vcg::tri::Allocator::DeleteVertex(m,*vi); + + for (auto fi = m.face.begin(); fi != m.face.end(); ++fi) + if( fi->V(0)->IsD() || fi->V(1)->IsD() || fi->V(2)->IsD() ) + vcg::tri::Allocator::DeleteFace(m,*fi); } - + vcg::tri::Allocator::CompactEveryVector(m); if(scaleNormal) {