updated doc of Triangulation data structure

This commit is contained in:
Mariette Yvinec 2002-04-18 15:21:08 +00:00
parent 08b8545fd2
commit 0f733ca49b
14 changed files with 322 additions and 448 deletions

View File

@ -21,7 +21,10 @@ The concept \ccRefName\ describes the requirements for
the second template parameter of the basic triangulation class
\ccc{Triangulation_2<Traits,Tds>}.
The concept can be seen as a container for the
faces and vertices maintaining incidence and adjacency relations.
faces and vertices of the triangulation.
The \ccRefName\
maintains incidence and adjacency relations
among vertices and faces.
The triangulation data structure
is responsible for the combinatorial integrity of the triangulation
(i. e. proper incidence and adjacency relations among vertices
@ -39,30 +42,36 @@ and do not depend on the geometric embedding.
%\ccGlue
%\ccTypedef{typedef Fb Face_base;}{the \ccc{Face_base}}
%\ccGlue
\ccNestedType{Vertex} {}
\ccNestedType{Vertex} { The vertex type. Requirements for this type
are decribed in \ccRefPage{TriangulationDataStructure_2::Vertex}}
\ccGlue
\ccNestedType{Face}{}
\ccNestedType{Face}{The face type. Requirements for this type
are decribed in \ccRefPage{TriangulationDataStructure_2::Face}}
Vertices and cells are acessed via \ccc{handles}.
\ccc{handles} are trivial pointers supporting
the two dereference operators \ccc{operator*} and \ccc{operator->}.
\ccNestedType{Vertex_handle}{Handle to a vertex}
\ccGlue
\ccTypedef{typedef std::pair<Face*,int> Edge;}{ Edge type.}
\ccNestedType{Facet_handle}{Handle to a facet}
\ccTypedef{typedef std::pair<Facet_handle,int> Edge;}{ Edge type.}
The following iterators allow one to visit all the vertices, edges
and faces
of a triangulation data structure. They are all
bidirectional, non-mutable iterators.
\ccNestedType{Face_iterator}{}
\ccGlue
\ccTypedef{typedef std::list<Edge> List_edges;}{ Lists of edges.}
To ensure all the \textbf{flexibility} of class \ccc{Triangulation_2}
described in \ccRefPage{CGAL::Triangulation_2<Traits,Tds>}
and in Chapter~\ref{Chapter_2D_Triangulations}, a model of
\ccRefName derives its \ccc{Vertex} and \ccc{Face} types
from two template parameters \ccc{Vb} and \ccc{Fb}.
The parameters \ccc{Vb} and \ccc{Fb}
have to be instantiated respectively
by models of \ccc{TriangulationVertexBase_2} and
\ccc{TriangulationFaceBase_2}.
\ccNestedType{Edge_iterator}{}
\ccGlue
\ccNestedType{Vertex_iterator}{}
The following circulators allow to visit all the vertices, edges and faces
incident to a given vertex. They are all bidirectional and non mutable.
The following circulators allow to visit all the edges or faces
incident to a given vertex and all the vertices
adjacent to a givan vertex. They are all bidirectional and non mutable.
\ccNestedType{Face_circulator}{}
\ccGlue
\ccNestedType{Edge_circulator}{}
@ -114,30 +123,32 @@ i.e. faces of dimension equal to the dimension
of the triangulation. This is the actual
number of faces stored in the triangulation data structure.}
\begin{ccAdvanced}
\ccHeading{Setting}
\ccMethod{void set_number_of_vertices(int n);}{}
\ccGlue
\ccMethod{void set_dimension (int n);}{}
\end{ccAdvanced}
\ccHeading{Queries}
\ccMethod{bool is_vertex(const Vertex* v) const;}{returns true if
\ccMethod{bool is_vertex(Vertex_handle v) const;}{returns true if
\ccc{v} is a vertex of \ccVar.}
\ccGlue
\ccMethod{bool is_edge(const Vertex* va, const Vertex* vb) const;}{returns true if
\ccMethod{bool is_edge(Vertex_handle va, Vertex_handle vb) const;}{returns true if
\ccc{va vb} is an edge of \ccVar.}
\ccGlue
\ccMethod{bool is_edge(const Vertex* va, const Vertex* vb, Face* &fr,
\ccMethod{bool is_edge(Vertex_handle va, Vertex_handle vb, Face_handle &fr,
int &i) const;}{as previous. In addition, if true is returned
\ccc{fr} and \ccc{i} are set such that the pair \ccc{(fr,i)}
is the descrition
of the ordered edge \ccc{va vb}.}
\ccGlue
\ccMethod{bool is_face(const Vertex* v1, const Vertex* v2, const
\ccMethod{bool is_face(Vertex_handle v1, Vertex_handle v2, const
Vertex* v3) const;}{\ccc{true} if there is a face having \ccc{v1}, \ccc{v2} and\ccc{v3}
as vertices.}
\ccGlue
\ccMethod{bool is_face(const Vertex* v1, const Vertex* v2, const Vertex* v3,
Face* &fr) const;}{as above. In addition, if \ccc{true} is returned, fr is a pointer
\ccMethod{bool is_face(Vertex_handle v1, Vertex_handle v2, Vertex_handle v3,
Face_handle &fr) const;}{as above. In addition, if \ccc{true} is returned, fr is a pointer
to the face with \ccc{v1}, \ccc{v2} and \ccc{v3}
as vertices.}
@ -145,8 +156,8 @@ as vertices.}
The following modifier member functions guarantee
the combinatorial validity of the resulting triangulation.
\ccThree{void}{tds.remove_second(Vertex* v)x}{}
\ccMethod{void flip(Face* f, int i);}{exchanges the edge incident to
\ccThree{void}{tds.remove_second(Vertex_handle v)x}{}
\ccMethod{void flip(Face_handle f, int i);}{exchanges the edge incident to
\ccc{f} and \ccc{f->neighbor(i)} with the other
diagonal of the quadrilateral formed by \ccc{f} and \ccc{f->neighbor(i)}.}
@ -168,21 +179,21 @@ diagonal of the quadrilateral formed by \ccc{f} and \ccc{f->neighbor(i)}.}
\end{figure}
\ccMethod{Vertex* insert_first();} {creates the first
\ccMethod{Vertex_handle insert_first();} {creates the first
vertex and returns a pointer to it.}
\ccGlue
\ccMethod{Vertex* insert_second();} {creates the second
\ccMethod{Vertex_handle insert_second();} {creates the second
vertex and returns a pointer to it.}
\ccMethod{Vertex* insert_in_edge(Face* f, int i);} {adds a
\ccMethod{Vertex_handle insert_in_edge(Face_handle f, int i);} {adds a
vertex \ccc{v} splitting
edge \ccc{i} of face \ccc{f}. Return a pointer to \ccc{v}.}
\ccGlue
\ccMethod{Vertex* insert_in_face(Face* f);} {adds a vertex
\ccMethod{Vertex_handle insert_in_face(Face_handle f);} {adds a vertex
\ccc{v} splitting face
\ccc{f} in three. Face \ccc{f} is modified,
two new faces are created. Return a pointer to \ccc{v} }
\ccGlue
\ccMethod{Vertex* insert_dim_up(Vertex* w, bool orient=true);} {adds
\ccMethod{Vertex_handle insert_dim_up(Vertex_handle w, bool orient=true);} {adds
a vertex \ccc{v}, increasing by one the dimension of the triangulation.
Vertex \ccc{v} and the existing vertex \ccc{w} are linked to all
the vertices of the triangulation.
@ -206,7 +217,7 @@ faces. A pointer to vertex \ccc{v} is returned.
\ccMethod{void remove_degree_3(Vertex* v, Face *f=NULL);}
\ccMethod{void remove_degree_3(Vertex_handle v, Face *f=NULL);}
{removes a vertex of degree 3. Two of the incident faces are destroyed,
the third one is modified.
If parameter \ccc{f} is specified, it has to be a face incident to \ccc{v}
@ -217,12 +228,12 @@ and, if specified, face \ccc{f} is incident to \ccc{v}.}}
\ccMethod{void remove_second(Vertex* v);}{removes the before last
\ccMethod{void remove_second(Vertex_handle v);}{removes the before last
vertex.}
\ccGlue
\ccMethod{void remove_first(Vertex* v);}{removes the last vertex.}
\ccMethod{void remove_first(Vertex_handle v);}{removes the last vertex.}
\ccGlue
\ccMethod{void remove_dim_down(Vertex* v);}
\ccMethod{void remove_dim_down(Vertex_handle v);}
{removes vertex \ccc{v} incident to all other vertices
and decreases by one the dimension of the triangulation.
\ccPrecond{if the dimension is 2, the number of vertices is more than
@ -237,13 +248,13 @@ They do not guarantee the combinatorial validity
of the resulting triangulation.
\ccMethod{ template< class EdgeIt>
Vertex* star_hole(EdgeIt edge_begin,EdgeIt edge_end);}
Vertex_handle star_hole(EdgeIt edge_begin,EdgeIt edge_end);}
{creates a new vertex \ccc{v} and use it to star the hole
whose boundary is described by the sequence of edges \ccc{[edge_begin,
edge_end[}. Returns a pointer to the vertex.}
\ccGlue
\ccMethod{ template< class EdgeIt, class FaceIt>
Vertex* star_hole(EdgeIt edge_begin,
Vertex_handle star_hole(EdgeIt edge_begin,
EdgeIt edge_end,
FaceIt face_begin,
FaceIt face_end);}
@ -252,14 +263,14 @@ first recycles faces in the sequence \ccc{[face_begin,
face_end[} and create new ones when the sequence is exhausted.}
\ccGlue
\ccMethod{ template< class EdgeIt>
void star_hole(Vertex* v, EdgeIt edge_begin, EdgeIt edge_end);}
void star_hole(Vertex_handle v, EdgeIt edge_begin, EdgeIt edge_end);}
{uses vertex v to star the hole
whose boundary is described by the sequence of edges\ccc{[edge_begin,
edge_end[}.
}
\ccGlue
\ccMethod{ template< class EdgeIt, class FaceIt>
void star_hole(Vertex* v,
void star_hole(Vertex_handle v,
EdgeIt edge_begin,
EdgeIt edge_end,
FaceIt face_begin,
@ -267,44 +278,44 @@ edge_end[}.
{same as above, recycling faces in the sequence \ccc{[face_begin,
face_end[ . } }
%\ccMethod{Vertex* star_hole(List_edges& hole);}
%\ccMethod{Vertex_handle star_hole(List_edges& hole);}
%{create a new vertex \ccc{v} and use it to star the hole \ccc{hole}.}
%\ccGlue
%\ccMethod{void star_hole(Vertex* v, List_edges& hole);}
%\ccMethod{void star_hole(Vertex_handle v, List_edges& hole);}
%{stars the hole \ccc{hole} using vertex \ccc{v}.}
\ccGlue
\ccMethod{void make_hole(Vertex* v, List_edges& hole);}
\ccMethod{void make_hole(Vertex_handle v, List_edges& hole);}
{removes the vertex v, and store in \ccc{hole} the list of edges
on the boundary of the hole.}
\ccMethod{Vertex* create_vertex();}{adds a new vertex.}
\ccMethod{Vertex_handle create_vertex();}{adds a new vertex.}
\ccGlue
\ccMethod{Face* create_face(Face* f1, int i1, Face* f2, int i2, Face*
\ccMethod{Face_handle create_face(Face_handle f1, int i1, Face_handle f2, int i2, Face_handle
f3, int i3);}{adds a face which is the neighbor \ccc{i1} of \ccc{f1},
\ccc{i2} of \ccc{f2} and \ccc{i3} of \ccc{f3}.}
\ccGlue
\ccMethod{Face* create_face(Face* f1, int i1, Face* f2, int i2);}
\ccMethod{Face_handle create_face(Face_handle f1, int i1, Face_handle f2, int i2);}
{adds a face which is the neighbor \ccc{i1} of \ccc{f1},
and the neighbor \ccc{i2} of \ccc{f2}.}
\ccGlue
\ccMethod{Face* create_face(Face* f1, int i1, Vertex* v);}
\ccMethod{Face_handle create_face(Face_handle f1, int i1, Vertex_handle v);}
{adds a face which is the neighbor \ccc{i1} of \ccc{f1},
and has \ccc{v} as vertex.}
\ccGlue
\ccMethod{ Face* create_face(Vertex* v1, Vertex* v2, Vertex* v3);}
\ccMethod{ Face_handle create_face(Vertex_handle v1, Vertex_handle v2, Vertex_handle v3);}
{adds a face with vertices \ccc{v1}, \ccc{v2} and \ccc{v3}.}
\ccGlue
\ccMethod{Face* create_face(Vertex* v1, Vertex* v2, Vertex* v3,
Face* f1, Face* f2, Face* f3);}
\ccMethod{Face_handle create_face(Vertex_handle v1, Vertex_handle v2, Vertex_handle v3,
Face_handle f1, Face_handle f2, Face_handle f3);}
{adds a face with vertices \ccc{v1}, \ccc{v2} and \ccc{v3},
and neighbors \ccc{f1}, \ccc{f2}, \ccc{f3}.}
\ccGlue
\ccMethod{Face* create_face();}
\ccMethod{Face_handle create_face();}
{adds a face whose vertices and neighbors are set to NULL.}
\ccGlue
\ccMethod{void delete_face(Face*);}{deletes a face.}
\ccMethod{void delete_face(Face_handle );}{deletes a face.}
\ccGlue
\ccMethod{void delete_vertex(Vertex*);}{deletes a vertex.}
\ccMethod{void delete_vertex(Vertex_handle );}{deletes a vertex.}
\end{ccAdvanced}
\ccHeading{Traversing the triangulation}
@ -335,7 +346,7 @@ between numbers of vertices, faces and edges.}
\ccHasModels
\ccc{CGAL::Triangulation_default_data_structure_2<Tds_traits,Vb,Fb>}, \\
\ccc{CGAL::Triangulation_data_structure_2<Tds_traits,Vb,Fb>}, \\
\ccc{CGAL::Triangulation_data_structure_using_list_2<Vb,Fb>}.
\ccSeeAlso

View File

@ -1,38 +1,36 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Triangulation_data_structure_using_list_2.tex
% | Reference manual page: Triangulation_data_structure_2.tex
% +------------------------------------------------------------------------+
% | 07.04.2000 Author
% | Package: Package
% | 18.04.2002 Mariette Yvinec
% | Package: Triangulation_2
% |
\RCSdef{\RCSTriangulationdatastructureusinglistRev}{$Revision$}
\RCSdefDate{\RCSTriangulationdatastructureusinglistDate}{$Date$}
\RCSdef{\RCSTriangulationdatastructureRev}{$Revision$}
\RCSdefDate{\RCSTriangulationdatastructureDate}{$Date$}
% |
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Triangulation_data_structure_using_list_2<Vb,Fb>} %% add template arg's if necessary
\begin{ccRefClass}{Triangulation_data_structure_2<Vb,Fb>} %% add template arg's if necessary
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[class]{} %% add further index entries
\ccCreationVariable{tds}
\ccDefinition
The class \ccRefName\ can be used as model
for the \ccc{TriangulationDataStructure_2} concept
for any
orientable triangulation. It uses a \stl list to store the
full dimensional faces of the triangulation.
The class \ccRefName\ is a model
for the \ccc{TriangulationDataStructure_2} concept.
It can be used to represent an orientable 2D triangulation
embedded in a space of any dimension.
\ccInclude{Triangulation_data_structure_using_list_2.h}
\ccInclude{Triangulation_data_structure_2.h}
\ccIsModel
\ccc{TriangulationDataStructure_2}
\end{ccRefClass}
% +------------------------------------------------------------------------+

View File

@ -1,91 +0,0 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Triangulation_default_data_structure_2.tex
% +------------------------------------------------------------------------+
% | 07.04.2000 Author
% | Package: Package
% |
\RCSdef{\RCSTriangulationdefaultdatastructureRev}{$Revision$}
\RCSdefDate{\RCSTriangulationdefaultdatastructureDate}{$Date$}
% |
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Triangulation_default_data_structure_2<Traits,Vb,Fb>}
%% add template arg's if necessary
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[class]{} %% add further index entries
\ccCreationVariable{tds}
\ccDefinition
The class \ccRefName\ is the default model for the concept
\ccc{TriangulationDataStructure_2}.
The class \ccRefName
is highly economic with respect to memory space but its use is
restricted
to planar embedded triangulation.
As required this class has two template parameters \ccc{Vb} anf \ccc{Fb}
which have
to be models for respectively the
\ccc{TriangulationVertexBase_2} and
the \ccc{TriangulationFaceBase_2} concepts.
In addition, the class \ccClassTemplateName\ has a first template parameter
which is a geometric traits class. This may be surprising because
the triangulation data structure is supposed to deal only with the combinatorial
aspect of the triangulation and not with any geometric embedding
The reason for that is the following.
The class \ccRefName\ does not use any additional data structure
such as a list or a vector to act as a container for faces and vertices.
The iterators which allows to visit all faces and vertices of the
triangulation
data structure
is implemented using an implicit tree structure over the faces
as described by
de Berg, van Oostrum, and Overmars,
in Proc.\ 12th Annual Symp.\ on Comput.\ Geom.,
1996, pages C5--C6. This tree structure is based on the planar
geometric embedding
the triangulation. Each face
can find its parent
and its children using only simple comparisons on the
coordinates of the points embedding its vertices.
Thus the tree structure may remain implicit
and does not require any additional memory.
The requirements concerning the geometric traits \ccc{Traits} of
\ccc{Triangulation_default_data_structure_2}
are very light and form a subset of the concept
\ccc{TriangulationTraits_2}.
This class is required to provide a type \ccc{Point}
and the coordinate comparison functions \ccc{compare_x(Point p0, Point p1)} and
\ccc{compare_y(Point p0, Point p1)}. The point type
defined by the geometric traits class of the triangulation data structure
has to be the same
as the point type defined by the geometric traits of the triangulation.
This is achieved if the same model is used for both traits classes
which is recommended but not compulsory.
\ccInclude{Triangulation_default_data_structure_2.h}
\ccIsModel
\ccc{TriangulationDataStructure_2}
\ccSeeAlso
\ccc{TriangulationDataStructure_2},
\ccc{CGAL::Triangulation_data_structure_using_list_2<Vb,Fb>}.
\end{ccRefClass}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
% EOF
% +------------------------------------------------------------------------+

View File

@ -43,71 +43,73 @@ except the iterators and the circulators.
\begin{ccAdvanced}
\ccCreation
For user defined triangulation algorithms, faces need to
be explicitly constructed and linked to their neighbors.
User defined triangulation algorithms that needs to
to define new faces and delete non longer used ones,
have to call the methods \ccc{create_face} and
\ccc{delete_face()} of the triangulation data structure.
\ccConstructor{TriangulationDataStructure_2::Face();}{default
constructor,
initializes all vertices and neighbors
with \ccc{NULL}.}
%\ccConstructor{TriangulationDataStructure_2::Face();}{default
%constructor,
%initializes all vertices and neighbors
% with \ccc{NULL}.}
\ccConstructor{TriangulationDataStructure_2::Face(Vertex* v0,
Vertex* v1,
Vertex* v2);}
{introduces a face \ccVar, and initializes the vertices. The
neighbors are initialized with \ccc{NULL}.}
%\ccConstructor{TriangulationDataStructure_2::Face(Vertex_handle v0,
% Vertex_handle v1,
% Vertex_handle v2);}
%{introduces a face \ccVar, and initializes the vertices. The
%neighbors are initialized with \ccc{NULL}.}
\ccConstructor{TriangulationDataStructure_2::Face(Vertex* v0,
Vertex* v1,
Vertex* v2,
Face* n0,
Face* n1,
Face* n2);}
{introduces a face \ccVar, and initializes the vertices and the neighbors.}
%\ccConstructor{TriangulationDataStructure_2::Face(Vertex_handle v0,
% Vertex_handle v1,
% Vertex_handle v2,
% Face_handle n0,
% Face_handle n1,
% Face_handle n2);}
%{introduces a face \ccVar, and initializes the vertices and the neighbors.}
\ccHeading{Setting}
\ccThree{Vertex*}{f.has_vertex( Vertex* v, int& i)x}{}
\ccMethod{void set_vertex(int i, Vertex* v);}
\ccThree{Vertex_handle}{f.has_vertex( Vertex_handle v, int& i)x}{}
\ccMethod{void set_vertex(int i, Vertex_handle v);}
{sets vertex \ccc{i} to be \ccc{v}.
\ccPrecond $0\leq i \leq 2$.
}
\ccGlue
\ccMethod{void set_neighbor(int i, Face* n);}
\ccMethod{void set_neighbor(int i, Face_handle n);}
{sets neighbor \ccc{i} to be \ccc{n}.
\ccPrecond $0\leq i \leq 2$.
}
\ccGlue
\ccMethod{ void set_vertices();}{sets the vertices pointers to \ccc{NULL}.}
\ccGlue
\ccMethod{void set_vertices(Vertex* v0,
Vertex* v1,
Vertex* v2);}{sets the vertices pointers.}
\ccMethod{void set_vertices(Vertex_handle v0,
Vertex_handle v1,
Vertex_handle v2);}{sets the vertices pointers.}
\ccGlue
\ccMethod{void set_neighbors();} {sets the neighbors pointers to \ccc{NULL}.}
\ccGlue
\ccMethod{void set_neighbors(Face* n0,
Face* n1,
Face* n2);}{sets the neighbors pointers.}
\ccMethod{void set_neighbors(Face_handle n0,
Face_handle n1,
Face_handle n2);}{sets the neighbors pointers.}
\end{ccAdvanced}
\ccHeading{Vertex Access Functions}
\ccMethod{Vertex* vertex(int i) const;}
\ccMethod{Vertex_handle vertex(int i) const;}
{returns the vertex \ccc{i} of \ccVar.
\ccPrecond $0\leq i \leq 2$.}
\ccGlue
\ccMethod{int index(Vertex* v) const;}
\ccMethod{int index(Vertex_handle v) const;}
{returns the index of vertex \ccc{v} in \ccVar. \ccPrecond \ccc{v} is
a vertex of \ccVar}
\ccGlue
\ccMethod{bool has_vertex(Vertex* v) const;}
\ccMethod{bool has_vertex(Vertex_handle v) const;}
{returns \ccc{true} if \ccc{v} is a vertex of \ccVar.}
\ccGlue
\ccMethod{bool has_vertex(Vertex* v, int& i) const;}
\ccMethod{bool has_vertex(Vertex_handle v, int& i) const;}
{returns \ccc{true} if \ccc{v} is a vertex of \ccVar, and
computes the index \ccc{i} of \ccc{v} in \ccc{f}.}
@ -118,19 +120,19 @@ The neighbor with index \ccc{i} is the neighbor which is opposite
to the vertex with index \ccc{i}.
\ccMethod{Face* neighbor(int i) const;}
\ccMethod{Face_handle neighbor(int i) const;}
{returns the neighbor \ccc{i} of \ccVar.
\ccPrecond $0\leq i \leq 2$.
}
\ccGlue
\ccMethod{int index(Face* n) const;}
\ccMethod{int index(Face_handle n) const;}
{returns the index of face \ccc{n}.
\ccPrecond \ccc{n} is a neighbor of \ccVar.}
\ccGlue
\ccMethod{bool has_neighbor(Face* n) const;}
\ccMethod{bool has_neighbor(Face_handle n) const;}
{returns \ccc{true} if \ccc{n} is a neighbor of \ccVar.}
\ccGlue
\ccMethod{bool has_neighbor(Face* n, int& i) const;}
\ccMethod{bool has_neighbor(Face_handle n, int& i) const;}
{returns \ccc{true} if \ccc{n} is a neighbor of \ccVar, and
compute the index \ccc{i} of \ccc{n}.}
@ -138,7 +140,7 @@ compute the index \ccc{i} of \ccc{n}.}
\ccMethod{int mirror_index(int i) const;}
{index of \ccVar\ as a neighbor of \ccVar.\ccc{neighbor(i)}}
\ccGlue
\ccMethod{Vertex* mirror_vertex(int i) const;}
\ccMethod{Vertex_handle mirror_vertex(int i) const;}
{vertex of \ccVar.\ccc{neighbor(i)}} opposite to \ccVar.

View File

@ -41,29 +41,32 @@ except the iterators.
\begin{ccAdvanced}
\ccCreation
In order to obtain new vertices or destruct unused vertices, the user must
call the \ccc{create_vertex()} and \ccc{delete_vertex()} methods of the
triangulation data structure.
\ccConstructor{TriangulationDataStructure_2::Vertex();}{default
constructor.
The geometric information is
initialized by the default constructor of class \ccc{Point}.
The pointer to the incident face is initialized with \ccc{NULL}.}
%\ccConstructor{TriangulationDataStructure_2::Vertex();}{default
%constructor.
% The geometric information is
% initialized by the default constructor of class \ccc{Point}.
%The pointer to the incident face is initialized with \ccc{NULL}.}
\ccConstructor{TriangulationDataStructure_2::Vertex(const Point&
p);}
{introduces a vertex \ccVar, and initializes the geometric information.
The pointer to the incident face is initialized with \ccc{NULL}.}
%\ccConstructor{TriangulationDataStructure_2::Vertex(const Point&
%p);}
%{introduces a vertex \ccVar, and initializes the geometric information.
%The pointer to the incident face is initialized with \ccc{NULL}.}
\ccConstructor{TriangulationDataStructure_2::Vertex(const Point& p,
Face* f);}
{introduces a vertex \ccVar, and initializes the geometric information and
the pointer to the incident face.}
%\ccConstructor{TriangulationDataStructure_2::Vertex(const Point& p,
% Face_handle f);}
%{introduces a vertex \ccVar, and initializes the geometric information and
%the pointer to the incident face.}
\ccHeading{Setting}
\ccMethod{void set_point(const Point& p);}
{sets the geometric information to \ccc{p}.}
\ccGlue
\ccMethod{void set_face(Face* f);}
\ccMethod{void set_face(Face_handle f);}
{sets the incident face to \ccc{f}.}
@ -74,7 +77,7 @@ the pointer to the incident face.}
\ccMethod{Point point() const;}
{returns the geometric information of \ccVar.}
\ccGlue
\ccMethod{Face* face() const;}
\ccMethod{Face_handle face() const;}
{returns a face of the triangulation having \ccVar\ as vertex.}
\ccHeading{Traversal of the Adjacent Vertices, Incident Edges and Faces.}
@ -98,21 +101,21 @@ by any modification of anyone of the two faces incident to \ccc{v}
and \ccc{w}.
\ccMethod{Vertex_circulator
incident_vertices(Face* f=NULL) const;}{\ccPrecond If the
incident_vertices(Face_handle f=NULL) const;}{\ccPrecond If the
face \ccc{f} is given, it has to be incident to \ccVar\
and the circulators begins with a vertex of \ccc{f} :
the vertex \ccc{f->vertex(ccw(i))}
if \ccc{i} is the index of \ccVar\ in \ccc{f}.}
\ccGlue
\ccMethod{Edge_circulator
incident_edges(Face* f=NULL) const;}{\ccPrecond If the
incident_edges(Face_handle f=NULL) const;}{\ccPrecond If the
face \ccc{f} is given, it has to be incident to \ccVar\
and the circulators begins with an edge of \ccc{f} :
the edge \ccc{(f,cw(i))}
where \ccc{i} is the index of \ccVar\ in \ccc{f}.}
\ccGlue
\ccMethod{Face_circulator
incident_faces(Face* f=NULL) const;}{\ccPrecond If the
incident_faces(Face_handle f=NULL) const;}{\ccPrecond If the
face \ccc{f} is given, it has to be incident to \ccVar\
and the crculators begins with the face
\ccc{f}.}

View File

@ -15,13 +15,30 @@
\subsection*{Definition}
The triangulation data structure can be seen as a container
for the faces and vertices of a triangulation. This class takes care
for the faces and vertices of a triangulation. This class also takes care
of all combinatorial operation of the triangulation.
\cgal\ offers two models for the concept
\ccc{TriangulationDataStructure_2}.
Each of those models is templated by the base classes for the faces
and vertices of the triangulation.
The class \ccc{CGAL::Triangulation_data_structure_2<Vb,Fb>}
is a model of the concept \ccc{TriangulationDataStructure_2}.
To ensure all the \textbf{flexibility} of class \ccc{Triangulation_2}
described in \ccRefPage{CGAL::Triangulation_2<Traits,Tds>}
and in Chapter~\ref{Chapter_2D_Triangulations}, the model
\ccc{CGAL::Triangulation_data_structure_2<Vb,Fb>}
\ccRefName derives its \ccc{Vertex} and \ccc{Face} types
from the two template parameters \ccc{Vb} and \ccc{Fb}.
These parameters
have to be instantiated by models
of the concepts describing the base classes
for faces and vertices of a triangulation.
Therefore, in addition to the
data structure concept and default model,
we described in this chapter, different concepts and models of the
base classes for the vertices and faces of the different triangulations.
\subsection*{Concepts}
\ccRefConceptPage{TriangulationDataStructure_2}\\
@ -34,9 +51,7 @@ and vertices of the triangulation.
\ccRefConceptPage{RegularTriangulationFaceBase_2}
\subsection*{Classes}
\ccRefIdfierPage{CGAL::Triangulation_data_structure_using_list_2<Vb,Fb>}\\
\ccRefIdfierPage{CGAL::Triangulation_default_data_structure_2<Traits,Vb,Fb>}\\
\ccRefIdfierPage{CGAL::Triangulation_data_structure_2<Vb,Fb>}\\
\ccRefIdfierPage{CGAL::Triangulation_face_base_2<Traits>}\\
\ccRefIdfierPage{CGAL::Triangulation_vertex_base_2<Traits>}\\
\ccRefIdfierPage{CGAL::Regular_triangulation_face_base_2<Traits>}\\

View File

@ -15,8 +15,7 @@
\input{TDS_2_ref/TriangulationFaceBase_2.tex}
\input{TDS_2_ref/TriangulationHierarchyVertexBase_2.tex}
\input{TDS_2_ref/TriangulationVertexBase_2.tex}
\input{TDS_2_ref/Triangulation_data_structure_using_list_2.tex}
\input{TDS_2_ref/Triangulation_default_data_structure_2.tex}
\input{TDS_2_ref/Triangulation_data_structure_2.tex}
\input{TDS_2_ref/Triangulation_ds_face_2.tex}
\input{TDS_2_ref/Triangulation_ds_vertex_2.tex}
\input{TDS_2_ref/Triangulation_face_base_2.tex}

View File

@ -21,7 +21,10 @@ The concept \ccRefName\ describes the requirements for
the second template parameter of the basic triangulation class
\ccc{Triangulation_2<Traits,Tds>}.
The concept can be seen as a container for the
faces and vertices maintaining incidence and adjacency relations.
faces and vertices of the triangulation.
The \ccRefName\
maintains incidence and adjacency relations
among vertices and faces.
The triangulation data structure
is responsible for the combinatorial integrity of the triangulation
(i. e. proper incidence and adjacency relations among vertices
@ -39,30 +42,36 @@ and do not depend on the geometric embedding.
%\ccGlue
%\ccTypedef{typedef Fb Face_base;}{the \ccc{Face_base}}
%\ccGlue
\ccNestedType{Vertex} {}
\ccNestedType{Vertex} { The vertex type. Requirements for this type
are decribed in \ccRefPage{TriangulationDataStructure_2::Vertex}}
\ccGlue
\ccNestedType{Face}{}
\ccNestedType{Face}{The face type. Requirements for this type
are decribed in \ccRefPage{TriangulationDataStructure_2::Face}}
Vertices and cells are acessed via \ccc{handles}.
\ccc{handles} are trivial pointers supporting
the two dereference operators \ccc{operator*} and \ccc{operator->}.
\ccNestedType{Vertex_handle}{Handle to a vertex}
\ccGlue
\ccTypedef{typedef std::pair<Face*,int> Edge;}{ Edge type.}
\ccNestedType{Facet_handle}{Handle to a facet}
\ccTypedef{typedef std::pair<Facet_handle,int> Edge;}{ Edge type.}
The following iterators allow one to visit all the vertices, edges
and faces
of a triangulation data structure. They are all
bidirectional, non-mutable iterators.
\ccNestedType{Face_iterator}{}
\ccGlue
\ccTypedef{typedef std::list<Edge> List_edges;}{ Lists of edges.}
To ensure all the \textbf{flexibility} of class \ccc{Triangulation_2}
described in \ccRefPage{CGAL::Triangulation_2<Traits,Tds>}
and in Chapter~\ref{Chapter_2D_Triangulations}, a model of
\ccRefName derives its \ccc{Vertex} and \ccc{Face} types
from two template parameters \ccc{Vb} and \ccc{Fb}.
The parameters \ccc{Vb} and \ccc{Fb}
have to be instantiated respectively
by models of \ccc{TriangulationVertexBase_2} and
\ccc{TriangulationFaceBase_2}.
\ccNestedType{Edge_iterator}{}
\ccGlue
\ccNestedType{Vertex_iterator}{}
The following circulators allow to visit all the vertices, edges and faces
incident to a given vertex. They are all bidirectional and non mutable.
The following circulators allow to visit all the edges or faces
incident to a given vertex and all the vertices
adjacent to a givan vertex. They are all bidirectional and non mutable.
\ccNestedType{Face_circulator}{}
\ccGlue
\ccNestedType{Edge_circulator}{}
@ -114,30 +123,32 @@ i.e. faces of dimension equal to the dimension
of the triangulation. This is the actual
number of faces stored in the triangulation data structure.}
\begin{ccAdvanced}
\ccHeading{Setting}
\ccMethod{void set_number_of_vertices(int n);}{}
\ccGlue
\ccMethod{void set_dimension (int n);}{}
\end{ccAdvanced}
\ccHeading{Queries}
\ccMethod{bool is_vertex(const Vertex* v) const;}{returns true if
\ccMethod{bool is_vertex(Vertex_handle v) const;}{returns true if
\ccc{v} is a vertex of \ccVar.}
\ccGlue
\ccMethod{bool is_edge(const Vertex* va, const Vertex* vb) const;}{returns true if
\ccMethod{bool is_edge(Vertex_handle va, Vertex_handle vb) const;}{returns true if
\ccc{va vb} is an edge of \ccVar.}
\ccGlue
\ccMethod{bool is_edge(const Vertex* va, const Vertex* vb, Face* &fr,
\ccMethod{bool is_edge(Vertex_handle va, Vertex_handle vb, Face_handle &fr,
int &i) const;}{as previous. In addition, if true is returned
\ccc{fr} and \ccc{i} are set such that the pair \ccc{(fr,i)}
is the descrition
of the ordered edge \ccc{va vb}.}
\ccGlue
\ccMethod{bool is_face(const Vertex* v1, const Vertex* v2, const
\ccMethod{bool is_face(Vertex_handle v1, Vertex_handle v2, const
Vertex* v3) const;}{\ccc{true} if there is a face having \ccc{v1}, \ccc{v2} and\ccc{v3}
as vertices.}
\ccGlue
\ccMethod{bool is_face(const Vertex* v1, const Vertex* v2, const Vertex* v3,
Face* &fr) const;}{as above. In addition, if \ccc{true} is returned, fr is a pointer
\ccMethod{bool is_face(Vertex_handle v1, Vertex_handle v2, Vertex_handle v3,
Face_handle &fr) const;}{as above. In addition, if \ccc{true} is returned, fr is a pointer
to the face with \ccc{v1}, \ccc{v2} and \ccc{v3}
as vertices.}
@ -145,8 +156,8 @@ as vertices.}
The following modifier member functions guarantee
the combinatorial validity of the resulting triangulation.
\ccThree{void}{tds.remove_second(Vertex* v)x}{}
\ccMethod{void flip(Face* f, int i);}{exchanges the edge incident to
\ccThree{void}{tds.remove_second(Vertex_handle v)x}{}
\ccMethod{void flip(Face_handle f, int i);}{exchanges the edge incident to
\ccc{f} and \ccc{f->neighbor(i)} with the other
diagonal of the quadrilateral formed by \ccc{f} and \ccc{f->neighbor(i)}.}
@ -168,21 +179,21 @@ diagonal of the quadrilateral formed by \ccc{f} and \ccc{f->neighbor(i)}.}
\end{figure}
\ccMethod{Vertex* insert_first();} {creates the first
\ccMethod{Vertex_handle insert_first();} {creates the first
vertex and returns a pointer to it.}
\ccGlue
\ccMethod{Vertex* insert_second();} {creates the second
\ccMethod{Vertex_handle insert_second();} {creates the second
vertex and returns a pointer to it.}
\ccMethod{Vertex* insert_in_edge(Face* f, int i);} {adds a
\ccMethod{Vertex_handle insert_in_edge(Face_handle f, int i);} {adds a
vertex \ccc{v} splitting
edge \ccc{i} of face \ccc{f}. Return a pointer to \ccc{v}.}
\ccGlue
\ccMethod{Vertex* insert_in_face(Face* f);} {adds a vertex
\ccMethod{Vertex_handle insert_in_face(Face_handle f);} {adds a vertex
\ccc{v} splitting face
\ccc{f} in three. Face \ccc{f} is modified,
two new faces are created. Return a pointer to \ccc{v} }
\ccGlue
\ccMethod{Vertex* insert_dim_up(Vertex* w, bool orient=true);} {adds
\ccMethod{Vertex_handle insert_dim_up(Vertex_handle w, bool orient=true);} {adds
a vertex \ccc{v}, increasing by one the dimension of the triangulation.
Vertex \ccc{v} and the existing vertex \ccc{w} are linked to all
the vertices of the triangulation.
@ -206,7 +217,7 @@ faces. A pointer to vertex \ccc{v} is returned.
\ccMethod{void remove_degree_3(Vertex* v, Face *f=NULL);}
\ccMethod{void remove_degree_3(Vertex_handle v, Face *f=NULL);}
{removes a vertex of degree 3. Two of the incident faces are destroyed,
the third one is modified.
If parameter \ccc{f} is specified, it has to be a face incident to \ccc{v}
@ -217,12 +228,12 @@ and, if specified, face \ccc{f} is incident to \ccc{v}.}}
\ccMethod{void remove_second(Vertex* v);}{removes the before last
\ccMethod{void remove_second(Vertex_handle v);}{removes the before last
vertex.}
\ccGlue
\ccMethod{void remove_first(Vertex* v);}{removes the last vertex.}
\ccMethod{void remove_first(Vertex_handle v);}{removes the last vertex.}
\ccGlue
\ccMethod{void remove_dim_down(Vertex* v);}
\ccMethod{void remove_dim_down(Vertex_handle v);}
{removes vertex \ccc{v} incident to all other vertices
and decreases by one the dimension of the triangulation.
\ccPrecond{if the dimension is 2, the number of vertices is more than
@ -237,13 +248,13 @@ They do not guarantee the combinatorial validity
of the resulting triangulation.
\ccMethod{ template< class EdgeIt>
Vertex* star_hole(EdgeIt edge_begin,EdgeIt edge_end);}
Vertex_handle star_hole(EdgeIt edge_begin,EdgeIt edge_end);}
{creates a new vertex \ccc{v} and use it to star the hole
whose boundary is described by the sequence of edges \ccc{[edge_begin,
edge_end[}. Returns a pointer to the vertex.}
\ccGlue
\ccMethod{ template< class EdgeIt, class FaceIt>
Vertex* star_hole(EdgeIt edge_begin,
Vertex_handle star_hole(EdgeIt edge_begin,
EdgeIt edge_end,
FaceIt face_begin,
FaceIt face_end);}
@ -252,14 +263,14 @@ first recycles faces in the sequence \ccc{[face_begin,
face_end[} and create new ones when the sequence is exhausted.}
\ccGlue
\ccMethod{ template< class EdgeIt>
void star_hole(Vertex* v, EdgeIt edge_begin, EdgeIt edge_end);}
void star_hole(Vertex_handle v, EdgeIt edge_begin, EdgeIt edge_end);}
{uses vertex v to star the hole
whose boundary is described by the sequence of edges\ccc{[edge_begin,
edge_end[}.
}
\ccGlue
\ccMethod{ template< class EdgeIt, class FaceIt>
void star_hole(Vertex* v,
void star_hole(Vertex_handle v,
EdgeIt edge_begin,
EdgeIt edge_end,
FaceIt face_begin,
@ -267,44 +278,44 @@ edge_end[}.
{same as above, recycling faces in the sequence \ccc{[face_begin,
face_end[ . } }
%\ccMethod{Vertex* star_hole(List_edges& hole);}
%\ccMethod{Vertex_handle star_hole(List_edges& hole);}
%{create a new vertex \ccc{v} and use it to star the hole \ccc{hole}.}
%\ccGlue
%\ccMethod{void star_hole(Vertex* v, List_edges& hole);}
%\ccMethod{void star_hole(Vertex_handle v, List_edges& hole);}
%{stars the hole \ccc{hole} using vertex \ccc{v}.}
\ccGlue
\ccMethod{void make_hole(Vertex* v, List_edges& hole);}
\ccMethod{void make_hole(Vertex_handle v, List_edges& hole);}
{removes the vertex v, and store in \ccc{hole} the list of edges
on the boundary of the hole.}
\ccMethod{Vertex* create_vertex();}{adds a new vertex.}
\ccMethod{Vertex_handle create_vertex();}{adds a new vertex.}
\ccGlue
\ccMethod{Face* create_face(Face* f1, int i1, Face* f2, int i2, Face*
\ccMethod{Face_handle create_face(Face_handle f1, int i1, Face_handle f2, int i2, Face_handle
f3, int i3);}{adds a face which is the neighbor \ccc{i1} of \ccc{f1},
\ccc{i2} of \ccc{f2} and \ccc{i3} of \ccc{f3}.}
\ccGlue
\ccMethod{Face* create_face(Face* f1, int i1, Face* f2, int i2);}
\ccMethod{Face_handle create_face(Face_handle f1, int i1, Face_handle f2, int i2);}
{adds a face which is the neighbor \ccc{i1} of \ccc{f1},
and the neighbor \ccc{i2} of \ccc{f2}.}
\ccGlue
\ccMethod{Face* create_face(Face* f1, int i1, Vertex* v);}
\ccMethod{Face_handle create_face(Face_handle f1, int i1, Vertex_handle v);}
{adds a face which is the neighbor \ccc{i1} of \ccc{f1},
and has \ccc{v} as vertex.}
\ccGlue
\ccMethod{ Face* create_face(Vertex* v1, Vertex* v2, Vertex* v3);}
\ccMethod{ Face_handle create_face(Vertex_handle v1, Vertex_handle v2, Vertex_handle v3);}
{adds a face with vertices \ccc{v1}, \ccc{v2} and \ccc{v3}.}
\ccGlue
\ccMethod{Face* create_face(Vertex* v1, Vertex* v2, Vertex* v3,
Face* f1, Face* f2, Face* f3);}
\ccMethod{Face_handle create_face(Vertex_handle v1, Vertex_handle v2, Vertex_handle v3,
Face_handle f1, Face_handle f2, Face_handle f3);}
{adds a face with vertices \ccc{v1}, \ccc{v2} and \ccc{v3},
and neighbors \ccc{f1}, \ccc{f2}, \ccc{f3}.}
\ccGlue
\ccMethod{Face* create_face();}
\ccMethod{Face_handle create_face();}
{adds a face whose vertices and neighbors are set to NULL.}
\ccGlue
\ccMethod{void delete_face(Face*);}{deletes a face.}
\ccMethod{void delete_face(Face_handle );}{deletes a face.}
\ccGlue
\ccMethod{void delete_vertex(Vertex*);}{deletes a vertex.}
\ccMethod{void delete_vertex(Vertex_handle );}{deletes a vertex.}
\end{ccAdvanced}
\ccHeading{Traversing the triangulation}
@ -335,7 +346,7 @@ between numbers of vertices, faces and edges.}
\ccHasModels
\ccc{CGAL::Triangulation_default_data_structure_2<Tds_traits,Vb,Fb>}, \\
\ccc{CGAL::Triangulation_data_structure_2<Tds_traits,Vb,Fb>}, \\
\ccc{CGAL::Triangulation_data_structure_using_list_2<Vb,Fb>}.
\ccSeeAlso

View File

@ -1,38 +1,36 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Triangulation_data_structure_using_list_2.tex
% | Reference manual page: Triangulation_data_structure_2.tex
% +------------------------------------------------------------------------+
% | 07.04.2000 Author
% | Package: Package
% | 18.04.2002 Mariette Yvinec
% | Package: Triangulation_2
% |
\RCSdef{\RCSTriangulationdatastructureusinglistRev}{$Revision$}
\RCSdefDate{\RCSTriangulationdatastructureusinglistDate}{$Date$}
\RCSdef{\RCSTriangulationdatastructureRev}{$Revision$}
\RCSdefDate{\RCSTriangulationdatastructureDate}{$Date$}
% |
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Triangulation_data_structure_using_list_2<Vb,Fb>} %% add template arg's if necessary
\begin{ccRefClass}{Triangulation_data_structure_2<Vb,Fb>} %% add template arg's if necessary
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[class]{} %% add further index entries
\ccCreationVariable{tds}
\ccDefinition
The class \ccRefName\ can be used as model
for the \ccc{TriangulationDataStructure_2} concept
for any
orientable triangulation. It uses a \stl list to store the
full dimensional faces of the triangulation.
The class \ccRefName\ is a model
for the \ccc{TriangulationDataStructure_2} concept.
It can be used to represent an orientable 2D triangulation
embedded in a space of any dimension.
\ccInclude{Triangulation_data_structure_using_list_2.h}
\ccInclude{Triangulation_data_structure_2.h}
\ccIsModel
\ccc{TriangulationDataStructure_2}
\end{ccRefClass}
% +------------------------------------------------------------------------+

View File

@ -1,91 +0,0 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Triangulation_default_data_structure_2.tex
% +------------------------------------------------------------------------+
% | 07.04.2000 Author
% | Package: Package
% |
\RCSdef{\RCSTriangulationdefaultdatastructureRev}{$Revision$}
\RCSdefDate{\RCSTriangulationdefaultdatastructureDate}{$Date$}
% |
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Triangulation_default_data_structure_2<Traits,Vb,Fb>}
%% add template arg's if necessary
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[class]{} %% add further index entries
\ccCreationVariable{tds}
\ccDefinition
The class \ccRefName\ is the default model for the concept
\ccc{TriangulationDataStructure_2}.
The class \ccRefName
is highly economic with respect to memory space but its use is
restricted
to planar embedded triangulation.
As required this class has two template parameters \ccc{Vb} anf \ccc{Fb}
which have
to be models for respectively the
\ccc{TriangulationVertexBase_2} and
the \ccc{TriangulationFaceBase_2} concepts.
In addition, the class \ccClassTemplateName\ has a first template parameter
which is a geometric traits class. This may be surprising because
the triangulation data structure is supposed to deal only with the combinatorial
aspect of the triangulation and not with any geometric embedding
The reason for that is the following.
The class \ccRefName\ does not use any additional data structure
such as a list or a vector to act as a container for faces and vertices.
The iterators which allows to visit all faces and vertices of the
triangulation
data structure
is implemented using an implicit tree structure over the faces
as described by
de Berg, van Oostrum, and Overmars,
in Proc.\ 12th Annual Symp.\ on Comput.\ Geom.,
1996, pages C5--C6. This tree structure is based on the planar
geometric embedding
the triangulation. Each face
can find its parent
and its children using only simple comparisons on the
coordinates of the points embedding its vertices.
Thus the tree structure may remain implicit
and does not require any additional memory.
The requirements concerning the geometric traits \ccc{Traits} of
\ccc{Triangulation_default_data_structure_2}
are very light and form a subset of the concept
\ccc{TriangulationTraits_2}.
This class is required to provide a type \ccc{Point}
and the coordinate comparison functions \ccc{compare_x(Point p0, Point p1)} and
\ccc{compare_y(Point p0, Point p1)}. The point type
defined by the geometric traits class of the triangulation data structure
has to be the same
as the point type defined by the geometric traits of the triangulation.
This is achieved if the same model is used for both traits classes
which is recommended but not compulsory.
\ccInclude{Triangulation_default_data_structure_2.h}
\ccIsModel
\ccc{TriangulationDataStructure_2}
\ccSeeAlso
\ccc{TriangulationDataStructure_2},
\ccc{CGAL::Triangulation_data_structure_using_list_2<Vb,Fb>}.
\end{ccRefClass}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
% EOF
% +------------------------------------------------------------------------+

View File

@ -43,71 +43,73 @@ except the iterators and the circulators.
\begin{ccAdvanced}
\ccCreation
For user defined triangulation algorithms, faces need to
be explicitly constructed and linked to their neighbors.
User defined triangulation algorithms that needs to
to define new faces and delete non longer used ones,
have to call the methods \ccc{create_face} and
\ccc{delete_face()} of the triangulation data structure.
\ccConstructor{TriangulationDataStructure_2::Face();}{default
constructor,
initializes all vertices and neighbors
with \ccc{NULL}.}
%\ccConstructor{TriangulationDataStructure_2::Face();}{default
%constructor,
%initializes all vertices and neighbors
% with \ccc{NULL}.}
\ccConstructor{TriangulationDataStructure_2::Face(Vertex* v0,
Vertex* v1,
Vertex* v2);}
{introduces a face \ccVar, and initializes the vertices. The
neighbors are initialized with \ccc{NULL}.}
%\ccConstructor{TriangulationDataStructure_2::Face(Vertex_handle v0,
% Vertex_handle v1,
% Vertex_handle v2);}
%{introduces a face \ccVar, and initializes the vertices. The
%neighbors are initialized with \ccc{NULL}.}
\ccConstructor{TriangulationDataStructure_2::Face(Vertex* v0,
Vertex* v1,
Vertex* v2,
Face* n0,
Face* n1,
Face* n2);}
{introduces a face \ccVar, and initializes the vertices and the neighbors.}
%\ccConstructor{TriangulationDataStructure_2::Face(Vertex_handle v0,
% Vertex_handle v1,
% Vertex_handle v2,
% Face_handle n0,
% Face_handle n1,
% Face_handle n2);}
%{introduces a face \ccVar, and initializes the vertices and the neighbors.}
\ccHeading{Setting}
\ccThree{Vertex*}{f.has_vertex( Vertex* v, int& i)x}{}
\ccMethod{void set_vertex(int i, Vertex* v);}
\ccThree{Vertex_handle}{f.has_vertex( Vertex_handle v, int& i)x}{}
\ccMethod{void set_vertex(int i, Vertex_handle v);}
{sets vertex \ccc{i} to be \ccc{v}.
\ccPrecond $0\leq i \leq 2$.
}
\ccGlue
\ccMethod{void set_neighbor(int i, Face* n);}
\ccMethod{void set_neighbor(int i, Face_handle n);}
{sets neighbor \ccc{i} to be \ccc{n}.
\ccPrecond $0\leq i \leq 2$.
}
\ccGlue
\ccMethod{ void set_vertices();}{sets the vertices pointers to \ccc{NULL}.}
\ccGlue
\ccMethod{void set_vertices(Vertex* v0,
Vertex* v1,
Vertex* v2);}{sets the vertices pointers.}
\ccMethod{void set_vertices(Vertex_handle v0,
Vertex_handle v1,
Vertex_handle v2);}{sets the vertices pointers.}
\ccGlue
\ccMethod{void set_neighbors();} {sets the neighbors pointers to \ccc{NULL}.}
\ccGlue
\ccMethod{void set_neighbors(Face* n0,
Face* n1,
Face* n2);}{sets the neighbors pointers.}
\ccMethod{void set_neighbors(Face_handle n0,
Face_handle n1,
Face_handle n2);}{sets the neighbors pointers.}
\end{ccAdvanced}
\ccHeading{Vertex Access Functions}
\ccMethod{Vertex* vertex(int i) const;}
\ccMethod{Vertex_handle vertex(int i) const;}
{returns the vertex \ccc{i} of \ccVar.
\ccPrecond $0\leq i \leq 2$.}
\ccGlue
\ccMethod{int index(Vertex* v) const;}
\ccMethod{int index(Vertex_handle v) const;}
{returns the index of vertex \ccc{v} in \ccVar. \ccPrecond \ccc{v} is
a vertex of \ccVar}
\ccGlue
\ccMethod{bool has_vertex(Vertex* v) const;}
\ccMethod{bool has_vertex(Vertex_handle v) const;}
{returns \ccc{true} if \ccc{v} is a vertex of \ccVar.}
\ccGlue
\ccMethod{bool has_vertex(Vertex* v, int& i) const;}
\ccMethod{bool has_vertex(Vertex_handle v, int& i) const;}
{returns \ccc{true} if \ccc{v} is a vertex of \ccVar, and
computes the index \ccc{i} of \ccc{v} in \ccc{f}.}
@ -118,19 +120,19 @@ The neighbor with index \ccc{i} is the neighbor which is opposite
to the vertex with index \ccc{i}.
\ccMethod{Face* neighbor(int i) const;}
\ccMethod{Face_handle neighbor(int i) const;}
{returns the neighbor \ccc{i} of \ccVar.
\ccPrecond $0\leq i \leq 2$.
}
\ccGlue
\ccMethod{int index(Face* n) const;}
\ccMethod{int index(Face_handle n) const;}
{returns the index of face \ccc{n}.
\ccPrecond \ccc{n} is a neighbor of \ccVar.}
\ccGlue
\ccMethod{bool has_neighbor(Face* n) const;}
\ccMethod{bool has_neighbor(Face_handle n) const;}
{returns \ccc{true} if \ccc{n} is a neighbor of \ccVar.}
\ccGlue
\ccMethod{bool has_neighbor(Face* n, int& i) const;}
\ccMethod{bool has_neighbor(Face_handle n, int& i) const;}
{returns \ccc{true} if \ccc{n} is a neighbor of \ccVar, and
compute the index \ccc{i} of \ccc{n}.}
@ -138,7 +140,7 @@ compute the index \ccc{i} of \ccc{n}.}
\ccMethod{int mirror_index(int i) const;}
{index of \ccVar\ as a neighbor of \ccVar.\ccc{neighbor(i)}}
\ccGlue
\ccMethod{Vertex* mirror_vertex(int i) const;}
\ccMethod{Vertex_handle mirror_vertex(int i) const;}
{vertex of \ccVar.\ccc{neighbor(i)}} opposite to \ccVar.

View File

@ -41,29 +41,32 @@ except the iterators.
\begin{ccAdvanced}
\ccCreation
In order to obtain new vertices or destruct unused vertices, the user must
call the \ccc{create_vertex()} and \ccc{delete_vertex()} methods of the
triangulation data structure.
\ccConstructor{TriangulationDataStructure_2::Vertex();}{default
constructor.
The geometric information is
initialized by the default constructor of class \ccc{Point}.
The pointer to the incident face is initialized with \ccc{NULL}.}
%\ccConstructor{TriangulationDataStructure_2::Vertex();}{default
%constructor.
% The geometric information is
% initialized by the default constructor of class \ccc{Point}.
%The pointer to the incident face is initialized with \ccc{NULL}.}
\ccConstructor{TriangulationDataStructure_2::Vertex(const Point&
p);}
{introduces a vertex \ccVar, and initializes the geometric information.
The pointer to the incident face is initialized with \ccc{NULL}.}
%\ccConstructor{TriangulationDataStructure_2::Vertex(const Point&
%p);}
%{introduces a vertex \ccVar, and initializes the geometric information.
%The pointer to the incident face is initialized with \ccc{NULL}.}
\ccConstructor{TriangulationDataStructure_2::Vertex(const Point& p,
Face* f);}
{introduces a vertex \ccVar, and initializes the geometric information and
the pointer to the incident face.}
%\ccConstructor{TriangulationDataStructure_2::Vertex(const Point& p,
% Face_handle f);}
%{introduces a vertex \ccVar, and initializes the geometric information and
%the pointer to the incident face.}
\ccHeading{Setting}
\ccMethod{void set_point(const Point& p);}
{sets the geometric information to \ccc{p}.}
\ccGlue
\ccMethod{void set_face(Face* f);}
\ccMethod{void set_face(Face_handle f);}
{sets the incident face to \ccc{f}.}
@ -74,7 +77,7 @@ the pointer to the incident face.}
\ccMethod{Point point() const;}
{returns the geometric information of \ccVar.}
\ccGlue
\ccMethod{Face* face() const;}
\ccMethod{Face_handle face() const;}
{returns a face of the triangulation having \ccVar\ as vertex.}
\ccHeading{Traversal of the Adjacent Vertices, Incident Edges and Faces.}
@ -98,21 +101,21 @@ by any modification of anyone of the two faces incident to \ccc{v}
and \ccc{w}.
\ccMethod{Vertex_circulator
incident_vertices(Face* f=NULL) const;}{\ccPrecond If the
incident_vertices(Face_handle f=NULL) const;}{\ccPrecond If the
face \ccc{f} is given, it has to be incident to \ccVar\
and the circulators begins with a vertex of \ccc{f} :
the vertex \ccc{f->vertex(ccw(i))}
if \ccc{i} is the index of \ccVar\ in \ccc{f}.}
\ccGlue
\ccMethod{Edge_circulator
incident_edges(Face* f=NULL) const;}{\ccPrecond If the
incident_edges(Face_handle f=NULL) const;}{\ccPrecond If the
face \ccc{f} is given, it has to be incident to \ccVar\
and the circulators begins with an edge of \ccc{f} :
the edge \ccc{(f,cw(i))}
where \ccc{i} is the index of \ccVar\ in \ccc{f}.}
\ccGlue
\ccMethod{Face_circulator
incident_faces(Face* f=NULL) const;}{\ccPrecond If the
incident_faces(Face_handle f=NULL) const;}{\ccPrecond If the
face \ccc{f} is given, it has to be incident to \ccVar\
and the crculators begins with the face
\ccc{f}.}

View File

@ -15,13 +15,30 @@
\subsection*{Definition}
The triangulation data structure can be seen as a container
for the faces and vertices of a triangulation. This class takes care
for the faces and vertices of a triangulation. This class also takes care
of all combinatorial operation of the triangulation.
\cgal\ offers two models for the concept
\ccc{TriangulationDataStructure_2}.
Each of those models is templated by the base classes for the faces
and vertices of the triangulation.
The class \ccc{CGAL::Triangulation_data_structure_2<Vb,Fb>}
is a model of the concept \ccc{TriangulationDataStructure_2}.
To ensure all the \textbf{flexibility} of class \ccc{Triangulation_2}
described in \ccRefPage{CGAL::Triangulation_2<Traits,Tds>}
and in Chapter~\ref{Chapter_2D_Triangulations}, the model
\ccc{CGAL::Triangulation_data_structure_2<Vb,Fb>}
\ccRefName derives its \ccc{Vertex} and \ccc{Face} types
from the two template parameters \ccc{Vb} and \ccc{Fb}.
These parameters
have to be instantiated by models
of the concepts describing the base classes
for faces and vertices of a triangulation.
Therefore, in addition to the
data structure concept and default model,
we described in this chapter, different concepts and models of the
base classes for the vertices and faces of the different triangulations.
\subsection*{Concepts}
\ccRefConceptPage{TriangulationDataStructure_2}\\
@ -34,9 +51,7 @@ and vertices of the triangulation.
\ccRefConceptPage{RegularTriangulationFaceBase_2}
\subsection*{Classes}
\ccRefIdfierPage{CGAL::Triangulation_data_structure_using_list_2<Vb,Fb>}\\
\ccRefIdfierPage{CGAL::Triangulation_default_data_structure_2<Traits,Vb,Fb>}\\
\ccRefIdfierPage{CGAL::Triangulation_data_structure_2<Vb,Fb>}\\
\ccRefIdfierPage{CGAL::Triangulation_face_base_2<Traits>}\\
\ccRefIdfierPage{CGAL::Triangulation_vertex_base_2<Traits>}\\
\ccRefIdfierPage{CGAL::Regular_triangulation_face_base_2<Traits>}\\

View File

@ -15,8 +15,7 @@
\input{TDS_2_ref/TriangulationFaceBase_2.tex}
\input{TDS_2_ref/TriangulationHierarchyVertexBase_2.tex}
\input{TDS_2_ref/TriangulationVertexBase_2.tex}
\input{TDS_2_ref/Triangulation_data_structure_using_list_2.tex}
\input{TDS_2_ref/Triangulation_default_data_structure_2.tex}
\input{TDS_2_ref/Triangulation_data_structure_2.tex}
\input{TDS_2_ref/Triangulation_ds_face_2.tex}
\input{TDS_2_ref/Triangulation_ds_vertex_2.tex}
\input{TDS_2_ref/Triangulation_face_base_2.tex}