diff --git a/vcg/complex/algorithms/update/quality.h b/vcg/complex/algorithms/update/quality.h index 53078172..a53aa6a8 100644 --- a/vcg/complex/algorithms/update/quality.h +++ b/vcg/complex/algorithms/update/quality.h @@ -241,25 +241,42 @@ static void FaceFromVertex( MeshType &m) static void VertexFromPlane(MeshType &m, const Plane3 &pl) { - VertexIterator vi; - for(vi=m.vert.begin();vi!=m.vert.end();++vi) if(!(*vi).IsD()) + for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi) if(!(*vi).IsD()) (*vi).Q() =SignedDistancePlanePoint(pl,(*vi).cP()); } -static void VertexFromGaussianCurvature(MeshType &m) +static void VertexFromGaussianCurvatureHG(MeshType &m) { - VertexIterator vi; - for(vi=m.vert.begin();vi!=m.vert.end();++vi) if(!(*vi).IsD()) + tri::RequirePerVertexQuality(m); + tri::RequirePerVertexCurvature(m); + for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi) if(!(*vi).IsD()) (*vi).Q() = (*vi).Kg(); } -static void VertexFromMeanCurvature(MeshType &m) +static void VertexFromMeanCurvatureHG(MeshType &m) { - VertexIterator vi; - for(vi=m.vert.begin();vi!=m.vert.end();++vi) if(!(*vi).IsD()) + tri::RequirePerVertexQuality(m); + tri::RequirePerVertexCurvature(m); + for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi) if(!(*vi).IsD()) (*vi).Q() = (*vi).Kh(); } +static void VertexFromGaussianCurvatureDir(MeshType &m) +{ + tri::RequirePerVertexQuality(m); + tri::RequirePerVertexCurvatureDir(m); + for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi) if(!(*vi).IsD()) + (*vi).Q() = (*vi).K1()*(*vi).K2(); +} + +static void VertexFromMeanCurvatureDir(MeshType &m) +{ + tri::RequirePerVertexQuality(m); + tri::RequirePerVertexCurvatureDir(m); + for(VertexIterator vi=m.vert.begin();vi!=m.vert.end();++vi) if(!(*vi).IsD()) + (*vi).Q() = ((*vi).K1()+(*vi).K2())/2.0f; +} + /* * Absolute Curvature *