CGAL 6.0.2 - 3D Surface Mesh Generation

Loading...
Searching...
No Matches
List of all members
SurfaceMeshComplex_2InTriangulation_3 Concept Reference
3D Surface Mesh Generation Reference » Concepts

## Definition

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:

- any subface of a face in \( C\) is a face of \( C\)
- two faces of \( C\) are disjoint or share a common subface

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()`.

Has models
  `CGAL::Surface_mesh_complex_2_in_triangulation_3<Tr>`

See also
  `CGAL::make_surface_mesh()`

## Types
`SurfaceMeshComplex_2InTriangulation_3` provides the following 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.
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
/**
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`.

## 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`.
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`.
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`.

## Member Typedef Documentation

## ◆ Triangulation

typedef unspecified_type SurfaceMeshComplex_2InTriangulation_3::Triangulation

The type of the embedding 3D triangulation.

Must be a model of `SurfaceMeshTriangulation_3`.

## Member Enumeration Documentation

## ◆ Face_status

enum SurfaceMeshComplex_2InTriangulation_3::Face_status

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 |

## Member Function Documentation

## ◆ incident_facets()

template<class OutputIterator >

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.

Precondition
  `c2t3.triangulation().dimension() == 3`, `v != Vertex_handle()`, `c2t3.triangulation().is_vertex(v)`.

## ◆ is_regular_or_boundary_for_vertices()

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`.

Precondition
  All the edges of the complex incident to `v` are `REGULAR` or `BOUNDARY`.

## ◆ neighbor() [1/2]

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.

## ◆ neighbor() [2/2]

Facet SurfaceMeshComplex_2InTriangulation_3::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`.

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()`.