mirror of https://github.com/CGAL/cgal
updated doc of Triangulation data structure
This commit is contained in:
parent
08b8545fd2
commit
0f733ca49b
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
||||
% +------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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}.}
|
||||
|
|
|
|||
|
|
@ -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>}\\
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
||||
% +------------------------------------------------------------------------+
|
||||
|
|
@ -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
|
||||
% +------------------------------------------------------------------------+
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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}.}
|
||||
|
|
|
|||
|
|
@ -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>}\\
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
Loading…
Reference in New Issue