The classes CGAL::HalfedgeDS_items_decorator<HDS>, CGAL::HalfedgeDS_decorator<HDS>, and CGAL::HalfedgeDS_const_decorator<HDS> provide additional functions to examine and to modify a halfedge data structure HDS. The class CGAL::HalfedgeDS_items_decorator<HDS> provides additional functions for vertices, halfedges, and faces of a halfedge data structure without knowing the containing halfedge data structure. The class CGAL::HalfedgeDS_decorator<HDS> stores a reference to the halfedge data structure and provides functions that modify the halfedge data structure, for example Euler-operators. The class CGAL::HalfedgeDS_const_decorator<HDS> stores a const reference to the halfedge data structure. It contains non-modifying functions, for example the test for validness of the data structure.
All these additional functions take care of the different capabilities a halfedge data structure may have or may not have. The functions evaluate the type tags of the halfedge data structure to decide on the actions. If a particular feature is not supported nothing is done. Note that for example the creation of new halfedges is mandatory for all halfedge data structures and will not appear here again.
#include <CGAL/HalfedgeDS_const_decorator.h>
CGAL::HalfedgeDS_items_decorator<HDS>
| |
keeps internally a const reference to hds.
|
A halfedge data structure has no definition of validness of its own, but a useful set of tests is defined with the following levels:
|
| |
returns true if the halfedge data structure hds is valid with respect to the level value as defined above. If verbose is true, statistics are written to cerr. | ||
|
| |
returns true if the border halfedges are in normalized representation, which is when enumerating all halfedges with the halfedge iterator the following holds: The non-border edges precede the border edges. For border edges, the second halfedge is a border halfedge. (The first halfedge may or may not be a border halfedge.) The halfedge iterator border_halfedges_begin() denotes the first border edge. If verbose is true, statistics are written to cerr. |
CGAL::HalfedgeDS_items_decorator<HDS>
CGAL::HalfedgeDS_decorator<HDS>
The following program fragment illustrates the implementation of a is_valid() member function for a simplified polyhedron class. We assume here that the level three check is the appropriate default for polyhedral surfaces.
namespace CGAL { template <class Traits> class Polyhedron { typedef HalfedgeDS_default<Traits> HDS; HDS hds; public: // ... bool is_valid( bool verb = false, int level = 0) const { Verbose_ostream verr(verb); verr << "begin Polyhedron::is_valid( verb=true, level = " << level << "):" << std::endl; HalfedgeDS_const_decorator<HDS> decorator(hds); bool valid = decorator.is_valid( verb, level + 3); // further checks ... } }; }