diff --git a/vcg/complex/algorithms/polygonal_algorithms.h b/vcg/complex/algorithms/polygonal_algorithms.h index 6a6d2b6e..f4d4dc51 100644 --- a/vcg/complex/algorithms/polygonal_algorithms.h +++ b/vcg/complex/algorithms/polygonal_algorithms.h @@ -315,7 +315,7 @@ public: case QAngle: ScalarType AvgDev,WorstDev; vcg::PolyAngleDeviation(poly_m.face[i],AvgDev,WorstDev); - poly_m.face[i].Q()=AvgDev; + poly_m.face[i].Q()=WorstDev; break; case QPlanar: poly_m.face[i].Q()=vcg::PolyFlatness(poly_m.face[i]); @@ -449,7 +449,7 @@ public: //select corner vertices on the border ScalarType angleRad=angleDeg * M_PI / 180; - vcg::tri::UpdateFlags::SelectVertexCornerBorder(poly_m,angleRad); + vcg::tri::UpdateSelection::VertexCornerBorder(poly_m,angleRad); for (int s=0;sQ()+=AreaF/(ScalarType)poly_m.face[i].VN(); } } + + static void InterpolateQualityVertFormFaces(PolyMeshType &poly_m) + { + std::vector SumW(poly_m.vert.size(),0); + + for (size_t i=0;iQ()+=AreaF*(ScalarType)poly_m.face[i].Q(); + size_t IndexV=vcg::tri::Index(poly_m,poly_m.face[i].V(j)); + SumW[IndexV]+=AreaF; + } + } + for (size_t i=0;i0) + poly_m.vert[i].Q()/=SumW[i]; + else + poly_m.vert[i].Q()=0; + } + } + + + static void ClosestPoint(const PolyMeshType &poly_m,const CoordType &pos, + int &CloseF,CoordType &ClosePos) + { + ScalarType minD=std::numeric_limits::max(); + CloseF=-1; + for (size_t i=0;iminD)continue; + minD=currD; + CloseF=i; + ClosePos=closeTest; + } + } }; }//end namespace vcg