\chapter{Surface mesher}
\ccChapterAuthor{Andreas Fabri, Steve Oudot, David Rey, Laurent Rineau
and Mariette Yvinec}


The surface mesher package offers a global function
to build a triangular mesh approximating a surface.

The surface is described through an oracle  that mainly can tell whether a
given segment, ray or line  intersects the surface or not, 
and that can compute the
intersections point if any. Several implementations of
the oracle are provided. They allow to mesh
implicit surfaces as well as  surfaces described as a gray level in a three
dimensional image.

The output mesh conforms to some size and shape criteria 
which are customizable. The criteria are passed to the mesher
through a parameter 
whose type is a model of the
concept \ccc{SurfaceMeshCriteria}.

The meshing algorithm is a Delaunay refinement process
which is mainly guided by the criteria. 
The output mesh may offer some guarantees, as being manifold,
homeomorphic to the surface or within a given
Hausdorff distance.  However, these guarantees depend 
on the quality of the input surface (smoothness, with or without
boundary, manifold or  not),
the type and values of the given criteria. 
The behavior of the refinement process can also be influenced through
a tag, which allows for instance to enforce the manifold property
of  the output mesh  while avoiding an over-refinement of the mesh.


\subsection*{Concepts}

\ccRefConceptPage{SurfaceMeshComplex_2InTriangulation_3}\\
\ccRefConceptPage{SurfaceMeshTraits_3} \\
\ccRefConceptPage{SurfaceMeshCriteria} \\
\ccRefConceptPage{SurfaceMeshCellBase_3} \\
\ccRefConceptPage{SurfaceMeshVertexBase_3} \\
\ccRefConceptPage{ImplicitFunction} \\
\ccRefConceptPage{ImplicitSurfaceTraits_3}	


\subsection*{Classes}
\ccRefIdfierPage{CGAL::Surface_mesh_complex_2_in_triangulation_3<Tr>} \\
\ccRefIdfierPage{CGAL::Surface_mesh_vertex_base_3<Gt,Vb>} \\
\ccRefIdfierPage{CGAL::Surface_mesh_cell_base_3<Gt,Cb>} \\
\ccRefIdfierPage{CGAL::Surface_mesh_default_criteria<FT>} \\
\ccRefIdfierPage{CGAL::Surface_mesh_traits_generator_3<Surface>} \\
\ccRefIdfierPage{CGAL::Implicit_surface_3<Traits,Func>} \\
\ccRefIdfierPage{CGAL::Gray_level_image_3<Traits>}

\subsection*{Tag classes}
\ccRefIdfierPage{CGAL::Manifold_tag} \\
\ccRefIdfierPage{CGAL::Manifold_with_boundary_tag} \\
\ccRefIdfierPage{CGAL::Non_manifold_tag} \\


\subsection*{Global Functions}
\ccRefIdfierPage{CGAL::make_surface_mesh}


%\subsection*{Enums}

\lcHtml{\subsection*{Links to the Reference Sections}}
