made the LaplacianReproject independent wrt scalar type used for the tri mesh

This commit is contained in:
nico 2018-11-21 23:18:17 +11:00
parent 06f8a69ee1
commit 9691602218
1 changed files with 18 additions and 11 deletions

View File

@ -598,14 +598,16 @@ public:
int nstep=100, int nstep=100,
ScalarType Damp=0.5) ScalarType Damp=0.5)
{ {
typedef typename TriMeshType::FaceType FaceType; typedef typename TriMeshType::FaceType TriFaceType;
typedef vcg::GridStaticPtr<FaceType, ScalarType> TriMeshGrid; typedef typename TriMeshType::ScalarType TriScalarType;
typedef typename TriMeshType::CoordType TriCoordType;
typedef vcg::GridStaticPtr<TriFaceType, TriScalarType> TriMeshGrid;
TriMeshGrid grid; TriMeshGrid grid;
//initialize the grid //initialize the grid
grid.Set(tri_mesh.face.begin(),tri_mesh.face.end()); grid.Set(tri_mesh.face.begin(),tri_mesh.face.end());
ScalarType MaxD=tri_mesh.bbox.Diag(); TriScalarType MaxD=tri_mesh.bbox.Diag();
for (int s=0;s<nstep;s++) for (int s=0;s<nstep;s++)
{ {
@ -622,15 +624,20 @@ public:
for (size_t i=0;i<poly_m.vert.size();i++) for (size_t i=0;i<poly_m.vert.size();i++)
{ {
CoordType testPos=poly_m.vert[i].P(); TriCoordType testPos;
CoordType closestPt; testPos.Import(poly_m.vert[i].P());
ScalarType minDist; TriCoordType closestPt;
FaceType *f=NULL; TriScalarType minDist;
CoordType norm,ip; TriFaceType *f=NULL;
TriCoordType norm,ip;
f=vcg::tri::GetClosestFaceBase(tri_mesh,grid,testPos,MaxD,minDist,closestPt,norm,ip); 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+ poly_m.vert[i].P()=poly_m.vert[i].P()*Damp+
closestPt*(1-Damp); closestImp*(1-Damp);
poly_m.vert[i].N()=norm; CoordType normalImp;
normalImp.Import(norm);
poly_m.vert[i].N()=normalImp;
} }
} }
@ -648,7 +655,7 @@ public:
vcg::tri::UpdateNormal<TempMesh>::PerVertexNormalizedPerFace(GuideSurf); vcg::tri::UpdateNormal<TempMesh>::PerVertexNormalizedPerFace(GuideSurf);
vcg::tri::UpdateTopology<TempMesh>::FaceFace(GuideSurf); vcg::tri::UpdateTopology<TempMesh>::FaceFace(GuideSurf);
vcg::tri::UpdateFlags<TempMesh>::FaceBorderFromFF(GuideSurf); vcg::tri::UpdateFlags<TempMesh>::FaceBorderFromFF(GuideSurf);
LaplacianReproject(poly_m,GuideSurf,nstep,Damp=0.5); LaplacianReproject<TempMesh>(poly_m,GuideSurf,nstep,Damp=0.5);
} }
static void Laplacian(PolyMeshType &poly_m, static void Laplacian(PolyMeshType &poly_m,