diff --git a/vcg/complex/algorithms/polygonal_algorithms.h b/vcg/complex/algorithms/polygonal_algorithms.h index 0c517f90..a57625b9 100644 --- a/vcg/complex/algorithms/polygonal_algorithms.h +++ b/vcg/complex/algorithms/polygonal_algorithms.h @@ -387,6 +387,30 @@ private: F.N()=PlF.Direction(); } + static void DisplaceBySelected(FaceType &f,std::vector &TemplatePos, + bool FixS,bool FixB) + { + CoordType AvPosF(0,0,0); + CoordType AvPosT(0,0,0); + size_t Num=0; + for (size_t i=0;iIsS())); + AddVal|=((FixB)&&(f.V(i)->IsB())); + if (!AddVal)continue; + Num++; + AvPosF+=f.V(i)->P(); + AvPosT+=TemplatePos[i]; + } + if (Num==0)return; + AvPosF/=(ScalarType)Num; + AvPosT/=(ScalarType)Num; + CoordType Displ=AvPosF-AvPosT; + for (size_t i=0;i TemplatePos; GetRotatedTemplatePos(poly_m.face[i],TemplatePos); + if ((FixS)||(fixB)) + DisplaceBySelected(poly_m.face[i],TemplatePos,FixS,fixB); + //then cumulate the position per vertex ScalarType val=vcg::PolyArea(poly_m.face[i]); if (val<(AvgArea*0.00001)) @@ -564,7 +591,6 @@ public: //sum up contributes avgPos[IndexV]+=Pos*W; weightSum[IndexV]+=W; - } }