PolyhedronItems_3

Definition

The PolyhedronItems_3 concept extends the HalfedgeDSItems concept on page reference. In addition to the requirements stated there, a model for this concept must fulfill the following requirements for the local PolyhedronItems_3::Vertex_wrapper<Refs,Traits>::Vertex type and PolyhedronItems_3::Face_wrapper<Refs,Traits>::Face type in order to support the point for vertices and the optional plane equation for facets. Note that the items class uses face instead of facet. Only the polyhedral surface renames faces to facets.

Refines

HalfedgeDSItems

Types in PolyhedronItems_3::Vertex_wrapper<Refs,Traits>::Vertex

Vertex::Point
point type stored in vertices. A HalfedgeDS has no dimension, so this type is named Point and not Point_3.


Vertex::Supports_vertex_point
CGAL::Tag_true. A point is always required.

Operations

Point& v.point ()
const Point& v.point () const point.

Types in PolyhedronItems_3::Face_wrapper<Refs,Traits>::Face

Types for (optionally) associated geometry in faces. If it is not supported the respective type has to be defined, although it can be an arbitrary dummy type, such as void* or Tag_false.

Face::Plane
plane type stored in faces. A HalfedgeDS has no dimension, so this type is named Plane and not Plane_3.


Face::Supports_face_plane
either CGAL::Tag_true or CGAL::Tag_false.

Operations required if Supports_face_plane CGAL::Tag_true

Plane& f.plane ()
const Plane& f.plane () const plane equation.

Has Models

CGAL::Polyhedron_items_3
CGAL::Polyhedron_min_items_3

See Also

CGAL::Polyhedron_3<Traits>
HalfedgeDSItems
CGAL::HalfedgeDS_items_2
CGAL::HalfedgeDS_vertex_base<Refs>
CGAL::HalfedgeDS_halfedge_base<Refs>
CGAL::HalfedgeDS_face_base<Refs>

Example

We define our own items class based on the available CGAL::HalfedgeDS_face_base base class for faces. We derive the the Halfedge_wrapper without further modifications from the CGAL::HalfedgeDS_items_2, replace the Face_wrapper definition with our new definition, and also replace the Vertex_wrapper with a definition that uses Point_3 instead of Point_2 as point type. The result is a model for the PolyhedronItems_3 concept similar to the available CGAL::Polyhedron_items_3 class. See also there for another illustrative example.

#include <CGAL/HalfedgeDS_bases.h>

struct My_items : public CGAL::HalfedgeDS_items_2 {
    template < class Refs, class Traits>
    struct Vertex_wrapper {
        typedef typename Traits::Point_3 Point;
        typedef CGAL::HalfedgeDS_vertex_base< Refs, CGAL::Tag_true, Point> Vertex;
    };
    template < class Refs, class Traits>
    struct Face_wrapper {
        typedef typename Traits::Plane_3 Plane;
        typedef CGAL::HalfedgeDS_face_base< Refs, CGAL::Tag_true, Plane>   Face;
    };
};