CGAL  3D Surface Mesh Generation

The concept SurfaceMeshComplex_2InTriangulation_3
describes a data structure designed to represent a two dimensional pure complex embedded in a three dimensional triangulation.
A complex is a set \( C\) of faces such that:
The complex is two dimensional, if its faces have dimension at most two. It is pure if any face in the complex is a subface of some face of maximal dimension. Thus, a two dimensional pure complex is a set of facets together with their edges and vertices. A two dimensional pure complex embedded in a three dimensional triangulation is a subset of the facets of this triangulation, together with their edges and vertices.
The concept SurfaceMeshComplex_2InTriangulation_3
is particularly suited to handle surface meshes obtained as the restriction to a surface of a three dimensional Delaunay triangulation. A model of this concept is a type to be plugged as first template parameter in the function template CGAL::make_surface_mesh()
.
CGAL::make_surface_mesh()
Types  
 
enum  Face_status { NOT_IN_COMPLEX, BOUNDARY, REGULAR, SINGULAR } 
A type to describe the status of a face (facet, edge, or vertex) with respect to the 2D pure complex. More...  
typedef unspecified_type  Triangulation 
The type of the embedding 3D triangulation. More...  
typedef Triangulation::Vertex_handle  Vertex_handle 
The type of the embedding triangulation vertex handles.  
typedef Triangulation::Cell_handle  Cell_handle 
The type of the embedding triangulation cell handles.  
typedef Triangulation::Facet  Facet 
The type of the embedding triangulation facets.  
typedef Triangulation::Edge  Edge 
The type of the embedding triangulation edges.  
typedef Triangulation::size_type  size_type 
Size type (an unsigned integral type)  
typedef unspecified_type  Facet_iterator 
An iterator type to visit the facets of the 2D complex.  
typedef unspecified_type  Edge_iterator 
An iterator type to visit the edges of the 2D complex.  
typedef unspecified_type  Vertex_iterator 
An iterator type to visit vertices of the 2D complex.  
typedef unspecified_type  Boundary_edges_iterator 
An iterator type to visit the boundary edges of the 2D complex.  
Creation  
SurfaceMeshComplex_2InTriangulation_3 (Triangulation &t3)  
Builds an empty 2D complex embedded in the triangulation t3  
Member access  
Builds a 2D complex embedded in the triangulation The type  
Triangulation &  triangulation () 
Returns the reference to the triangulation.  
Modifications  
void  add_to_complex (Facet f) 
Adds facet f to the 2D complex.  
void  add_to_complex (Cell_handle c, int i) 
Adds facet (c,i) to the 2D complex.  
void  remove_from_complex (Facet f) 
Removes facet f from the 2D complex.  
void  remove_from_complex (Cell_handle c, int i) 
Removes facet (c,i) from the 2D complex.  
Queries  
Queries on the status of individual face with respect to the 2D complex.  
size_type  number_of_facets () const 
Returns the number of facets that belong to the 2D complex.  
Face_status  face_status (Facet f) 
Returns the status of the facet f with respect to the 2D complex.  
Face_status  face_status (Cell_handle c, int i) 
Returns the status of the facet (c,i) with respect to the 2D complex.  
Face_status  face_status (Edge e) 
Returns the status of edge e in the 2D complex.  
Face_status  face_status (Cell_handle c, int i, int j) 
Returns the status of edge (c,i,j) in the 2D complex.  
Face_status  face_status (Vertex_handle v) 
Returns the status of vertex v in the 2D complex.  
bool  is_in_complex (Facet f) 
Returns true , if the facet f belongs to the 2D complex.  
bool  is_in_complex (Cell_handle c, int i) 
Returns true , if the facet (c,i) belongs to the 2D complex.  
bool  is_in_complex (Edge e) 
Returns true , if the edge e belongs to the 2D complex.  
bool  is_in_complex (Cell_handle c, int i, int j) 
Returns true , if the edge (c,i,j) belongs to the 2D complex.  
bool  is_in_complex (Vertex_handle v) 
Returns true , if the vertex v belongs to the 2D complex.  
bool  is_regular_or_boundary_for_vertices (Vertex_handle v) 
Returns true if the status of vertex v is REGULAR or BOUNDARY . More...  
Traversal of the complex  
The data structure provides iterators to visit the facets, edges and vertices of the complex. All those iterators are bidirectional and non mutable.  
Facet_iterator  facets_begin () 
Returns an iterator with value type Facet to visit the facets of the 2D complex.  
Facet_iterator  facets_end () 
Returns the past the end iterator for the above iterator.  
Edge_iterator  edges_begin () 
Returns an iterator with value type Edge to visit the edges of the 2D complex which are not isolated.  
Edge_iterator  edges_end () 
Returns the past the end iterator for the above iterator.  
Boundary_edges_iterator  boundary_edges_begin () 
Returns an iterator with value type Edge to visit the boundary edges of the complex.  
Boundary_edges_iterator  boundary_edges_end () 
Returns the past the end iterator for the above iterator.  
Vertex_iterator  vertices_begin () 
Returns an iterator with value type Vertex_handle to visit the vertices of the 2D complex.  
Vertex_iterator  vertices_end () 
Returns the past the end iterator for the above iterator.  
template<class OutputIterator >  
OutputIterator  incident_facets (Vertex_handle v, OutputIterator facets) 
Copies the facets of the complex incident to v to the output iterator facets . More...  
The following function is the basic function to walk on the 2D complex  
Facet  neighbor (Facet f, int j) 
Returns the facet of the complex which is the neighbor of the facet f opposite to the vertex with index j of f . More...  
Facet  neighbor (Cell_handle c, int i, int j) 
Returns the facet of the complex which is the neighbor of the facet f opposite to the vertex with index j of f . More...  
The type of the embedding 3D triangulation.
Must be a model of SurfaceMeshTriangulation_3
.
A type to describe the status of a face (facet, edge, or vertex) with respect to the 2D pure complex.
A NOT_IN_COMPLEX
face does not belong to the 2D complex. Facets can only be NOT_IN_COMPLEX
or REGULAR
depending on whether they belong to the 2D complex on not. Edges and vertices can be NOT_IN_COMPLEX
, BOUNDARY
, REGULAR
or SINGULAR
. An edge in the complex is BOUNDARY
, REGULAR
, or SINGULAR
, if it is incident to respectively 1, 2, or 3 or more facets in the complex. The status of a vertex is determined by the adjacency graph of the facets of the 2D complex incident to that vertex. The vertex of the 2D complex is BOUNDARY
, if this adjacency graph is a simple path, it is REGULAR
, if the adjacency graph is cyclic, and SINGULAR
in any other case.
Enumerator  

NOT_IN_COMPLEX  
BOUNDARY  
REGULAR  
SINGULAR 
OutputIterator SurfaceMeshComplex_2InTriangulation_3::incident_facets  (  Vertex_handle  v, 
OutputIterator  facets  
) 
Copies the facets of the complex incident to v
to the output iterator facets
.
Returns the resulting output iterator.
c2t3.triangulation().dimension() == 3
, v != Vertex_handle()
, c2t3.triangulation().is_vertex(v)
. bool SurfaceMeshComplex_2InTriangulation_3::is_regular_or_boundary_for_vertices  (  Vertex_handle  v) 
Returns true if the status of vertex v
is REGULAR
or BOUNDARY
.
v
are REGULAR
or BOUNDARY
. Returns the facet of the complex which is the neighbor of the facet f
opposite to the vertex with index j
of f
.
The vertices of the facet f = (cell c, i)
are numbered (0,1,2) (according to the vertex_triple_index(i,j)
member function of Triangulation_3
) in such a way that facet f
is oriented by the outward normal of tetraedra c
. If there is no such neighbor, or if the edge is singular the functions returns Facet()
.
Facet SurfaceMeshComplex_2InTriangulation_3::neighbor  (  Cell_handle  c, 
int  i,  
int  j  
) 
Returns the facet of the complex which is the neighbor of the facet f
opposite to the vertex with index j
of f
.
See above.