CGAL 6.1 - 3D Constrained Triangulations
|
This package implements the construction of a 3D conforming Delaunay triangulation, constrained to a set of faces of a surface polygon mesh.
For any Piecewise Linear Complex (PLC) in 3D, the algorithm builds a Delaunay triangulation conforming to this PLC. The constrained triangulation does not always exist, and it may be necessary to add Steiner points to the PLC to make it triangulable.
The problem is described by Cohen-Steiner et al [2], and by Si [7].
In this section, we define the main concepts that have to be understood to use this package.
A Piecewise Linear Complex
is the 3-dimensional generalization of a polyhedron.
A PLC is built from simple geometric elements, called simplices
that are topologically connected together in a structured way. Simplices
(vertices, edges, and facets) are the basic elements forming the complex. Their geometric counterparts are points, segments, polygons, respectively. The polygons can be non-convex, have holes, and as many boundary segments as needed. Each simplex is embedded into the geometric space via the points coordinates.
The simplices must satisfy the following conditions :
The goal of the algorithms developed in this package is to compute a Delaunay mesh containing a given set of polygonal constraints in 3D as sub-complex. See package 3D Triangulations for more details on Delaunay triangulations.
A triangulation is a Delaunay triangulation
if the circumscribing sphere of any cell of the triangulation contains no vertex in its interior. A constrained Delaunay triangulation
is a constrained triangulation which is as much Delaunay as possible, given that some facets are marked as constrained
. The circumscribing sphere of any cell contains in its interior no data point which is on the same side of the constrained facet as the cell.
In 3D, constrained triangulations do not always exist. It can be shown using the example of the Schönhardt polyhedra [4], [1], that requires the addition of Steiner points to be triangulable.
Shewchuk [5] showed that for any PLC, there exists another PLC that is a refined version of the original one, that admits a constrained Delaunay triangulation. The refined PLC is obtained by adding Steiner points on the input edges and facets, and the constrained triangulation built on this PLC is called a conforming Delaunay triangulation
.
The algorithm implemented in this package is based on the work of Hang Si [6], [3]. Steiner points are added on input edges and input facets of the PLC to make it triangulable.
This package provides one main class Conforming_constrained_Delaunay_triangulation_3
that represents a 3D conforming Delaunay triangulation. The class is templated by the geometric traits class and the underlying triangulation class. The other classes that are provided are secondary classes that define the vertex and cell types and metadata that constitute the triangulation.
Some helper constructor functions, like make_conforming_constrained_Delaunay_triangulation_3()
, are provided to create a Conforming_constrained_Delaunay_triangulation_3
object.
The following example shows how to use the helper constructor function make_conforming_constrained_Delaunay_triangulation_3()
to create a conforming constrained Delaunay triangulation from a given PLC.
File Constrained_triangulation_3/conforming_constrained_Delaunay_triangulation_3.cpp
It is also possible to create a conforming constrained Delaunay triangulation from a polygon soup, i.e., a set of polygons for which the connectivity is not known a priori. This example shows an example of building such a triangulation.
File Constrained_triangulation_3/conforming_constrained_Delaunay_triangulation_3_from_soup.cpp
Once the triangulation is built, it is possible to remesh it using the CGAL::tetrahedral_isotropic_remeshing()
function from the Tetrahedral Remeshing package, to improve the quality of the mesh or adapt it to a given sizing field.
The following example shows how to remesh a conforming constrained Delaunay triangulation.
File Constrained_triangulation_3/remesh_constrained_Delaunay_triangulation_3.cpp