added FaceFauxCrease and other small helper for managing faux edges
This commit is contained in:
parent
d55a1069de
commit
b4857331f6
|
|
@ -157,7 +157,7 @@ static void VertexSet(MeshType &m, unsigned int FlagMask)
|
||||||
static void FaceSet(MeshType &m, unsigned int FlagMask)
|
static void FaceSet(MeshType &m, unsigned int FlagMask)
|
||||||
{
|
{
|
||||||
FaceIterator fi;
|
FaceIterator fi;
|
||||||
for(fi=m.vert.begin(); fi!=m.vert.end(); ++fi)
|
for(fi=m.face.begin(); fi!=m.face.end(); ++fi)
|
||||||
if(!(*fi).IsD()) (*fi).Flags() |= FlagMask ;
|
if(!(*fi).IsD()) (*fi).Flags() |= FlagMask ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -167,11 +167,13 @@ static void VertexClearV(MeshType &m) { VertexClear(m,VertexType::VISITED);}
|
||||||
static void VertexClearB(MeshType &m) { VertexClear(m,VertexType::BORDER);}
|
static void VertexClearB(MeshType &m) { VertexClear(m,VertexType::BORDER);}
|
||||||
static void FaceClearV(MeshType &m) { FaceClear(m,FaceType::VISITED);}
|
static void FaceClearV(MeshType &m) { FaceClear(m,FaceType::VISITED);}
|
||||||
static void FaceClearB(MeshType &m) { FaceClear(m,FaceType::BORDER012);}
|
static void FaceClearB(MeshType &m) { FaceClear(m,FaceType::BORDER012);}
|
||||||
|
static void FaceClearF(MeshType &m) { FaceClear(m,FaceType::FAUX012);}
|
||||||
|
|
||||||
static void VertexSetV(MeshType &m) { VertexSet(m,VertexType::VISITED);}
|
static void VertexSetV(MeshType &m) { VertexSet(m,VertexType::VISITED);}
|
||||||
static void VertexSetB(MeshType &m) { VertexSet(m,VertexType::BORDER);}
|
static void VertexSetB(MeshType &m) { VertexSet(m,VertexType::BORDER);}
|
||||||
static void FaceSetV(MeshType &m) { FaceSet(m,FaceType::VISITED);}
|
static void FaceSetV(MeshType &m) { FaceSet(m,FaceType::VISITED);}
|
||||||
static void FaceSetB(MeshType &m) { FaceSet(m,FaceType::BORDER);}
|
static void FaceSetB(MeshType &m) { FaceSet(m,FaceType::BORDER);}
|
||||||
|
static void FaceSetF(MeshType &m) { FaceSet(m,FaceType::FAUX012);}
|
||||||
|
|
||||||
/// \brief Compute the border flags for the faces using the Face-Face Topology.
|
/// \brief Compute the border flags for the faces using the Face-Face Topology.
|
||||||
|
|
||||||
|
|
@ -415,7 +417,32 @@ static void VertexBorderFromFace(MeshType &m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
static void FaceFauxCrease(MeshType &m,float AngleRad)
|
||||||
|
{
|
||||||
|
assert(HasPerFaceFlags(m));
|
||||||
|
assert(HasFFAdjacency(m));
|
||||||
|
|
||||||
|
typename MeshType::FaceIterator f;
|
||||||
|
|
||||||
|
//initially everything is faux (e.g all internal)
|
||||||
|
FaceSetF(m);
|
||||||
|
for(f=m.face.begin();f!=m.face.end();++f)
|
||||||
|
{
|
||||||
|
if(!(*f).IsD())
|
||||||
|
{
|
||||||
|
for(int z=0;z<(*f).VN();++z)
|
||||||
|
{
|
||||||
|
if( face::IsBorder(*f,z) ) (*f).ClearF(z);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(Angle((*f).N(), (*f).FFp(z)->N()) > AngleRad)
|
||||||
|
(*f).ClearF(z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}; // end class
|
}; // end class
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue