Added support of selection in polygon smoothing

This commit is contained in:
Paolo Cignoni 2018-11-29 00:46:35 +01:00
parent 1d7a803c8c
commit a2c22505ed
1 changed files with 13 additions and 8 deletions

View File

@ -259,7 +259,7 @@ private:
//assert(W!=0);
for (size_t k=0;k<(size_t)poly_m.face[i].VN();k++)
{
if (k==j)continue;
if (k==j) continue;
int IndexV=vcg::tri::Index(poly_m,poly_m.face[i].V(k));
AvVert[IndexV]+=currP*W;
AvSum[IndexV]+=W;
@ -596,14 +596,16 @@ public:
static void LaplacianReproject(PolyMeshType &poly_m,
TriMeshType &tri_mesh,
int nstep=100,
ScalarType Damp=0.5)
ScalarType DampS=0.5,
ScalarType DampR=0.5,
bool OnlyOnSelected=false)
{
typedef typename TriMeshType::FaceType TriFaceType;
typedef typename TriMeshType::ScalarType TriScalarType;
typedef typename TriMeshType::CoordType TriCoordType;
typedef vcg::GridStaticPtr<TriFaceType, TriScalarType> TriMeshGrid;
TriMeshGrid grid;
tri::MeshAssert<TriMeshType>::VertexNormalNormalized(tri_mesh);
//initialize the grid
grid.Set(tri_mesh.face.begin(),tri_mesh.face.end());
@ -616,14 +618,17 @@ public:
for (size_t i=0;i<poly_m.vert.size();i++)
{
if (poly_m.vert[i].IsB())continue;
poly_m.vert[i].P()=poly_m.vert[i].P()*Damp+
AvVert[i]*(1-Damp);
if (poly_m.vert[i].IsB()) continue;
if (OnlyOnSelected && !poly_m.vert[i].IsS()) continue;
poly_m.vert[i].P()=poly_m.vert[i].P()*DampS+
AvVert[i]*(1-DampS);
}
for (size_t i=0;i<poly_m.vert.size();i++)
{
if(OnlyOnSelected && !poly_m.vert[i].IsS()) continue;
TriCoordType testPos;
testPos.Import(poly_m.vert[i].P());
TriCoordType closestPt;
@ -633,8 +638,8 @@ public:
f=vcg::tri::GetClosestFaceBase(tri_mesh,grid,testPos,MaxD,minDist,closestPt,norm,ip);
CoordType closestImp;
closestImp.Import(closestPt);
poly_m.vert[i].P()=poly_m.vert[i].P()*Damp+
closestImp*(1-Damp);
poly_m.vert[i].P()=poly_m.vert[i].P()*DampR+
closestImp*(1-DampR);
CoordType normalImp;
normalImp.Import(norm);
poly_m.vert[i].N()=normalImp;