vcglib/docs/Doxygen/flags.dxy

57 lines
2.3 KiB
Plaintext

/** \page flags Bit Flags
For each simplex of the mesh we have a component called \c BitFlags that store a fixed size vector of 32 bits that are used for a variety of needs.
Related classes to manage these flags: <br>
- \ref vcg::tri::UpdateFlags (defined in flag.h)
- \ref vcg::tri::UpdateSelection (defined in selection.h)
Delete Bit
----------
\code
IsD(),
ClearD(); // deprecated
SetD() // deprecated
\endcode
This bit flag is the most used one; see \ref allocation page for more detail on its use.
\warning you should \b never directly nvoke \c SetD() or \c ClearD(), but you should use the function described in the vcg::tri::Allocator.
Border Bit
----------
\code
IsB(),
ClearB(),
SetB()
\endcode
To store the fact that a vertex or a face is on the boundary. These bits are not computed by default.
They can be computed with or without the topology (obviously if you FF topology the computation of these bit is faster). <br>
The rationale of these bits is that there are a lot of algorithms that need only boundary information for correctly working
so computing it once is sufficient without needing to burden everything with the whole FF topology structure.
Selection bit
-------------
IsS(), ClearS(), SetS()
Visiting bit
------------
IsV(), ClearV(), SetV() Useful bit for any algorithm. You should not rely on the state of this bit or store anything persistent here. Any algorithm can clear it and use it for its own local purposes. use tri::UpdateFlags<YourMeshClass>::VertexClearV(yourMesh) to clear all bits.
User bits
---------
If you want to allocate some private bits among the one stored with your mesh elements you can do it by mean of the NewBitFlag() function that returns a mask that can be used for setting, clearing and testing elements against that particular bit. The following example allocate three new bits for each face and clear them.
int e0bit = MyFace::NewBitFlag();
int e1bit = MyFace::NewBitFlag();
int e2bit = MyFace::NewBitFlag();
int ebit[3] = {e0bit,e1bit,e2bit};
for(MyMesh::FaceIterator fi=m.face.begin();fi!=m.face.end();++fi)
for(int i=0;i<3;++i)
(*fi).ClearUserBit(ebit[i]);
The task of clearing a given bit of all the faces (vertexes) of a mesh can be done with
tri::UpdateFlags<YourMeshClass>::FaceClear(yourMesh,e0bit|e1bit|e2bit);
to clear all bits.
*/