% +------------------------------------------------------------------------+ % | Reference manual page: PolyhedronItems_3.tex % +------------------------------------------------------------------------+ % | 17.03.1999 Lutz Kettner % | Package: Polyhedron % | \RCSdef{\RCSPolyhedronItemsRev}{$Id$} \RCSdefDate{\RCSPolyhedronItemsDate}{$Date$} % +------------------------------------------------------------------------+ \ccRefPageBegin %%RefPage: end of header, begin of main body % +------------------------------------------------------------------------+ \begin{ccRefConcept}{PolyhedronItems_3} \ccDefinition The \ccRefName\ concept extends the \ccc{HalfedgeDSItems} concept on page~\pageref{pageHalfedgeDSitemsRef}. In addition to the requirements stated there, a model for this concept must fulfill the following requirements for the local \ccc{PolyhedronItems_3::Vertex_wrapper::Vertex} type and \ccc{PolyhedronItems_3::Face_wrapper::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. \ccRefines \ccRefIdfierPage{HalfedgeDSItems} \begin{ccClass}{Vertex} \ccCreationVariable{v} \ccHeading{% Types in \ccc{PolyhedronItems_3::Vertex_wrapper::Vertex}} \ccNestedType{Point}{point type stored in vertices. A \ccc{HalfedgeDS} has no dimension, so this type is named \ccc{Point} and not \ccc{Point_3}.} \ccNestedType{Supports_vertex_point}{$\equiv$ \ccc{CGAL::Tag_true}. A point is always required.} \ccTagFullDeclarations \ccOperations \ccMethod{Point& point();}{} \ccGlue \ccMethod{const Point& point() const;}{point.} \ccTagDefaults \end{ccClass} \begin{ccClass}{Face} \ccCreationVariable{f} \ccHeading{Types in \ccc{PolyhedronItems_3::Face_wrapper::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 \ccc{void*} or \ccc{Tag_false}. %\ccNestedType{Normal}{surface normal vector stored in faces.} %\ccGlue \ccNestedType{Plane}{plane type stored in faces. A \ccc{HalfedgeDS} has no dimension, so this type is named \ccc{Plane} and not \ccc{Plane_3}.} \ccNestedType{Supports_face_plane}{either \ccc{CGAL::Tag_true} or \ccc{CGAL::Tag_false}.} %\ccGlue %\ccNestedType{Supports_face_normal}{\~{}} \ccTagFullDeclarations \ccHeading{Operations required if \ccc{Supports_face_plane} $\equiv$ \ccc{CGAL::Tag_true}} %Note, this implies \ccc{Supports_face_normal} $\equiv$ %\ccc{CGAL::Tag_true}, but the return type of the \ccc{normal()} member %function will not be by reference. \ccMethod{Plane& plane();}{} \ccGlue \ccMethod{const Plane& plane() const;}{plane equation.} %\ccGlue %\ccMethod{Normal normal() const;}{normal vector.} %\ccHeading{Operations required if \ccc{Supports_face_normal} $\equiv$ % \ccc{CGAL::Tag_true}} % %\ccMethod{Normal& normal();}{} %\ccGlue %\ccMethod{const Normal& normal() const;}{normal vector.} \ccTagDefaults \end{ccClass} \ccHasModels \ccRefIdfierPage{CGAL::Polyhedron_items_3}\\ \ccRefIdfierPage{CGAL::Polyhedron_min_items_3} \ccSeeAlso \ccRefIdfierPage{CGAL::Polyhedron_3}\\ \ccRefConceptPage{HalfedgeDSItems}\\ \ccRefIdfierPage{CGAL::HalfedgeDS_items_2}\\ \ccRefIdfierPage{CGAL::HalfedgeDS_vertex_base}\\ \ccRefIdfierPage{CGAL::HalfedgeDS_halfedge_base}\\ \ccRefIdfierPage{CGAL::HalfedgeDS_face_base} \ccExample We define our own items class based on the available \ccc{CGAL::HalfedgeDS_face_base} base class for faces. We derive the the \ccc{Halfedge_wrapper} without further modifications from the \ccc{CGAL::HalfedgeDS_items_2}, replace the \ccc{Face_wrapper} definition with our new definition, and also replace the \ccc{Vertex_wrapper} with a definition that uses \ccc{Point_3} instead of \ccc{Point_2} as point type. The result is a model for the \ccc{PolyhedronItems_3} concept similar to the available \ccc{CGAL::Polyhedron_items_3} class. See also there for another illustrative example. \begin{ccExampleCode} #include 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; }; }; \end{ccExampleCode} \end{ccRefConcept} % +------------------------------------------------------------------------+ %%RefPage: end of main body, begin of footer \ccRefPageEnd % EOF % +------------------------------------------------------------------------+