Added FaceFauxSignedCrease that Marks feature edges according to two signed dihedral angles.
This commit is contained in:
parent
efe6379b4b
commit
5049407069
|
@ -358,11 +358,44 @@ public:
|
|||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
|
||||
|
||||
/// \brief Marks feature edges according to two signed dihedral angles.
|
||||
/// Actually it marks as fauxedges all the non feature edges,
|
||||
/// e.g. the edge such that the signed dihedral angle between the normal of two faces sharing it, is between the two given thresholds.
|
||||
/// In this way all the near planar edges are marked as Faux Edges (e.g. edges to be ignored)
|
||||
/// Note that it uses the signed dihedral angle convention (negative for concave edges and positive for convex ones);
|
||||
static void FaceFauxSignedCrease(MeshType &m, float AngleRadNeg, float AngleRadPos )
|
||||
{
|
||||
RequirePerFaceFlags(m);
|
||||
RequireFFAdjacency(m);
|
||||
//initially Nothing is faux (e.g all crease)
|
||||
FaceClearF(m);
|
||||
// Then mark faux only if the signed angle is the range.
|
||||
for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi) if(!(*fi).IsD())
|
||||
{
|
||||
for(int z=0;z<(*fi).VN();++z)
|
||||
{
|
||||
if(!face::IsBorder(*fi,z) )
|
||||
{
|
||||
ScalarType angle = DihedralAngleRad(*fi,z);
|
||||
if(angle>AngleRadNeg && angle<AngleRadPos)
|
||||
(*fi).SetF(z);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// \brief Marks feature edges according to a given angle
|
||||
/// Actually it marks as fauxedges all the non feature edges,
|
||||
/// e.g. the edge such that the angle between the normal of two faces sharing it is less than the given threshold.
|
||||
/// In this way all the near planar edges are marked as Faux Edges (e.g. edges to be ignored)
|
||||
static void FaceFauxCrease(MeshType &m,float AngleRad)
|
||||
{
|
||||
RequirePerFaceFlags(m);
|
||||
RequireFFAdjacency(m);
|
||||
RequirePerFaceNormal(m);
|
||||
|
||||
typename MeshType::FaceIterator f;
|
||||
|
||||
|
|
Loading…
Reference in New Issue