The function make_surface_mesh is a surface mesh generator, that is a function to build a two dimensional mesh approximating a surface.
The library provides two overloaded version of this function:
The template parameter Surface stands for the surface type. This type has to be a model of the concept Surface_3.
The knowledge on the surface, required by the surface mesh generator is encapsulated in a traits class. Actually, the mesh generator accesses the surface to be meshed through this traits class only. The traits class is required to be a model of the concept SurfaceMeshTraits_3.
In the first version of make_surface_mesh the surface type is a template parameter Surface and the surface mesh generator traits type is automatically generated form the surface type through the class Surface_mesh_traits_generator_3<Surface>.
The difference between the two overloaded versions of make_surface_mesh can be explained as follows
The first overloaded version can be used whenever the surface type either provides a nested type Surface::Surface_mesher_traits_3 that is a model of SurfaceMeshTraits_3 or is a surface type for which a specialization of the traits generator Surface_mesh_traits_generator_3<Surface> is provided. Currently, the library provides partial specializations of Surface_mesher_traits_generator_3<Surface> for implicit surfaces (Implicit_surface_3<Traits, Function>) and gray level images (Gray_level_image_3<FT, Point>).
The template parameter Criteria has to be a model of the concept SurfaceMeshCriteria_3. The argument of type Criteria passed to the surface mesh generator specifies the size and shape requirements on the output surface mesh.
The template parameter Tag
is a tag whose type affects the behavior of the
meshing algorithm. The function make_surface_mesh has specialized versions
for the following tag types:
- Manifold_tag: the output mesh is guaranteed to be a manifold surface without boundary.
- Manifold_with_boundary_tag: the output mesh is guaranteed to be manifold but may have boundaries.
- Non_manifold_tag: the algorithm relies on the given criteria and guarantees nothing else.
The Delaunay refinement process is started with an initial set of points which is the union of two sets: the set of vertices in the initial triangulation pointed to by the c2t3 argument and a set of points provided by the traits class. The optional parameter initial_number_of_points allows to monitor the number of points in this second set. (This parameter is passed to the operator() of the constructor object Construct_initial_points in the traits class.) The meshing algorithm requires that the initial set of points includes at least one point on each connected components of the surface to be meshed. one.