diff --git a/Packages/Triangulation_2/doc_tex/TDS_2_ref/TriangulationDataStructure_2.tex b/Packages/Triangulation_2/doc_tex/TDS_2_ref/TriangulationDataStructure_2.tex index 5a30f7466a0..3f17b0eb34a 100644 --- a/Packages/Triangulation_2/doc_tex/TDS_2_ref/TriangulationDataStructure_2.tex +++ b/Packages/Triangulation_2/doc_tex/TDS_2_ref/TriangulationDataStructure_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}. 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 Edge;}{ Edge type.} +\ccNestedType{Facet_handle}{Handle to a facet} + + +\ccTypedef{typedef std::pair 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 List_edges;}{ Lists of edges.} - -To ensure all the \textbf{flexibility} of class \ccc{Triangulation_2} -described in \ccRefPage{CGAL::Triangulation_2} -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}, \\ +\ccc{CGAL::Triangulation_data_structure_2}, \\ \ccc{CGAL::Triangulation_data_structure_using_list_2}. \ccSeeAlso diff --git a/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_data_structure_using_list_2.tex b/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_data_structure_2.tex similarity index 54% rename from Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_data_structure_using_list_2.tex rename to Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_data_structure_2.tex index 6f2a08adfd1..4642c907f94 100644 --- a/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_data_structure_using_list_2.tex +++ b/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_data_structure_2.tex @@ -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} %% add template arg's if necessary +\begin{ccRefClass}{Triangulation_data_structure_2} %% 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} % +------------------------------------------------------------------------+ diff --git a/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_default_data_structure_2.tex b/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_default_data_structure_2.tex deleted file mode 100644 index 0399893704b..00000000000 --- a/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_default_data_structure_2.tex +++ /dev/null @@ -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} - %% 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}. - - -\end{ccRefClass} - -% +------------------------------------------------------------------------+ -%%RefPage: end of main body, begin of footer -% EOF -% +------------------------------------------------------------------------+ - diff --git a/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_ds_face_2.tex b/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_ds_face_2.tex index 3e4ff1d0aa8..5544e4214e8 100644 --- a/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_ds_face_2.tex +++ b/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_ds_face_2.tex @@ -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. diff --git a/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_ds_vertex_2.tex b/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_ds_vertex_2.tex index 4c94675e0b7..cc3e4523acb 100644 --- a/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_ds_vertex_2.tex +++ b/Packages/Triangulation_2/doc_tex/TDS_2_ref/Triangulation_ds_vertex_2.tex @@ -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}.} diff --git a/Packages/Triangulation_2/doc_tex/TDS_2_ref/intro.tex b/Packages/Triangulation_2/doc_tex/TDS_2_ref/intro.tex index 897b23b6543..6a84ce11c16 100644 --- a/Packages/Triangulation_2/doc_tex/TDS_2_ref/intro.tex +++ b/Packages/Triangulation_2/doc_tex/TDS_2_ref/intro.tex @@ -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} +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} +and in Chapter~\ref{Chapter_2D_Triangulations}, the model + \ccc{CGAL::Triangulation_data_structure_2} +\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}\\ -\ccRefIdfierPage{CGAL::Triangulation_default_data_structure_2}\\ - +\ccRefIdfierPage{CGAL::Triangulation_data_structure_2}\\ \ccRefIdfierPage{CGAL::Triangulation_face_base_2}\\ \ccRefIdfierPage{CGAL::Triangulation_vertex_base_2}\\ \ccRefIdfierPage{CGAL::Regular_triangulation_face_base_2}\\ diff --git a/Packages/Triangulation_2/doc_tex/TDS_2_ref/main.tex b/Packages/Triangulation_2/doc_tex/TDS_2_ref/main.tex index ef44d1e0324..e15a222cfda 100644 --- a/Packages/Triangulation_2/doc_tex/TDS_2_ref/main.tex +++ b/Packages/Triangulation_2/doc_tex/TDS_2_ref/main.tex @@ -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} diff --git a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/TriangulationDataStructure_2.tex b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/TriangulationDataStructure_2.tex index 5a30f7466a0..3f17b0eb34a 100644 --- a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/TriangulationDataStructure_2.tex +++ b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/TriangulationDataStructure_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}. 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 Edge;}{ Edge type.} +\ccNestedType{Facet_handle}{Handle to a facet} + + +\ccTypedef{typedef std::pair 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 List_edges;}{ Lists of edges.} - -To ensure all the \textbf{flexibility} of class \ccc{Triangulation_2} -described in \ccRefPage{CGAL::Triangulation_2} -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}, \\ +\ccc{CGAL::Triangulation_data_structure_2}, \\ \ccc{CGAL::Triangulation_data_structure_using_list_2}. \ccSeeAlso diff --git a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_data_structure_using_list_2.tex b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_data_structure_2.tex similarity index 54% rename from Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_data_structure_using_list_2.tex rename to Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_data_structure_2.tex index 6f2a08adfd1..4642c907f94 100644 --- a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_data_structure_using_list_2.tex +++ b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_data_structure_2.tex @@ -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} %% add template arg's if necessary +\begin{ccRefClass}{Triangulation_data_structure_2} %% 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} % +------------------------------------------------------------------------+ diff --git a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_default_data_structure_2.tex b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_default_data_structure_2.tex deleted file mode 100644 index 0399893704b..00000000000 --- a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_default_data_structure_2.tex +++ /dev/null @@ -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} - %% 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}. - - -\end{ccRefClass} - -% +------------------------------------------------------------------------+ -%%RefPage: end of main body, begin of footer -% EOF -% +------------------------------------------------------------------------+ - diff --git a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_ds_face_2.tex b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_ds_face_2.tex index 3e4ff1d0aa8..5544e4214e8 100644 --- a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_ds_face_2.tex +++ b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_ds_face_2.tex @@ -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. diff --git a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_ds_vertex_2.tex b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_ds_vertex_2.tex index 4c94675e0b7..cc3e4523acb 100644 --- a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_ds_vertex_2.tex +++ b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/Triangulation_ds_vertex_2.tex @@ -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}.} diff --git a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/intro.tex b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/intro.tex index 897b23b6543..6a84ce11c16 100644 --- a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/intro.tex +++ b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/intro.tex @@ -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} +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} +and in Chapter~\ref{Chapter_2D_Triangulations}, the model + \ccc{CGAL::Triangulation_data_structure_2} +\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}\\ -\ccRefIdfierPage{CGAL::Triangulation_default_data_structure_2}\\ - +\ccRefIdfierPage{CGAL::Triangulation_data_structure_2}\\ \ccRefIdfierPage{CGAL::Triangulation_face_base_2}\\ \ccRefIdfierPage{CGAL::Triangulation_vertex_base_2}\\ \ccRefIdfierPage{CGAL::Regular_triangulation_face_base_2}\\ diff --git a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/main.tex b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/main.tex index ef44d1e0324..e15a222cfda 100644 --- a/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/main.tex +++ b/Packages/Triangulation_2/doc_tex/basic/TDS_2_ref/main.tex @@ -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}