relax in isotropic_remeshing colinear clean constraints
This commit is contained in:
parent
fa55696070
commit
d657112c13
|
|
@ -95,6 +95,7 @@ public:
|
||||||
bool adapt=false;
|
bool adapt=false;
|
||||||
int iter=1;
|
int iter=1;
|
||||||
Stat stat;
|
Stat stat;
|
||||||
|
|
||||||
void SetTargetLen(const ScalarType len)
|
void SetTargetLen(const ScalarType len)
|
||||||
{
|
{
|
||||||
minLength=len*4./5.;
|
minLength=len*4./5.;
|
||||||
|
|
@ -102,6 +103,7 @@ public:
|
||||||
lengthThr=len*4./3.;
|
lengthThr=len*4./3.;
|
||||||
minimalAdmittedArea = (minLength * minLength)/1000.0;
|
minimalAdmittedArea = (minLength * minLength)/1000.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetFeatureAngleDeg(const ScalarType angle)
|
void SetFeatureAngleDeg(const ScalarType angle)
|
||||||
{
|
{
|
||||||
creaseAngleRadThr = math::ToRad(angle);
|
creaseAngleRadThr = math::ToRad(angle);
|
||||||
|
|
@ -140,20 +142,13 @@ private:
|
||||||
vcg::tri::io::Exporter<MeshType>::Save(toRemesh, prepend.c_str(), vcg::tri::io::Mask::IOM_ALL);
|
vcg::tri::io::Exporter<MeshType>::Save(toRemesh, prepend.c_str(), vcg::tri::io::Mask::IOM_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void removeColinearFaces(MeshType & m, Params & params)
|
static void removeColinearFaces(MeshType & m, Params & params)
|
||||||
{
|
{
|
||||||
vcg::tri::UpdateTopology<MeshType>::FaceFace(m);
|
vcg::tri::UpdateTopology<MeshType>::FaceFace(m);
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
int iter = 0;
|
||||||
// MeshType projectMesh;
|
|
||||||
// vcg::tri::Append<MeshType, MeshType>::MeshCopy(projectMesh, m);
|
|
||||||
// vcg::tri::UpdateBounding<MeshType>::Box(projectMesh);
|
|
||||||
// vcg::tri::UpdateNormal<MeshType>::PerVertexNormalizedPerFace(projectMesh);
|
|
||||||
|
|
||||||
// StaticGrid grid;
|
|
||||||
// grid.Set(projectMesh.face.begin(), projectMesh.face.end());
|
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
vcg::tri::UpdateTopology<MeshType>::FaceFace(m);
|
vcg::tri::UpdateTopology<MeshType>::FaceFace(m);
|
||||||
|
|
@ -166,13 +161,15 @@ private:
|
||||||
|
|
||||||
ScalarType quality = vcg::QualityRadii(f.cP(0), f.cP(1), f.cP(2));
|
ScalarType quality = vcg::QualityRadii(f.cP(0), f.cP(1), f.cP(2));
|
||||||
|
|
||||||
if (quality <= 0.00000001)
|
if (quality <= 0.001)
|
||||||
{
|
{
|
||||||
//find longest edge
|
//find longest edge
|
||||||
double edges[3];
|
double edges[3];
|
||||||
edges[0] = vcg::Distance(f.cP(0), f.cP(1));
|
edges[0] = vcg::Distance(f.cP(0), f.cP(1));
|
||||||
edges[1] = vcg::Distance(f.cP(1), f.cP(2));
|
edges[1] = vcg::Distance(f.cP(1), f.cP(2));
|
||||||
edges[2] = vcg::Distance(f.cP(2), f.cP(0));
|
edges[2] = vcg::Distance(f.cP(2), f.cP(0));
|
||||||
|
|
||||||
|
ScalarType smallestEdge = std::min(edges[0], std::min(edges[1], edges[2]));
|
||||||
int longestIdx = std::find(edges, edges+3, std::max(std::max(edges[0], edges[1]), edges[2])) - (edges);
|
int longestIdx = std::find(edges, edges+3, std::max(std::max(edges[0], edges[1]), edges[2])) - (edges);
|
||||||
|
|
||||||
if (vcg::tri::IsMarked(m, f.V2(longestIdx)))
|
if (vcg::tri::IsMarked(m, f.V2(longestIdx)))
|
||||||
|
|
@ -192,11 +189,11 @@ private:
|
||||||
{
|
{
|
||||||
ScalarType dist;
|
ScalarType dist;
|
||||||
CoordType closest;
|
CoordType closest;
|
||||||
auto fp0 = vcg::tri::GetClosestFaceBase(*params.mProject, params.grid, vcg::Barycenter(t3), 0.000001, dist, closest);
|
auto fp0 = vcg::tri::GetClosestFaceBase(*params.mProject, params.grid, vcg::Barycenter(t3), smallestEdge/4., dist, closest);
|
||||||
if (fp0 == NULL)
|
if (fp0 == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto fp1 = vcg::tri::GetClosestFaceBase(*params.mProject, params.grid, vcg::Barycenter(t4), 0.000001, dist, closest);
|
auto fp1 = vcg::tri::GetClosestFaceBase(*params.mProject, params.grid, vcg::Barycenter(t4), smallestEdge/4., dist, closest);
|
||||||
if (fp1 == NULL)
|
if (fp1 == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
@ -206,7 +203,7 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (count);
|
} while (count && ++iter < 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cleanMesh(MeshType & m, Params & params)
|
static void cleanMesh(MeshType & m, Params & params)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue