CGAL 6.1.1 - 3D Periodic Triangulations

Loading...
Searching...
No Matches
List of all members | Related Functions
CGAL::Periodic_3_triangulation_3< Traits, TDS > Class Template Reference
Reference Manual » Main Classes

`#include <CGAL/Periodic_3_triangulation_3.h>`

## Definition

template<typename Traits, typename TDS>
class CGAL::Periodic_3_triangulation_3< Traits, TDS >

The class `Periodic_3_triangulation_3` represents a 3-dimensional triangulation of a point set in \( \mathbb T_c^3\).

Template Parameters

  Traits | must be a model of the concept `Periodic_3TriangulationTraits_3`.
  TDS | must be a model of the concept `TriangulationDataStructure_3` with vertex and cell are models of `Periodic_3TriangulationDSVertexBase_3` and `Periodic_3TriangulationDSCellBase_3`, Its default value is: CGAL::Triangulation_data_structure_3< CGAL::Triangulation_vertex_base_3<PT,Periodic_3_triangulation_ds_vertex_base_3<> >, CGAL::Triangulation_cell_base_3<PT,Periodic_3_triangulation_ds_cell_base_3<> > > CGAL::Triangulation_cell_base_3 CGAL::Triangulation_data_structure_3 CGAL::Triangulation_vertex_base_3

See also
  `CGAL::Periodic_3_Delaunay_triangulation_3<Traits, TDS>`
  `CGAL::Periodic_3_regular_triangulation_3<Traits, TDS>`

## Related Functions
(Note that these are not member functions.)
istream & | operator>> (istream &is, Periodic_3_triangulation_3 &t)
| Reads a triangulation from `is` and stores it in `t`.
ostream & | operator<< (ostream &os, const Periodic_3_triangulation_3 &t)
| Writes the triangulation `t` into `os`.

## Enums
enum | Locate_type { VERTEX =0 , EDGE , FACET , CELL , EMPTY }
| The enum `Locate_type` is defined by `Periodic_3_triangulation_3` to specify which case occurs when locating a point in the triangulation. More...
enum | Iterator_type { STORED =0 , UNIQUE , STORED_COVER_DOMAIN , UNIQUE_COVER_DOMAIN }
| The enum `Iterator_type` is defined by `Periodic_3_triangulation_3` to specify the behavior of geometric iterators. More...

## Types
typedef Traits | Geom_traits
typedef TDS | Triangulation_data_structure
typedef Geom_traits::Periodic_3_offset_3 | Offset
typedef Geom_traits::Iso_cuboid_3 | Iso_cuboid
| A type representing an axis-aligned cuboid.
typedef array< int, 3 > | Covering_sheets
| Integer triple to store the number of sheets in each direction of space.
typedef TDS::Vertex::Point | Point
| The point type of the triangulation.
typedef Geom_traits::Point_3 | Point_3
| The geometric basic 3D point type.
typedef Geom_traits::Segment_3 | Segment
typedef Geom_traits::Triangle_3 | Triangle
typedef Geom_traits::Tetrahedron_3 | Tetrahedron
typedef std::pair< Point, Offset > | Periodic_point
| Represents a point-offset pair.
typedef std::pair< Point_3, Offset > | Periodic_point_3
| Represents a point-offset pair.
typedef array< Periodic_point, 2 > | Periodic_segment
| A periodic segment.
typedef array< Periodic_point_3, 2 > | Periodic_segment_3
| A periodic segment.
typedef array< Periodic_point, 3 > | Periodic_triangle
| A periodic triangle.
typedef array< Periodic_point_3, 3 > | Periodic_triangle_3
| A periodic triangle.
typedef array< Periodic_point, 4 > | Periodic_tetrahedron
| A periodic tetrahedron.
typedef array< Periodic_point_3, 4 > | Periodic_tetrahedron_3
| A periodic tetrahedron.
Only vertices ( \( 0\)-faces) and cells ( \( 3\)-faces) are stored. Edges ( \( 1\)-faces) and facets ( \( 2\)-faces) are not explicitly represented and thus there are no corresponding classes (see Section Representation).
typedef Triangulation_data_structure::Vertex | Vertex
typedef Triangulation_data_structure::Cell | Cell
typedef Triangulation_data_structure::Edge | Edge
typedef Triangulation_data_structure::Facet | Facet
The vertices and faces of the triangulations are accessed through `handles`, `iterators` and `circulators`. A handle is a type which supports the two dereference operators and `operator->`. The Handle concept is documented in the support library. Iterators and circulators are bidirectional and non-mutable. The edges and facets of the triangulation can also be visited through iterators and circulators which are bidirectional and non-mutable. Iterators and circulators are convertible to the corresponding handles, thus the user can pass them directly as arguments to the functions.
typedef Triangulation_data_structure::Vertex_handle | Vertex_handle
| handle to a vertex
typedef Triangulation_data_structure::Cell_handle | Cell_handle
| handle to a cell
typedef Triangulation_data_structure::size_type | size_type
| Size type (an unsigned integral type)
typedef Triangulation_data_structure::difference_type | difference_type
| Difference type (a signed integral type)
typedef Triangulation_data_structure::Cell_iterator | Cell_iterator
| iterator over cells
typedef Triangulation_data_structure::Facet_iterator | Facet_iterator
| iterator over facets
typedef Triangulation_data_structure::Edge_iterator | Edge_iterator
| iterator over edges
typedef Triangulation_data_structure::Vertex_iterator | Vertex_iterator
| iterator over vertices
typedef unspecified_type | Unique_vertex_iterator
| iterator over the vertices whose corresponding points lie in the original domain, i.e. for each set of periodic copies the `Unique_vertex_iterator` iterates over exactly one representative.
typedef Triangulation_data_structure::Cell_circulator | Cell_circulator
| circulator over all cells incident to a given edge
typedef Triangulation_data_structure::Facet_circulator | Facet_circulator
| circulator over all facets incident to a given edge

## Geometric Iterators:
The following iterators have value type `Periodic_segment`, `Periodic_triangle`, and `Periodic_tetrahedron`, which have inner type `Point`.
typedef unspecified_type | Periodic_tetrahedron_iterator
| iterator over the tetrahedra corresponding to cells of the triangulation.
typedef unspecified_type | Periodic_triangle_iterator
| iterator over the triangles corresponding to facets of the triangulation.
typedef unspecified_type | Periodic_segment_iterator
| iterator over the segments corresponding to edges of the triangulation.
typedef unspecified_type | Periodic_point_iterator
| iterator over the points corresponding to vertices of the triangulation.

## Creation
| Periodic_3_triangulation_3 (const Iso_cuboid &domain=Iso_cuboid(0, 0, 0, 1, 1, 1), const Geom_traits &traits=Geom_traits())
| Introduces an empty triangulation `t` with `domain` as original domain.
| Periodic_3_triangulation_3 (const Periodic_3_triangulation_3 &tr)
| Copy constructor.

## Assignment
Periodic_3_triangulation_3 & | operator= (const Periodic_3_triangulation_3 &tr)
| The triangulation `tr` is duplicated, and modifying the copy after the duplication does not modify the original.
void | swap (Periodic_3_triangulation_3 &tr)
| The triangulations `tr` and `t` are swapped.
void | clear ()
| Deletes all vertices and all cells of `t`.
template<class Traits , class TDS1 , class TDS2 >
bool | operator== (const Periodic_3_triangulation_3< Traits, TDS1 > &t1, const Periodic_3_triangulation_3< Traits, TDS2 > &t2)
| Equality operator.
template<class Traits , class TDS1 , class TDS2 >
bool | operator!= (const Periodic_3_triangulation_3< Traits, TDS1 > &t1, const Periodic_3_triangulation_3< Traits, TDS2 > &t2)
| The opposite of `operator==`.

## Access Functions
const Geom_traits & | geom_traits () const
| Returns a const reference to the geometric traits object.
const Triangulation_data_structure & | tds () const
| Returns a const reference to the triangulation data structure.
Iso_cuboid | domain () const
| Returns the original domain.
Covering_sheets | number_of_sheets () const
| This is an advanced function.
Offset | neighbor_offset (Cell_handle ch, int i) const
| Get the offset between the origins of the internal offset coordinate systems of two neighboring cells with respect from ch to its i-th neighbor.

## Non const access
void | set_domain (const Iso_cuboid dom)
| This is an advanced function.
Triangulation_data_structure & | tds ()
| This is an advanced function.

## Non-constant-time queries and conversions
bool | is_extensible_triangulation_in_1_sheet_h1 () const
| The current triangulation remains a triangulation in the 1-sheeted covering space even after adding points if this method returns `true`.
bool | is_extensible_triangulation_in_1_sheet_h2 () const
| The same as `is_extensible_triangulation_in_1_sheet_h1()` but with a more precise heuristic, i.e. it might answer `true` in cases in which `is_extensible_triangulation_in_1_sheet_h1()` would not.
bool | is_triangulation_in_1_sheet () const
| Returns `true` if the current triangulation would still be a triangulation in the 1-sheeted covering space, returns `false` otherwise.
void | convert_to_1_sheeted_covering () const
| Converts the current triangulation into the same periodic triangulation in the 1-sheeted covering space.
void | convert_to_27_sheeted_covering () const
| Converts the current triangulation into the same periodic triangulation in the 27-sheeted covering space.

## Constant-time access functions
size_type | number_of_vertices () const
| Returns the number of vertices.
size_type | number_of_cells () const
| Returns the number of cells.
size_type | number_of_stored_vertices () const
| Returns the number of vertices in the data structure.
size_type | number_of_stored_cells () const
| Returns the number of cells in the data structure.

## Non-constant-time access functions
size_type | number_of_edges () const
| Returns the number of edges.
size_type | number_of_facets () const
| Returns the number of facets.
size_type | number_of_stored_edges () const
| Returns the number of edges in the data structure.
size_type | number_of_stored_facets () const
| Returns the number of facets in the data structure.

## Geometric Access Functions
The following functions return object of types `Periodic_segment`, `Periodic_triangle`, and `Periodic_tetrahedron`, which have inner type `Point`.
Point | point (const Periodic_point &pp) const
| Converts the `Periodic_point` `pp` (point-offset pair) to the corresponding `Point` in \( \mathbb R^3\).
Point | point (Vertex_handle v) const
| Equivalent to the call `t.point(t.periodic_point(v));`
Point | point (Cell_handle c, int idx) const
| Equivalent to the call `t.point(t.periodic_point(c,idx));`
Periodic_point | periodic_point (const Vertex_handle v) const
| Returns the periodic point given by vertex `v`.
Periodic_point | periodic_point (const Cell_handle c, int i) const
| If `t` is represented in the 1-sheeted covering space, this function returns the periodic point given by the \( i\)-th vertex of cell `c`, that is the point in the original domain and the offset of the vertex in `c`.
Periodic_segment | periodic_segment (const Cell_handle c, int i, int j) const
| Returns the periodic segment formed by the two point-offset pairs corresponding to the two vertices of edge `(c,i,j)`.
Periodic_segment | periodic_segment (const Cell_handle c, Offset offset, int i, int j) const
| Returns the periodic segment formed by the two point-offset pairs corresponding to the two vertices of edge `(c,i,j)`.
Periodic_segment | periodic_segment (const Edge &e) const
| Same as the previous method for edge `e`.
Periodic_triangle | periodic_triangle (const Cell_handle c, int i) const
| Returns the periodic triangle formed by the three point-offset pairs corresponding to the three vertices of facet `(c,i)`.
Periodic_triangle | periodic_triangle (const Cell_handle c, Offset offset, int i) const
| Returns the periodic triangle formed by the three point-offset pairs corresponding to the three vertices of facet `(c,i)`.
Periodic_triangle | periodic_triangle (const Facet &f) const
| Same as the previous method for facet `f`.
Periodic_tetrahedron | periodic_tetrahedron (const Cell_handle c) const
| Returns the periodic tetrahedron formed by the four point-offset pairs corresponding to the four vertices of `c`.
Periodic_tetrahedron | periodic_tetrahedron (const Cell_handle c, Offset offset) const
| Returns the periodic tetrahedron formed by the four point-offset pairs corresponding to the four vertices of `c`.
Warning The following functions were renamed with CGAL 4.11 to clarify that they return geometric objects with inner type `Point_3`. Note that a traits class providing exact constructions should be used in order to guarantee the following operations to be exact (as opposed to computing the triangulation only, which requires only exact predicates).
template<typename PP >
Point_3 | construct_point (const PP &pp) const
| Converts the periodic point of type `PP` to a `Point_3`.
Point_3 | construct_point (const Point &p) const
| Converts the `Point` `p` to a `Point_3`.
template<typename P >
Point_3 | construct_point (const P &p1, const Offset &o1) const
| Same as above, with offsets.
template<typename PS >
Segment | construct_segment (const PS &s) const
| Converts the periodic segment of type `PS` to a `Segment`.
template<typename P >
Segment | construct_segment (const P &p1, const P &p2) const
| Creates a segment from two points.
template<typename P >
Segment | construct_segment (const P &p1, const P &p2, const Offset &o1, const Offset &o2) const
| Same as above, with offsets.
template<typename PT >
Triangle | construct_triangle (const PT &t) const
| Converts the periodic triangle of type `PT` to a `Triangle`.
template<typename P >
Triangle | construct_triangle (const P &p1, const P &p2, const P &p3) const
| Creates a triangle from three points.
template<typename P >
Triangle | construct_triangle (const P &p1, const P &p2, const P &p3, const Offset &o1, const Offset &o2, const Offset &o3) const
| Same as above, with offsets.
template<typename PT >
Tetrahedron | construct_tetrahedron (const PT &t) const
| Converts the periodic tetrahedron of type `PT` to a `Tetrahedron`.
template<typename P >
Tetrahedron | construct_tetrahedron (const P &p1, const P &p2, const P &p3, const P &p4) const
| Creates a tetrahedron from four points.
template<typename P >
Tetrahedron | construct_tetrahedron (const P &p1, const P &p2, const P &p3, const P &p4, const Offset &o1, const Offset &o2, const Offset &o3, const Offset &o4) const
| Same as above, with offsets.

## Queries
bool | is_vertex (const Point &p, Vertex_handle &v) const
| Tests whether `p` is a vertex of `t` by locating `p` in the triangulation.
bool | is_vertex (Vertex_handle v) const
| Tests whether `v` is a vertex of `t`.
bool | is_edge (Vertex_handle u, Vertex_handle v, Cell_handle &c, int &i, int &j) const
| Tests whether `(u,v)` is an edge of `t`.
bool | is_edge (Vertex_handle u, const Offset &offu, Vertex_handle v, const Offset &offv, Cell_handle &c, int &i, int &j) const
| Tests whether `((u,offu),(v,offu))` is an edge of `t`.
bool | is_facet (Vertex_handle u, Vertex_handle v, Vertex_handle w, Cell_handle &c, int &i, int &j, int &k) const
| Tests whether `(u,v,w)` is a facet of `t`.
bool | is_facet (Vertex_handle u, const Offset &offu, Vertex_handle v, const Offset &offv, Vertex_handle w, const Offset &offw, Cell_handle &c, int &i, int &j, int &k) const
| Tests whether `((u,offu),(v,offv),(w,offw))` is a facet of `t`.
bool | is_cell (Cell_handle c) const
| Tests whether `c` is a cell of `t`.
bool | is_cell (Vertex_handle u, Vertex_handle v, Vertex_handle w, Vertex_handle x, Cell_handle &c, int &i, int &j, int &k, int &l) const
| Tests whether `(u,v,w,x)` is a cell of `t`.
bool | is_cell (Vertex_handle u, Vertex_handle v, Vertex_handle w, Vertex_handle x, Cell_handle &c) const
| Tests whether `(u,v,w,x)` is a cell of `t` and computes this cell `c`.
bool | is_cell (Vertex_handle u, const Offset &offu, Vertex_handle v, const Offset &offv, Vertex_handle w, const Offset &offw, Vertex_handle x, const Offset &offx, Cell_handle &c, int &i, int &j, int &k, int &l) const
| Tests whether `((u,offu),(v,offv),(w,offv),(x,offx))` is a cell of `t`.
bool | is_cell (Vertex_handle u, const Offset &offu, Vertex_handle v, const Offset &offv, Vertex_handle w, const Offset &offw, Vertex_handle x, const Offset &offx, Cell_handle &c) const
| Tests whether `((u,offu),(v,offv),(w,offv),(x,offx))` is a cell of `t` and computes this cell `c`.
There is a method `has_vertex` in the cell class. The analogous methods for facets are defined here.
bool | has_vertex (const Facet &f, Vertex_handle v, int &j) const
| If `v` is a vertex of `f`, then `j` is the index of `v` in the cell `f.first`, and the method returns `true`.
bool | has_vertex (Cell_handle c, int i, Vertex_handle v, int &j) const
| Same for facet `(c,i)`.
bool | has_vertex (const Facet &f, Vertex_handle v) const
bool | has_vertex (Cell_handle c, int i, Vertex_handle v) const
| Same as the first two methods, but these two methods do not return the index of the vertex.
The following three methods test whether two facets have the same vertices.
bool | are_equal (Cell_handle c, int i, Cell_handle n, int j) const
bool | are_equal (const Facet &f, const Facet &g) const
bool | are_equal (const Facet &f, Cell_handle n, int j) const

## Point Location
The class `Periodic_3_triangulation_3` provides three functions to locate a given point with respect to a triangulation. It provides also functions to test if a given point is inside a face or not. Note that the class `Periodic_3_Delaunay_triangulation_3` also provides a `nearest_vertex()` function.
Cell_handle | locate (const Point &query, Cell_handle start=Cell_handle()) const
| Returns the cell that contains the query in its interior.
Cell_handle | locate (const Point &query, Offset &locate_offset, Cell_handle start=Cell_handle()) const
| Returns the cell that contains the query in its interior.
Cell_handle | inexact_locate (const Point &query, Cell_handle start=Cell_handle()) const
| Same as `locate()` but uses inexact predicates.
Cell_handle | locate (const Point &query, Locate_type &lt, int &li, int &lj, Cell_handle start=Cell_handle()) const
| The \( k\)-face that contains `query` in its interior is returned, by means of the cell returned together with `lt`, which is set to the locate type of the query (`VERTEX, EDGE, FACET, CELL`) and two indices `li` and `lj` that specify the \( k\)-face of the cell containing `query`.
Cell_handle | locate (const Point &query, Offset &locate_offset, Locate_type &lt, int &li, int &lj, Cell_handle start=Cell_handle()) const
| The \( k\)-face that contains `query` in its interior is returned, by means of the cell returned together with `lt`, which is set to the locate type of the query (`VERTEX, EDGE, FACET, CELL`) and two indices `li` and `lj` that specify the \( k\)-face of the cell containing `query`.
Bounded_side | side_of_cell (const Point &p, Cell_handle c, Locate_type &lt, int &li, int &lj) const
| Returns a value indicating on which side of the oriented boundary of `c` the point `p` lies.

## Cell, Face, Edge and Vertex Iterators
The following iterators allow the user to visit cells, facets, edges and vertices of the stored triangulation, i.e. in case of computing in a multiply sheeted covering space all stored periodic copies of each item are returned. These iterators are non-mutable, bidirectional and their value types are respectively `Cell`, `Facet`, `Edge` and `Vertex`. They are all invalidated by any change in the triangulation.
Vertex_iterator | vertices_begin () const
| Starts at an arbitrary vertex.
Vertex_iterator | vertices_end () const
| Past-the-end iterator.
Edge_iterator | edges_begin () const
| Starts at an arbitrary edge.
Edge_iterator | edges_end () const
| Past-the-end iterator.
Facet_iterator | facets_begin () const
| Starts at an arbitrary facet.
Facet_iterator | facets_end () const
| Past-the-end iterator.
Cell_iterator | cells_begin () const
| Starts at an arbitrary cell.
Cell_iterator | cells_end () const
| Past-the-end iterator.
Unique_vertex_iterator | unique_vertices_begin () const
| Starts at an arbitrary vertex.
Unique_vertex_iterator | unique_vertices_end () const
| Past-the-end iterator.

## Geometric Iterators
The following iterators allow the user to obtain geometric primitives corresponding to cells, facets, edges, and vertices of the triangulation. These iterators are non-mutable, bidirectional and their value types are respectively `Periodic_point`, `Periodic_segment`, `Periodic_triangle`, and `Periodic_tetrahedron`. They are all invalidated by any change in the triangulation. If the periodic triangulation is not computed in the 1-sheeted covering space, these iterators can be used to retain only the geometric primitives in the original domain. This can be controlled using the enum `Iterator_type`. The four different modes of the geometric iterators: STORED, STORED_COVER_DOMAIN, UNIQUE, UNIQUE_COVER_DOMAIN. Note that in case of computing in the 1-sheeted covering space, STORED and UNIQUE give the same result.
Periodic_point_iterator | periodic_points_begin (Iterator_type it=STORED) const
| Iterates over the points of the triangulation.
Periodic_point_iterator | periodic_points_end (Iterator_type it=STORED) const
| Past-the-end iterator.
Periodic_segment_iterator | periodic_segments_begin (Iterator_type it=STORED) const
| Iterates over the segments of the triangulation.
Periodic_segment_iterator | periodic_segments_end (Iterator_type it=STORED) const
| Past-the-end iterator.
Periodic_triangle_iterator | periodic_triangles_begin (Iterator_type it=STORED) const
| Iterates over the triangles of the triangulation.
Periodic_triangle_iterator | periodic_triangles_end (Iterator_type it=STORED) const
| Past-the-end iterator.
Periodic_tetrahedron_iterator | periodic_tetrahedra_begin (Iterator_type it=STORED) const
| Iterates over the tetrahedra of the triangulation.
Periodic_tetrahedron_iterator | periodic_tetrahedra_end (Iterator_type it=STORED) const
| Past-the-end iterator.

## Cell and Facet Circulators
The following circulators respectively visit all cells or all facets incident to a given edge. They are non-mutable and bidirectional. They are invalidated by any modification of one of the cells traversed.
Cell_circulator | incident_cells (Edge e) const
| Starts at an arbitrary cell incident to `e`.
Cell_circulator | incident_cells (Cell_handle c, int i, int j) const
| As above for edge `(i,j)` of `c`.
Cell_circulator | incident_cells (Edge e, Cell_handle start) const
| Starts at cell `start`.
Cell_circulator | incident_cells (Cell_handle c, int i, int j, Cell_handle start) const
| As above for edge `(i,j)` of `c`.
Facet_circulator | incident_facets (Edge e) const
| Starts at an arbitrary facet incident to `e`.
Facet_circulator | incident_facets (Cell_handle c, int i, int j) const
| As above for edge `(i,j)` of `c`.
Facet_circulator | incident_facets (Edge e, Facet start) const
| Starts at facet `start`.
Facet_circulator | incident_facets (Edge e, Cell_handle start, int f) const
| Starts at facet of index `f` in `start`.
Facet_circulator | incident_facets (Cell_handle c, int i, int j, Facet start) const
| As above for edge `(i,j)` of `c`.
Facet_circulator | incident_facets (Cell_handle c, int i, int j, Cell_handle start, int f) const
| As above for edge `(i,j)` of `c` and facet `(start,f)`.

## Traversal of the Incident Cells and Facets, and the Adjacent Vertices of a Given Vertex
template<class OutputIterator >
OutputIterator | incident_cells (Vertex_handle v, OutputIterator cells) const
| Copies the `Cell_handle`s of all cells incident to `v` to the output iterator `cells`.
template<class OutputIterator >
OutputIterator | incident_facets (Vertex_handle v, OutputIterator facets) const
| Copies the `Facet`s incident to `v` to the output iterator `facets`.
template<class OutputIterator >
OutputIterator | incident_edges (Vertex_handle v, OutputIterator edges) const
| Copies the `Edge`s incident to `v` to the output iterator `edges`.
template<class OutputIterator >
OutputIterator | adjacent_vertices (Vertex_handle v, OutputIterator vertices) const
| Copies the `Vertex_handle`s of all vertices adjacent to `v` to the output iterator `vertices`.
size_type | degree (Vertex_handle v) const
| Returns the degree of a vertex, that is, the number of adjacent vertices.

## Traversal Between Adjacent Cells
int | mirror_index (Cell_handle c, int i) const
| Returns the index of `c` in its \( i^{th}\) neighbor.
Vertex_handle | mirror_vertex (Cell_handle c, int i) const
| Returns the vertex of the \( i^{th}\) neighbor of `c` that is opposite to `c`.
Facet | mirror_facet (Facet f) const
| Returns the same facet viewed from the other adjacent cell.

## Checking
Advanced The responsibility of keeping a valid triangulation belongs to the user when using advanced operations allowing a direct manipulation of cells and vertices. We provide the user with the following methods to help debugging.
bool | is_valid (bool verbose=false) const
| Checks the combinatorial validity of the triangulation.
bool | is_valid (Cell_handle c, bool verbose=false) const
| Checks the combinatorial validity of the cell by calling the `is_valid` method of the `Triangulation_data_structure` cell class.

## Member Typedef Documentation

## ◆ Iso_cuboid

template<typename Traits , typename TDS >

typedef Geom_traits::Iso_cuboid_3 CGAL::Periodic_3_triangulation_3< Traits, TDS >::Iso_cuboid

A type representing an axis-aligned cuboid.

It must be a model of `Traits::Iso_cuboid_3`. Used to represent the original domain.

## ◆ Periodic_point

template<typename Traits , typename TDS >

typedef std::pair< Point, Offset > CGAL::Periodic_3_triangulation_3< Traits, TDS >::Periodic_point

Represents a point-offset pair.

The point in the pair lies in the original domain. Note that the inner type is `Point`.

## ◆ Periodic_point_3

template<typename Traits , typename TDS >

typedef std::pair< Point_3, Offset > CGAL::Periodic_3_triangulation_3< Traits, TDS >::Periodic_point_3

Represents a point-offset pair.

The point in the pair lies in the original domain. Note that the inner type is `Point_3`.

## ◆ Periodic_segment

template<typename Traits , typename TDS >

typedef array< Periodic_point, 2> CGAL::Periodic_3_triangulation_3< Traits, TDS >::Periodic_segment

A periodic segment.

Note that the inner type is `Periodic_point`.

## ◆ Periodic_segment_3

template<typename Traits , typename TDS >

typedef array< Periodic_point_3, 2> CGAL::Periodic_3_triangulation_3< Traits, TDS >::Periodic_segment_3

A periodic segment.

Note that the inner type is `Periodic_point_3`.

## ◆ Periodic_tetrahedron

template<typename Traits , typename TDS >

typedef array< Periodic_point, 4> CGAL::Periodic_3_triangulation_3< Traits, TDS >::Periodic_tetrahedron

A periodic tetrahedron.

Note that the inner type is `Periodic_point`.

## ◆ Periodic_tetrahedron_3

template<typename Traits , typename TDS >

typedef array< Periodic_point_3, 4> CGAL::Periodic_3_triangulation_3< Traits, TDS >::Periodic_tetrahedron_3

A periodic tetrahedron.

Note that the inner type is `Periodic_point_3`.

## ◆ Periodic_triangle

template<typename Traits , typename TDS >

typedef array< Periodic_point, 3> CGAL::Periodic_3_triangulation_3< Traits, TDS >::Periodic_triangle

A periodic triangle.

Note that the inner type is `Periodic_point`.

## ◆ Periodic_triangle_3

template<typename Traits , typename TDS >

typedef array< Periodic_point_3, 3> CGAL::Periodic_3_triangulation_3< Traits, TDS >::Periodic_triangle_3

A periodic triangle.

Note that the inner type is `Periodic_point_3`.

## ◆ Point

template<typename Traits , typename TDS >

typedef TDS::Vertex::Point CGAL::Periodic_3_triangulation_3< Traits, TDS >::Point

The point type of the triangulation.

Note
  This type is equal to `Geom_traits::Point_3` when considering periodic Delaunay triangulations and to `Geom_traits::Weighted_point_3` when considering periodic weighted Delaunay triangulations.

## Member Enumeration Documentation

## ◆ Iterator_type

template<typename Traits , typename TDS >

enum CGAL::Periodic_3_triangulation_3::Iterator_type

The enum `Iterator_type` is defined by `Periodic_3_triangulation_3` to specify the behavior of geometric iterators.

The elements of the enum have the following meaning:

See also
  `CGAL::Periodic_3_triangulation_3`

Enumerator
STORED | Return all geometric primitives as they are stored internally in `Triangulation_data_structure_3`.
UNIQUE | Return only one representative of each geometric primitive even if the triangulation is computed in a multiply sheeted covering space. Choose the representative whose maximum offset is minimal but non-negative in each direction of space.
STORED_COVER_DOMAIN | Same as STORED but return additionally all primitives whose intersection with the original domain of the current covering space is non-empty.
UNIQUE_COVER_DOMAIN | Same as UNIQUE but return additionally all primitives whose intersection with the original domain is non-empty.

## ◆ Locate_type

template<typename Traits , typename TDS >

enum CGAL::Periodic_3_triangulation_3::Locate_type

The enum `Locate_type` is defined by `Periodic_3_triangulation_3` to specify which case occurs when locating a point in the triangulation.

If the triangulation does not contain any points `EMPTY` is returned.

See also
  `CGAL::Periodic_3_triangulation_3`

Enumerator
VERTEX |
EDGE |
FACET |
CELL |
EMPTY |

## Constructor & Destructor Documentation

## ◆ Periodic_3_triangulation_3() [1/2]

template<typename Traits , typename TDS >

CGAL::Periodic_3_triangulation_3< Traits, TDS >::Periodic_3_triangulation_3 | ( | const Iso_cuboid & | domain = `Iso_cuboid(0, 0, 0, 1, 1, 1)`,
|  | const Geom_traits & | traits = `Geom_traits()`
| ) |  |

Introduces an empty triangulation `t` with `domain` as original domain.

Precondition
  `domain` is a cube.

## ◆ Periodic_3_triangulation_3() [2/2]

template<typename Traits , typename TDS >

CGAL::Periodic_3_triangulation_3< Traits, TDS >::Periodic_3_triangulation_3 | ( | const Periodic_3_triangulation_3< Traits, TDS > & | tr | ) |

Copy constructor.

All vertices and faces are duplicated.

## Member Function Documentation

## ◆ adjacent_vertices()

template<typename Traits , typename TDS >
template<class OutputIterator >

OutputIterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::adjacent_vertices | ( | Vertex_handle | v,
|  | OutputIterator | vertices
| ) |  | const

Copies the `Vertex_handle`s of all vertices adjacent to `v` to the output iterator `vertices`.

Returns the resulting output iterator.

Precondition
  `v` \( \neq\) `Vertex_handle()`, `t`.`is_vertex(v)`.

## ◆ cells_begin()

template<typename Traits , typename TDS >

Cell_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::cells_begin | ( |  | ) | const

Starts at an arbitrary cell.

Iterates over all cells. Returns `cells_end()` if `t`.`number_of_vertices()` \( =0\).

## ◆ construct_point()

template<typename Traits , typename TDS >
template<typename PP >

Point_3 CGAL::Periodic_3_triangulation_3< Traits, TDS >::construct_point | ( | const PP & | pp | ) | const

Converts the periodic point of type `PP` to a `Point_3`.

The type PP can be either `Periodic_point` or `Periodic_point_3`.

## ◆ construct_segment() [1/2]

template<typename Traits , typename TDS >
template<typename P >

Segment CGAL::Periodic_3_triangulation_3< Traits, TDS >::construct_segment | ( | const P & | p1,
|  | const P & | p2
| ) |  | const

Creates a segment from two points.

The type `P` can be either `Point` or `Point_3`.

## ◆ construct_segment() [2/2]

template<typename Traits , typename TDS >
template<typename PS >

Segment CGAL::Periodic_3_triangulation_3< Traits, TDS >::construct_segment | ( | const PS & | s | ) | const

Converts the periodic segment of type `PS` to a `Segment`.

The type `PS` can be either `Periodic_segment` or `Periodic_segment_3`.

## ◆ construct_tetrahedron() [1/2]

template<typename Traits , typename TDS >
template<typename P >

Tetrahedron CGAL::Periodic_3_triangulation_3< Traits, TDS >::construct_tetrahedron | ( | const P & | p1,
|  | const P & | p2,
|  | const P & | p3,
|  | const P & | p4
| ) |  | const

Creates a tetrahedron from four points.

The type `P` can be either `Point` or `Point_3`.

## ◆ construct_tetrahedron() [2/2]

template<typename Traits , typename TDS >
template<typename PT >

Tetrahedron CGAL::Periodic_3_triangulation_3< Traits, TDS >::construct_tetrahedron | ( | const PT & | t | ) | const

Converts the periodic tetrahedron of type `PT` to a `Tetrahedron`.

The type `PT` can be either `Periodic_tetrahedron` or `Periodic_tetrahedron_3`.

## ◆ construct_triangle() [1/2]

template<typename Traits , typename TDS >
template<typename P >

Triangle CGAL::Periodic_3_triangulation_3< Traits, TDS >::construct_triangle | ( | const P & | p1,
|  | const P & | p2,
|  | const P & | p3
| ) |  | const

Creates a triangle from three points.

The type `P` can be either `Point` or `Point_3`.

## ◆ construct_triangle() [2/2]

template<typename Traits , typename TDS >
template<typename PT >

Triangle CGAL::Periodic_3_triangulation_3< Traits, TDS >::construct_triangle | ( | const PT & | t | ) | const

Converts the periodic triangle of type `PT` to a `Triangle`.

The type `PT` can be either `Periodic_triangle` or `Periodic_triangle_3`.

## ◆ convert_to_1_sheeted_covering()

template<typename Traits , typename TDS >

void CGAL::Periodic_3_triangulation_3< Traits, TDS >::convert_to_1_sheeted_covering | ( |  | ) | const

Converts the current triangulation into the same periodic triangulation in the 1-sheeted covering space.

Attention
  It is not recommended to interfere with the built-in covering management. Especially a premature conversion to the 1-sheeted covering space might lead to problems when modifying the triangulation later.

## ◆ convert_to_27_sheeted_covering()

template<typename Traits , typename TDS >

void CGAL::Periodic_3_triangulation_3< Traits, TDS >::convert_to_27_sheeted_covering | ( |  | ) | const

Converts the current triangulation into the same periodic triangulation in the 27-sheeted covering space.

Attention
  It is not recommended to interfere with the built-in covering management. Especially a premature conversion to the 1-sheeted covering space might lead to problems when modifying the triangulation later.

## ◆ degree()

template<typename Traits , typename TDS >

size_type CGAL::Periodic_3_triangulation_3< Traits, TDS >::degree | ( | Vertex_handle | v | ) | const

Returns the degree of a vertex, that is, the number of adjacent vertices.

Precondition
  `v` \( \neq\) `Vertex_handle()`, `t`.`is_vertex(v)`.

## ◆ edges_begin()

template<typename Traits , typename TDS >

Edge_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::edges_begin | ( |  | ) | const

Starts at an arbitrary edge.

Iterates over all edges. Returns `edges_end()` if `t`.`number_of_vertices()` \( =0\).

## ◆ facets_begin()

template<typename Traits , typename TDS >

Facet_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::facets_begin | ( |  | ) | const

Starts at an arbitrary facet.

Iterates over all facets. Returns `facets_end()` if `t`.`number_of_vertices()` \( =0\).

## ◆ has_vertex()

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::has_vertex | ( | Cell_handle | c,
|  | int | i,
|  | Vertex_handle | v,
|  | int & | j
| ) |  | const

Same for facet `(c,i)`.

Computes the index `j` of `v` in `c`.

## ◆ incident_cells() [1/2]

template<typename Traits , typename TDS >

Cell_circulator CGAL::Periodic_3_triangulation_3< Traits, TDS >::incident_cells | ( | Edge | e,
|  | Cell_handle | start
| ) |  | const

Starts at cell `start`.

Precondition
  `start` is incident to `e`.

## ◆ incident_cells() [2/2]

template<typename Traits , typename TDS >
template<class OutputIterator >

OutputIterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::incident_cells | ( | Vertex_handle | v,
|  | OutputIterator | cells
| ) |  | const

Copies the `Cell_handle`s of all cells incident to `v` to the output iterator `cells`.

Returns the resulting output iterator.

Precondition
  `v` \( \neq\) `Vertex_handle()`, `t`.`is_vertex(v)`.

## ◆ incident_edges()

template<typename Traits , typename TDS >
template<class OutputIterator >

OutputIterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::incident_edges | ( | Vertex_handle | v,
|  | OutputIterator | edges
| ) |  | const

Copies the `Edge`s incident to `v` to the output iterator `edges`.

Returns the resulting output iterator.

Precondition
  `v` \( \neq\) `Vertex_handle()`, `t`.`is_vertex(v)`.

## ◆ incident_facets() [1/2]

template<typename Traits , typename TDS >

Facet_circulator CGAL::Periodic_3_triangulation_3< Traits, TDS >::incident_facets | ( | Edge | e,
|  | Facet | start
| ) |  | const

Starts at facet `start`.

Precondition
  `start` is incident to `e`.

## ◆ incident_facets() [2/2]

template<typename Traits , typename TDS >
template<class OutputIterator >

OutputIterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::incident_facets | ( | Vertex_handle | v,
|  | OutputIterator | facets
| ) |  | const

Copies the `Facet`s incident to `v` to the output iterator `facets`.

Returns the resulting output iterator.

Precondition
  `v` \( \neq\) `Vertex_handle()`, `t`.`is_vertex(v)`.

## ◆ inexact_locate()

template<typename Traits , typename TDS >

Cell_handle CGAL::Periodic_3_triangulation_3< Traits, TDS >::inexact_locate | ( | const Point & | query,
|  | Cell_handle | start = `Cell_handle()`
| ) |  | const

Same as `locate()` but uses inexact predicates.

This function returns a handle on a cell that is a good approximation of the exact location of `query`, while being faster. Note that it may return a handle on a cell whose interior does not contain `query`.

Note that this function is available only if the Cartesian coordinates of `query` are accessible with functions `x()`, `y()` and `z()`.

## ◆ is_cell() [1/4]

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_cell | ( | Vertex_handle | u,
|  | const Offset & | offu,
|  | Vertex_handle | v,
|  | const Offset & | offv,
|  | Vertex_handle | w,
|  | const Offset & | offw,
|  | Vertex_handle | x,
|  | const Offset & | offx,
|  | Cell_handle & | c
| ) |  | const

Tests whether `((u,offu),(v,offv),(w,offv),(x,offx))` is a cell of `t` and computes this cell `c`.

Precondition
  `u`, `v`, `w` and `x` are vertices of `t`.

## ◆ is_cell() [2/4]

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_cell | ( | Vertex_handle | u,
|  | const Offset & | offu,
|  | Vertex_handle | v,
|  | const Offset & | offv,
|  | Vertex_handle | w,
|  | const Offset & | offw,
|  | Vertex_handle | x,
|  | const Offset & | offx,
|  | Cell_handle & | c,
|  | int & | i,
|  | int & | j,
|  | int & | k,
|  | int & | l
| ) |  | const

Tests whether `((u,offu),(v,offv),(w,offv),(x,offx))` is a cell of `t`.

If the cell `c` is found, the method computes the indices `i`, `j`, `k` and `l` of the vertices `u`, `v`, `w` and `x` in `c`, in this order.

Precondition
  `u`, `v`, `w` and `x` are vertices of `t`.

## ◆ is_cell() [3/4]

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_cell | ( | Vertex_handle | u,
|  | Vertex_handle | v,
|  | Vertex_handle | w,
|  | Vertex_handle | x,
|  | Cell_handle & | c
| ) |  | const

Tests whether `(u,v,w,x)` is a cell of `t` and computes this cell `c`.

Precondition
  `u`, `v`, `w` and `x` are vertices of `t`.

## ◆ is_cell() [4/4]

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_cell | ( | Vertex_handle | u,
|  | Vertex_handle | v,
|  | Vertex_handle | w,
|  | Vertex_handle | x,
|  | Cell_handle & | c,
|  | int & | i,
|  | int & | j,
|  | int & | k,
|  | int & | l
| ) |  | const

Tests whether `(u,v,w,x)` is a cell of `t`.

If the cell `c` is found, the method computes the indices `i`, `j`, `k` and `l` of the vertices `u`, `v`, `w` and `x` in `c`, in this order.

Precondition
  `u`, `v`, `w` and `x` are vertices of `t`.

## ◆ is_edge() [1/2]

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_edge | ( | Vertex_handle | u,
|  | const Offset & | offu,
|  | Vertex_handle | v,
|  | const Offset & | offv,
|  | Cell_handle & | c,
|  | int & | i,
|  | int & | j
| ) |  | const

Tests whether `((u,offu),(v,offu))` is an edge of `t`.

If the edge is found, it gives a cell `c` having this edge and the indices `i` and `j` of the vertices `u` and `v` in `c`, in this order.

Precondition
  `u` and `v` are vertices of `t`.

## ◆ is_edge() [2/2]

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_edge | ( | Vertex_handle | u,
|  | Vertex_handle | v,
|  | Cell_handle & | c,
|  | int & | i,
|  | int & | j
| ) |  | const

Tests whether `(u,v)` is an edge of `t`.

If the edge is found, it gives a cell `c` having this edge and the indices `i` and `j` of the vertices `u` and `v` in `c`, in this order.

Precondition
  `u` and `v` are vertices of `t`.

## ◆ is_extensible_triangulation_in_1_sheet_h1()

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_extensible_triangulation_in_1_sheet_h1 | ( |  | ) | const

The current triangulation remains a triangulation in the 1-sheeted covering space even after adding points if this method returns `true`.

This test relies on a heuristic, i.e. if it answers `false` nothing is known. This test runs in constant-time when not computing in the 1-sheeted covering space. (This test uses the length of the longest edge in the triangulation as a criterion [1].)

## ◆ is_extensible_triangulation_in_1_sheet_h2()

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_extensible_triangulation_in_1_sheet_h2 | ( |  | ) | const

The same as `is_extensible_triangulation_in_1_sheet_h1()` but with a more precise heuristic, i.e. it might answer `true` in cases in which `is_extensible_triangulation_in_1_sheet_h1()` would not.

However, it is much less time efficient when not computing in the 1-sheeted covering space. (This test uses the diameter of the largest empty ball in the input point set as a criterion [1].)

## ◆ is_facet() [1/2]

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_facet | ( | Vertex_handle | u,
|  | const Offset & | offu,
|  | Vertex_handle | v,
|  | const Offset & | offv,
|  | Vertex_handle | w,
|  | const Offset & | offw,
|  | Cell_handle & | c,
|  | int & | i,
|  | int & | j,
|  | int & | k
| ) |  | const

Tests whether `((u,offu),(v,offv),(w,offw))` is a facet of `t`.

If the facet is found, it computes a cell `c` having this facet and the indices `i`, `j` and `k` of the vertices `u`, `v` and `w` in `c`, in this order.

Precondition
  `u`, `v` and `w` are vertices of `t`.

## ◆ is_facet() [2/2]

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_facet | ( | Vertex_handle | u,
|  | Vertex_handle | v,
|  | Vertex_handle | w,
|  | Cell_handle & | c,
|  | int & | i,
|  | int & | j,
|  | int & | k
| ) |  | const

Tests whether `(u,v,w)` is a facet of `t`.

If the facet is found, it computes a cell `c` having this facet and the indices `i`, `j` and `k` of the vertices `u`, `v` and `w` in `c`, in this order.

Precondition
  `u`, `v` and `w` are vertices of `t`.

## ◆ is_valid() [1/2]

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_valid | ( | bool | verbose = `false` | ) | const

Checks the combinatorial validity of the triangulation.

Checks also the validity of its geometric embedding (see Section Representation). When `verbose` is set to true, messages describing the first invalidity encountered are printed.

## ◆ is_valid() [2/2]

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_valid | ( | Cell_handle | c,
|  | bool | verbose = `false`
| ) |  | const

Checks the combinatorial validity of the cell by calling the `is_valid` method of the `Triangulation_data_structure` cell class.

Also checks the geometric validity of `c`, if `c` is finite. (See Section Representation.)

When `verbose` is set to `true`, messages are printed to give a precise indication of the kind of invalidity encountered.

## ◆ is_vertex()

template<typename Traits , typename TDS >

bool CGAL::Periodic_3_triangulation_3< Traits, TDS >::is_vertex | ( | const Point & | p,
|  | Vertex_handle & | v
| ) |  | const

Tests whether `p` is a vertex of `t` by locating `p` in the triangulation.

If `p` is found, the associated vertex `v` is given.

Precondition
  `p` lies in the original domain `domain`.

## ◆ locate() [1/4]

template<typename Traits , typename TDS >

Cell_handle CGAL::Periodic_3_triangulation_3< Traits, TDS >::locate | ( | const Point & | query,
|  | Cell_handle | start = `Cell_handle()`
| ) |  | const

Returns the cell that contains the query in its interior.

If `query` lies on a facet, an edge or on a vertex, one of the cells having `query` on its boundary is returned.

The optional argument `start` is used as a starting place for the search.

Precondition
  `query` lies in the original domain `domain`.

## ◆ locate() [2/4]

template<typename Traits , typename TDS >

Cell_handle CGAL::Periodic_3_triangulation_3< Traits, TDS >::locate | ( | const Point & | query,
|  | Locate_type & | lt,
|  | int & | li,
|  | int & | lj,
|  | Cell_handle | start = `Cell_handle()`
| ) |  | const

The \( k\)-face that contains `query` in its interior is returned, by means of the cell returned together with `lt`, which is set to the locate type of the query (`VERTEX, EDGE, FACET, CELL`) and two indices `li` and `lj` that specify the \( k\)-face of the cell containing `query`.

If the \( k\)-face is a cell, `li` and `lj` have no meaning; if it is a facet (resp. vertex), `li` gives the index of the facet (resp. vertex) and `lj` has no meaning; if it is an edge, `li` and `lj` give the indices of its vertices.

If there is no vertex in the triangulation yet, `lt` is set to `EMPTY` and `locate` returns the default constructed handle.

The optional argument `start` is used as a starting place for the search.

Precondition
  `query` lies in the original domain `domain`.

## ◆ locate() [3/4]

template<typename Traits , typename TDS >

Cell_handle CGAL::Periodic_3_triangulation_3< Traits, TDS >::locate | ( | const Point & | query,
|  | Offset & | locate_offset,
|  | Cell_handle | start = `Cell_handle()`
| ) |  | const

Returns the cell that contains the query in its interior.

If `query` lies on a facet, an edge or on a vertex, one of the cells having `query` on its boundary is returned.

`locate_offset` is the offset that must be used by the function periodic_tetrahedron() together with the returned cell, so that the constructed Periodic_tetrahedron contains the query point.

The optional argument `start` is used as a starting place for the search.

Precondition
  `query` lies in the original domain `domain`.

## ◆ locate() [4/4]

template<typename Traits , typename TDS >

Cell_handle CGAL::Periodic_3_triangulation_3< Traits, TDS >::locate | ( | const Point & | query,
|  | Offset & | locate_offset,
|  | Locate_type & | lt,
|  | int & | li,
|  | int & | lj,
|  | Cell_handle | start = `Cell_handle()`
| ) |  | const

The \( k\)-face that contains `query` in its interior is returned, by means of the cell returned together with `lt`, which is set to the locate type of the query (`VERTEX, EDGE, FACET, CELL`) and two indices `li` and `lj` that specify the \( k\)-face of the cell containing `query`.

If the \( k\)-face is a cell, `li` and `lj` have no meaning; if it is a facet (resp. vertex), `li` gives the index of the facet (resp. vertex) and `lj` has no meaning; if it is an edge, `li` and `lj` give the indices of its vertices.

If there is no vertex in the triangulation yet, `lt` is set to `EMPTY` and `locate` returns the default constructed handle.

`locate_offset` is the offset that must be used by the function periodic_tetrahedron() together with the returned cell, so that the constructed Periodic_tetrahedron contains the query point.

The optional argument `start` is used as a starting place for the search.

Precondition
  `query` lies in the original domain `domain`.

## ◆ mirror_index()

template<typename Traits , typename TDS >

int CGAL::Periodic_3_triangulation_3< Traits, TDS >::mirror_index | ( | Cell_handle | c,
|  | int | i
| ) |  | const

Returns the index of `c` in its \( i^{th}\) neighbor.

Precondition
  \( i \in\{0, 1, 2, 3\}\).

## ◆ mirror_vertex()

template<typename Traits , typename TDS >

Vertex_handle CGAL::Periodic_3_triangulation_3< Traits, TDS >::mirror_vertex | ( | Cell_handle | c,
|  | int | i
| ) |  | const

Returns the vertex of the \( i^{th}\) neighbor of `c` that is opposite to `c`.

Precondition
  \( i \in\{0, 1, 2, 3\}\).

## ◆ number_of_cells()

template<typename Traits , typename TDS >

size_type CGAL::Periodic_3_triangulation_3< Traits, TDS >::number_of_cells | ( |  | ) | const

Returns the number of cells.

Counts all cells that are representatives of the same tetrahedron in \( \mathbb T_c^3\) as one cell.

## ◆ number_of_edges()

template<typename Traits , typename TDS >

size_type CGAL::Periodic_3_triangulation_3< Traits, TDS >::number_of_edges | ( |  | ) | const

Returns the number of edges.

Counts all edges that are representatives of the same segment in \( \mathbb T_c^3\) as one edge.

## ◆ number_of_facets()

template<typename Traits , typename TDS >

size_type CGAL::Periodic_3_triangulation_3< Traits, TDS >::number_of_facets | ( |  | ) | const

Returns the number of facets.

Counts all facets that are representatives of the same triangle in \( \mathbb T_c^3\) as one facet.

## ◆ number_of_sheets()

template<typename Traits , typename TDS >

Covering_sheets CGAL::Periodic_3_triangulation_3< Traits, TDS >::number_of_sheets | ( |  | ) | const

This is an advanced function.

Advanced

Returns the number of sheets of the covering space the triangulation is currently computed in.

## ◆ number_of_stored_cells()

template<typename Traits , typename TDS >

size_type CGAL::Periodic_3_triangulation_3< Traits, TDS >::number_of_stored_cells | ( |  | ) | const

Returns the number of cells in the data structure.

This is the same as the number of sheets times `number_of_cells()`.

## ◆ number_of_stored_edges()

template<typename Traits , typename TDS >

size_type CGAL::Periodic_3_triangulation_3< Traits, TDS >::number_of_stored_edges | ( |  | ) | const

Returns the number of edges in the data structure.

This is the same as the number of sheets times `number_of_edges()`.

## ◆ number_of_stored_facets()

template<typename Traits , typename TDS >

size_type CGAL::Periodic_3_triangulation_3< Traits, TDS >::number_of_stored_facets | ( |  | ) | const

Returns the number of facets in the data structure.

This is the same as the number of sheets times `number_of_facets()`.

## ◆ number_of_stored_vertices()

template<typename Traits , typename TDS >

size_type CGAL::Periodic_3_triangulation_3< Traits, TDS >::number_of_stored_vertices | ( |  | ) | const

Returns the number of vertices in the data structure.

This is the same as the number of sheets times `number_of_vertices()`.

## ◆ number_of_vertices()

template<typename Traits , typename TDS >

size_type CGAL::Periodic_3_triangulation_3< Traits, TDS >::number_of_vertices | ( |  | ) | const

Returns the number of vertices.

Counts all vertices that are representatives of the same point in \( \mathbb T_c^3\) as one vertex.

## ◆ operator=()

template<typename Traits , typename TDS >

Periodic_3_triangulation_3 & CGAL::Periodic_3_triangulation_3< Traits, TDS >::operator= | ( | const Periodic_3_triangulation_3< Traits, TDS > & | tr | ) |

The triangulation `tr` is duplicated, and modifying the copy after the duplication does not modify the original.

The previous triangulation held by `t` is deleted.

## ◆ periodic_point() [1/2]

template<typename Traits , typename TDS >

Periodic_point CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_point | ( | const Cell_handle | c,
|  | int | i
| ) |  | const

If `t` is represented in the 1-sheeted covering space, this function returns the periodic point given by the \( i\)-th vertex of cell `c`, that is the point in the original domain and the offset of the vertex in `c`.

If `t` is represented in the 27-sheeted covering space, this offset is possibly added to another offset determining the periodic copy.

Precondition
  \( i \in\{0,1,2,3\}\)

## ◆ periodic_point() [2/2]

template<typename Traits , typename TDS >

Periodic_point CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_point | ( | const Vertex_handle | v | ) | const

Returns the periodic point given by vertex `v`.

If `t` is represented in the 1-sheeted covering space, the offset is always zero. Otherwise `v` can correspond to a periodic copy outside `domain` of an input point.

## ◆ periodic_points_begin()

template<typename Traits , typename TDS >

Periodic_point_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_points_begin | ( | Iterator_type | it = `STORED` | ) | const

Iterates over the points of the triangulation.

Its behavior is defined by the `Iterator_type` `it` as described on CGAL::Periodic_3_triangulation_3::Iterator_type.

## ◆ periodic_points_end()

template<typename Traits , typename TDS >

Periodic_point_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_points_end | ( | Iterator_type | it = `STORED` | ) | const

Past-the-end iterator.

Note that to match another `Periodic_point_iterator` both must have the same `Iterator_type` `it`.

## ◆ periodic_segment() [1/2]

template<typename Traits , typename TDS >

Periodic_segment CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_segment | ( | const Cell_handle | c,
|  | int | i,
|  | int | j
| ) |  | const

Returns the periodic segment formed by the two point-offset pairs corresponding to the two vertices of edge `(c,i,j)`.

Precondition
  \( i,j \in\{0,1,2,3\}\), \( i\neq j\)

## ◆ periodic_segment() [2/2]

template<typename Traits , typename TDS >

Periodic_segment CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_segment | ( | const Cell_handle | c,
|  | Offset | offset,
|  | int | i,
|  | int | j
| ) |  | const

Returns the periodic segment formed by the two point-offset pairs corresponding to the two vertices of edge `(c,i,j)`.

A translation in accordance with `offset` is applied on the point-offet pairs.

Precondition
  \( i,j \in\{0,1,2,3\}\), \( i\neq j\)

## ◆ periodic_segments_begin()

template<typename Traits , typename TDS >

Periodic_segment_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_segments_begin | ( | Iterator_type | it = `STORED` | ) | const

Iterates over the segments of the triangulation.

Its behavior is defined by the `Iterator_type` `it` as described on CGAL::Periodic_3_triangulation_3::Iterator_type.

## ◆ periodic_segments_end()

template<typename Traits , typename TDS >

Periodic_segment_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_segments_end | ( | Iterator_type | it = `STORED` | ) | const

Past-the-end iterator.

Note that to match another `Periodic_segment_iterator` both must have the same `Iterator_type` `it`.

## ◆ periodic_tetrahedra_begin()

template<typename Traits , typename TDS >

Periodic_tetrahedron_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_tetrahedra_begin | ( | Iterator_type | it = `STORED` | ) | const

Iterates over the tetrahedra of the triangulation.

Its behavior is defined by the `Iterator_type` `it` as described on CGAL::Periodic_3_triangulation_3::Iterator_type.

## ◆ periodic_tetrahedra_end()

template<typename Traits , typename TDS >

Periodic_tetrahedron_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_tetrahedra_end | ( | Iterator_type | it = `STORED` | ) | const

Past-the-end iterator.

Note that to match another `Periodic_tetrahedron_iterator` both must have the same `Iterator_type` `it`.

## ◆ periodic_tetrahedron()

template<typename Traits , typename TDS >

Periodic_tetrahedron CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_tetrahedron | ( | const Cell_handle | c,
|  | Offset | offset
| ) |  | const

Returns the periodic tetrahedron formed by the four point-offset pairs corresponding to the four vertices of `c`.

A translation in accordance with `offset` is applied on the point-offet pairs.

## ◆ periodic_triangle() [1/2]

template<typename Traits , typename TDS >

Periodic_triangle CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_triangle | ( | const Cell_handle | c,
|  | int | i
| ) |  | const

Returns the periodic triangle formed by the three point-offset pairs corresponding to the three vertices of facet `(c,i)`.

The triangle is oriented so that its normal points to the inside of cell `c`.

Precondition
  \( i \in\{0,1,2,3\}\)

## ◆ periodic_triangle() [2/2]

template<typename Traits , typename TDS >

Periodic_triangle CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_triangle | ( | const Cell_handle | c,
|  | Offset | offset,
|  | int | i
| ) |  | const

Returns the periodic triangle formed by the three point-offset pairs corresponding to the three vertices of facet `(c,i)`.

A translation in accordance with `offset` is applied on the point-offet pairs.

The triangle is oriented so that its normal points to the inside of cell `c`.

Precondition
  \( i \in\{0,1,2,3\}\)

## ◆ periodic_triangles_begin()

template<typename Traits , typename TDS >

Periodic_triangle_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_triangles_begin | ( | Iterator_type | it = `STORED` | ) | const

Iterates over the triangles of the triangulation.

Its behavior is defined by the `Iterator_type` `it` as described on CGAL::Periodic_3_triangulation_3::Iterator_type.

## ◆ periodic_triangles_end()

template<typename Traits , typename TDS >

Periodic_triangle_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::periodic_triangles_end | ( | Iterator_type | it = `STORED` | ) | const

Past-the-end iterator.

Note that to match another `Periodic_triangle_iterator` both must have the same `Iterator_type` `it`.

## ◆ set_domain()

template<typename Traits , typename TDS >

void CGAL::Periodic_3_triangulation_3< Traits, TDS >::set_domain | ( | const Iso_cuboid | dom | ) |

This is an advanced function.

Advanced

Changes the domain. Note that this function calls `clear()`, i.e., it erases the existing triangulation.

## ◆ side_of_cell()

template<typename Traits , typename TDS >

Bounded_side CGAL::Periodic_3_triangulation_3< Traits, TDS >::side_of_cell | ( | const Point & | p,
|  | Cell_handle | c,
|  | Locate_type & | lt,
|  | int & | li,
|  | int & | lj
| ) |  | const

Returns a value indicating on which side of the oriented boundary of `c` the point `p` lies.

More precisely, it returns:

- `ON_BOUNDED_SIDE` if `p` is inside the cell.
- `ON_BOUNDARY` if `p` on the boundary of the cell. Then `lt` together with `li` and `lj` give the precise location on the boundary. (See the descriptions of the `locate` methods.)
- `ON_UNBOUNDED_SIDE` if `p` lies outside the cell.
  Precondition
    `query` lies in the original domain `domain`.

## ◆ swap()

template<typename Traits , typename TDS >

void CGAL::Periodic_3_triangulation_3< Traits, TDS >::swap | ( | Periodic_3_triangulation_3< Traits, TDS > & | tr | ) |

The triangulations `tr` and `t` are swapped.

`t`.`swap(tr)` should be preferred to `t` = `tr` or to `t(tr)` if `tr` is deleted after that. Indeed, there is no copy of cells and vertices, thus this method runs in constant time.

## ◆ tds()

template<typename Traits , typename TDS >

Triangulation_data_structure & CGAL::Periodic_3_triangulation_3< Traits, TDS >::tds | ( |  | ) |

This is an advanced function.

Advanced

Returns a reference to the triangulation data structure.

The responsibility of keeping a valid triangulation belongs to the user when using advanced operations allowing a direct manipulation of the `tds`. This method is mainly a help for users implementing their own triangulation algorithms.

## ◆ unique_vertices_begin()

template<typename Traits , typename TDS >

Unique_vertex_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::unique_vertices_begin | ( |  | ) | const

Starts at an arbitrary vertex.

Iterates over all vertices whose corresponding points lie in the original domain, i.e. for each set of periodic copies the `Unique_vertex_iterator` iterates over exactly one representative. Returns `unique_vertices_end()` if `t`.`number_of_vertices()` \( =0\).

## ◆ vertices_begin()

template<typename Traits , typename TDS >

Vertex_iterator CGAL::Periodic_3_triangulation_3< Traits, TDS >::vertices_begin | ( |  | ) | const

Starts at an arbitrary vertex.

Iterates over all vertices. Returns `vertices_end()` if `t`.`number_of_vertices()` \( =0\).

## Friends And Related Function Documentation

## ◆ operator<<()

template<typename Traits , typename TDS >

ostream & operator<< | ( | ostream & | os,
|  | const Periodic_3_triangulation_3< Traits, TDS > & | t
| ) |  |
| related

Writes the triangulation `t` into `os`.

The information in the `iostream` is:

- the original domain
- the number of sheets of the covering space as in `number_of_sheets()`
- the number of vertices
- the non-combinatorial information of vertices (point resp. point-offset pairs, etc.)
- the number of cells
- the indices of the vertices of each cell
- the indices of the neighbors of each cell, where the index corresponds to the preceding list of cells
- the offsets corresponding to the vertices of the cells
- the non-combinatorial information of each cell

## ◆ operator==()

template<typename Traits , typename TDS >
template<class Traits , class TDS1 , class TDS2 >

bool operator== | ( | const Periodic_3_triangulation_3< Traits, TDS1 > & | t1,
|  | const Periodic_3_triangulation_3< Traits, TDS2 > & | t2
| ) |  |
| related

Equality operator.

Returns true iff there exist a bijection between the vertices of `t1` and those of `t2` and a bijection between the cells of `t1` and those of `t2`, which preserve the geometry of the triangulation, that is, the points of each corresponding pair of vertices are equal, and the tetrahedra corresponding to each pair of cells are equal (up to a permutation of their vertices).

## ◆ operator>>()

template<typename Traits , typename TDS >

istream & operator>> | ( | istream & | is,
|  | Periodic_3_triangulation_3< Traits, TDS > & | t
| ) |  |
| related

Reads a triangulation from `is` and stores it in `t`.

Precondition
  `is` has the below described format.

The information in the `iostream` is:

- the original domain
- the number of sheets of the covering space as in `number_of_sheets()`
- the number of vertices
- the non-combinatorial information of vertices (point resp. point-offset pairs, etc.)
- the number of cells
- the indices of the vertices of each cell
- the indices of the neighbors of each cell, where the index corresponds to the preceding list of cells
- the offsets corresponding to the vertices of the cells
- the non-combinatorial information of each cell