TODO: to be written by lutz (probably a short extracts from lutz's papers) A polyhedron consists of \emph{topology primitives}, such as vertices and facets, and \emph{geometry attributes}, such as point positions and normals. In graphics modeling, rendering attributes, such as colors and texture coordinates, or algorithmic attributes are also part of a polyhedron mesh. \cgalpoly\ relies on the halfedge data structure \cite{hds} to provide the connectivity of topology primitives of the represented polyhedron mesh. The connectivity describes the incidences between primitives. \poly\ supports generic attributes by the templated primitives in the concept of the polyhedron items. % ------------------------------------------------------------------------ A \cgalpoly\ represents polyhedron surfaces in three dimensions consisting of vertices, edges, facets and incidence relations among them. The \emph{incidence relation} (or connectivity) of the \poly\ is internally represented by the \cgalhds. The \poly\ only maintains the combinatorial integrity of the polyhedral surface. The geometry primitives are the abstract entities. A \poly\ is specialized by the template parameters of the kernel and primitives. TODO: design of the polyhedron (polyhedron(hds(kernel))) TODO: a specialized polyhedron demos the power and flexibility. % ------------------------------------------------------------------------ TODO:modifications on a polyhedron that maintain the topology invariance: known invariant ops (euler ops) and postcondition of the modifier. Unlike fundamental data structures in STL, polyhedron needs to support two sets of the entity operations: connectivity operations and geometry (including general attributes) operations. Similar to entities in a vector or list, the geometry access is abstracted into the concepts of the iterator and circulator. But connectivity modifications need special object functions to ensure the topology integrity. TODO: what kind of ops are needed to support different geometry algorithms? \cgalpoly\ provides a set of operators for combinatorial modifications that maintain the combinatorial integrity of the polyhedron mesh. Most of them are categorized as Euler operations that assure the Euler-Poincar\'e equality. These atomic operators can split/join of two facets, two vertices or two loops. They can also create/erase a center vertex or a facet. In addition to these modification operators, the \polybuilder\ warrants the direct accesses and modifications of the internal representation, i.e. the halfedge data structure, of the \poly\ in a controlled environment. In CGAL, the controlled environment is defined by a callback mechanism that manages the interaction between the polyhedron and a modifier. A modifier is a function object allowed accesses of the internal representation when it is delegated by the polyhedron. A \polybuilder\ is then created to build the connectivity of the halfedge data structure. The combinatorial integrity of the polyhedron is verified after the return of the modifier. The \polybuilder\ and the modifier are particularly useful for implementing file reader for common file formats. TODO: why support modifier in addition to euler ops? euler ops are more generic and \emph{standard} than modifier. If the connectivity operation is fully implemented with only these \emph{standard} ops, the data structure can be general from the connectivity operation. pierre: modifier can also authorize transient states where the mesh is not manifold, the integrity being check once the builder is done.