This commit is contained in:
Paolo Cignoni 2020-02-11 19:35:04 +01:00
commit 6358aebc09
3 changed files with 27 additions and 2 deletions

View File

@ -674,7 +674,7 @@ public:
}
/// \brief This function expand current selection to cover the whole connected component.
static size_t SplitManifoldComponents(MeshType &m)
static size_t SplitManifoldComponents(MeshType &m, const ScalarType moveThreshold = 0)
{
typedef typename MeshType::FacePointer FacePointer;
typedef typename MeshType::FaceIterator FaceIterator;
@ -720,6 +720,30 @@ public:
++selCnt;
}
vcg::tri::UpdateTopology<MeshType>::VertexFace(tmpMesh);
vcg::tri::UpdateFlags<MeshType>::VertexBorderFromNone(tmpMesh);
for (size_t i = 0; i < size_t(tmpMesh.VN()); ++i)
{
VertexType & v = tmpMesh.vert[i];
if (v.IsB())
{
std::vector<FacePointer> faceVec;
std::vector<int> idxVec;
vcg::face::VFStarVF(&v, faceVec, idxVec);
CoordType delta(0, 0, 0);
for (auto fp : faceVec)
{
delta += vcg::Barycenter(*fp) - v.cP();
}
delta /= faceVec.size();
v.P() += delta * moveThreshold;
}
}
UpdateSelection<MeshType>::Clear(tmpMesh);
Append<MeshType, MeshType>::MeshCopy(m, tmpMesh);
return selCnt;

View File

@ -889,7 +889,7 @@ void VFDetach(FaceType & f, int z)
/// Append a face in VF list of vertex f->V(z)
template <class FaceType>
void VFAppend(FaceType* & f, int z)
void VFAppend(FaceType * f, int z)
{
typename FaceType::VertexType *v = f->V(z);
if (v->VFp()!=0)

View File

@ -35,6 +35,7 @@
* Example of usage:
* MeshType m;
* ...
* vcg::tri::UpdateBounding<MeshType>::Box(m);
* vcg::tri::UpdateFlags<MeshType>::Clear(m);
* vcg::tri::UpdateFlags<MeshType>::VertexBorderFromNone(m);
* vcg::tri::OptimizeUV_ARAP(m);