diff --git a/Triangulation/TODO b/Triangulation/TODO index cce00b11599..90ceb089d3d 100644 --- a/Triangulation/TODO +++ b/Triangulation/TODO @@ -1,6 +1,8 @@ + __________________________________________________________________________RENAMING -doc +*) doc : +-------- Pure_complex Triangulation Delaunay_complex Delaunay_triangulation @@ -21,48 +23,61 @@ Pure_complex_vertex Triangulation_vertex RegularComplexTraits RegularTriangulationTraits Regular_complex Regular_triangulation -code +*) code not done : +------------------ -[DONE] /Pure_complex/Triangulation/ -[DONE] /Delaunay_complex/Delaunay_triangulation/ -[DONE] /Simplex/Full_cell/ -[DONE] /simplex/full_cell/ -[DONE] /number_of_simplices/number_of_full_cells/ -[DONE] /gather_simplices/gather_full_cells/ -[DONE] /gather_incident_simplices/incident_full_cells/ -[DONE] /gather_adjacent_simplices/compute_star/ - but why not star? -[DONE] /contract_face/collapse_face/ -[DONE] /index_of/index/ /is_finite/! is_infinite/ -[DONE] /contract_face/collapse_face/ -[DONE] /full_cell_of/full_cell/ - - - is_boundary_facet -to remove (comment) (sam: I find them useful!) +*) code done : +-------------- + +/Pure_complex/Triangulation/ +/Delaunay_complex/Delaunay_triangulation/ +/Simplex/Full_cell/ +/simplex/full_cell/ +/number_of_simplices/number_of_full_cells/ +/gather_simplices/gather_full_cells/ +/gather_incident_simplices/incident_full_cells/ +/gather_adjacent_simplices/compute_star/ + but why not star? +/contract_face/collapse_face/ +/index_of/index/ +/contract_face/collapse_face/ +/full_cell_of/full_cell/ + +*) to remove (comment) : +------------------------ + gather_incident_faces -gather_incident_upper_faces - - +gather_incident_upper_faces (sam: I find them useful!) __________________________________________________________________________ALL *) FUTURE: better system for simplex's flag (visited) -_________________________________________________________________________PCDS -_________________________________________________________________PURE_COMPLEX +_________________________________________________TRIANGULATION_DATA_STRUCTURE -_____________________________________________________________DELAUNAY_COMPLEX +*) TriangulationDataStructure.tex: + - Remove the precise type definition in the documentation of the type Facet + Or write typedef CGAL::cpp0x::tuple Facet; + - full_cell_of(Facet) OR full_cell(Facet) ? + - OK, virer is_boundary_facet de la doc du concept : à mettre dans la doc + de la classe ? + - idem pour insert_in_tagged_hole. + - Should we put >> and << in the documentation of the class + Triangulation_data_structure ? -______________________________________________________________REGULAR_COMPLEX +*) Triangulation_data_structure.h: + - Ensure that it is topologically possible to collapse the Face in + collapse_face(Face) +________________________________________________________________TRIANGULATION -*) write Regular_complex.h (!) -*) write RegularComplexTraits.tex -*) write Regular_complex.tex -_______________________________________________________________________KERNEL +_______________________________________________________DELAUNAY_TRIANGULATION -... +________________________________________________________REGULAR_TRIANGULATION + +*) write Regular_triangulaion.h (!) +*) write RegularTriangulationTraits.tex +*) write Regular_triangulation.tex diff --git a/Triangulation/include/CGAL/Triangulation_data_structure.h b/Triangulation/include/CGAL/Triangulation_data_structure.h index 75819e52f64..2ea53db2fc3 100644 --- a/Triangulation/include/CGAL/Triangulation_data_structure.h +++ b/Triangulation/include/CGAL/Triangulation_data_structure.h @@ -47,8 +47,8 @@ class Triangulation_data_structure typedef typename Default::Get >::type S_base; public: - typedef typename V_base::template Rebind_TDS::Other Vertex; - typedef typename S_base::template Rebind_TDS::Other Full_cell; + typedef typename V_base::template Rebind_TDS::Other Vertex; /* Concept */ + typedef typename S_base::template Rebind_TDS::Other Full_cell; /* Concept */ protected: typedef Compact_container Vertex_container; @@ -57,21 +57,21 @@ protected: public: typedef Dimen Ambient_dimension; - typedef typename Vertex_container::size_type size_type; - typedef typename Vertex_container::difference_type difference_type; + typedef typename Vertex_container::size_type size_type; /* Concept */ + typedef typename Vertex_container::difference_type difference_type; /* Concept */ - typedef typename Vertex_container::iterator Vertex_handle; - typedef typename Vertex_container::iterator Vertex_iterator; + typedef typename Vertex_container::iterator Vertex_handle; /* Concept */ + typedef typename Vertex_container::iterator Vertex_iterator; /* Concept */ typedef typename Vertex_container::const_iterator Vertex_const_handle; typedef typename Vertex_container::const_iterator Vertex_const_iterator; - typedef typename Full_cell_container::iterator Full_cell_handle; - typedef typename Full_cell_container::iterator Full_cell_iterator; + typedef typename Full_cell_container::iterator Full_cell_handle; /* Concept */ + typedef typename Full_cell_container::iterator Full_cell_iterator; /* Concept */ typedef typename Full_cell_container::const_iterator Full_cell_const_handle; typedef typename Full_cell_container::const_iterator Full_cell_const_iterator; - typedef internal::Triangulation::Triangulation_ds_facet_iterator - Facet_iterator; + typedef internal::Triangulation:: + Triangulation_ds_facet_iterator Facet_iterator; /* Concept */ /* The 2 types defined below, |Facet| and |Rotor| are used when traversing the boundary `B' of the union of a set of full cells. |Rotor| makes it @@ -79,14 +79,14 @@ public: |rotate_rotor| and |insert_in_tagged_hole|) */ // A co-dimension 1 sub-simplex. - typedef cpp0x::tuple Facet; + typedef cpp0x::tuple Facet; /* Concept */ // A co-dimension 2 sub-simplex. called a Rotor because we can rotate // the two "covertices" around the sub-simplex. Useful for traversing the // boundary of a hole. NOT DOCUMENTED typedef cpp0x::tuple Rotor; - typedef Triangulation_face Face; + typedef Triangulation_face Face; /* Concept */ protected: // DATA MEMBERS @@ -116,7 +116,7 @@ private: public: - Triangulation_data_structure(const int dim) + Triangulation_data_structure(const int dim) /* Concept */ : dmax_(get_ambient_dimension::value(dim)), dcur_(-2), vertices_(), full_cells_() { CGAL_assertion_msg(dmax_ > 0, "ambient dimension must be positive."); @@ -143,32 +143,41 @@ protected: public: /* returns the current dimension of the full cells in the triangulation. */ - int ambient_dimension() const { return dmax_; } - int current_dimension() const { return dcur_; } + int ambient_dimension() const { return dmax_; } /* Concept */ + int current_dimension() const { return dcur_; } /* Concept */ - size_type number_of_vertices() const { return this->vertices_.size();} - size_type number_of_full_cells() const { return this->full_cells_.size();} + size_type number_of_vertices() const /* Concept */ + { + return this->vertices_.size(); + } + size_type number_of_full_cells() const /* Concept */ + { + return this->full_cells_.size(); + } - bool empty() const { return current_dimension() == -2; } + bool empty() const /* Concept */ + { + return current_dimension() == -2; + } Vertex_container & vertices() { return vertices_; } const Vertex_container & vertices() const { return vertices_; } Full_cell_container & full_cells() { return full_cells_; } const Full_cell_container & full_cells() const { return full_cells_; } - Vertex_handle vertex(const Full_cell_handle s, const int i) const + Vertex_handle vertex(const Full_cell_handle s, const int i) const /* Concept */ { CGAL_precondition(s != Full_cell_handle() && check_range(i)); return s->vertex(i); } - Vertex_const_handle vertex(const Full_cell_const_handle s, const int i) const + Vertex_const_handle vertex(const Full_cell_const_handle s, const int i) const /* Concept */ { CGAL_precondition(s != Full_cell_handle() && check_range(i)); return s->vertex(i); } - bool is_vertex(const Vertex_const_handle & v) const + bool is_vertex(const Vertex_const_handle & v) const /* Concept */ { if( Vertex_const_handle() == v ) return false; @@ -178,7 +187,7 @@ public: return v == vit; } - bool is_full_cell(const Full_cell_const_handle & s) const + bool is_full_cell(const Full_cell_const_handle & s) const /* Concept */ { if( Full_cell_const_handle() == s ) return false; @@ -188,31 +197,31 @@ public: return s == sit; } - Full_cell_handle full_cell(const Vertex_handle v) const + Full_cell_handle full_cell(const Vertex_handle v) const /* Concept */ { CGAL_precondition(v != Vertex_handle()); return v->full_cell(); } - Full_cell_const_handle full_cell(const Vertex_const_handle v) const + Full_cell_const_handle full_cell(const Vertex_const_handle v) const /* Concept */ { CGAL_precondition(Vertex_const_handle() != v); return v->full_cell(); } - Full_cell_handle neighbor(const Full_cell_handle s, const int i) const + Full_cell_handle neighbor(const Full_cell_handle s, const int i) const /* Concept */ { CGAL_precondition(Full_cell_handle() != s && check_range(i)); return s->neighbor(i); } - Full_cell_const_handle neighbor(const Full_cell_const_handle s, const int i) const + Full_cell_const_handle neighbor(const Full_cell_const_handle s, const int i) const/* Concept */ { CGAL_precondition(Full_cell_const_handle() != s && check_range(i)); return s->neighbor(i); } - int mirror_index(const Full_cell_handle s, const int i) const + int mirror_index(const Full_cell_handle s, const int i) const /* Concept */ { CGAL_precondition(Full_cell_handle() != s && check_range(i)); return s->mirror_index(i); @@ -220,13 +229,13 @@ public: int mirror_index(const Full_cell_const_handle s, const int i) const { - CGAL_precondition(Full_cell_const_handle() != s && check_range(i)); + CGAL_precondition(Full_cell_const_handle() != s && check_range(i)); /* Concept */ return s->mirror_index(i); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FACETS OPERATIONS - Face make_empty_face() const + Face make_empty_face() const /* Concept */ { return Face(ambient_dimension()); } @@ -234,7 +243,7 @@ public: // works for Face_ = Facet and Face_ = Rotor. // NOT DOCUMENTED for the Rotor case... template< typename Face_ > - Full_cell_handle full_cell(const Face_ & f) const + Full_cell_handle full_cell(const Face_ & f) const /* Concept */ { return cpp0x::get<0>(f); } @@ -242,7 +251,7 @@ public: // works for Face_ = Facet and Face_ = Rotor. // NOT DOCUMENTED for the Rotor case... template< class Face_ > - int index_of_covertex(const Face_ & f) const + int index_of_covertex(const Face_ & f) const /* Concept */ { return cpp0x::get<1>(f); } @@ -282,23 +291,23 @@ protected: public: // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - REMOVALS - Vertex_handle collapse_face(const Face &); - void remove_decrease_dimension(Vertex_handle, Vertex_handle); + Vertex_handle collapse_face(const Face &); /* Concept */ + void remove_decrease_dimension(Vertex_handle, Vertex_handle); /* Concept */ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - INSERTIONS - Vertex_handle insert_in_full_cell(Full_cell_handle); - Vertex_handle insert_in_face(const Face &); - Vertex_handle insert_in_facet(const Facet &); + Vertex_handle insert_in_full_cell(Full_cell_handle); /* Concept */ + Vertex_handle insert_in_face(const Face &); /* Concept */ + Vertex_handle insert_in_facet(const Facet &); /* Concept */ template< typename Forward_iterator > - Vertex_handle insert_in_hole(Forward_iterator, const Forward_iterator, Facet); + Vertex_handle insert_in_hole(Forward_iterator, const Forward_iterator, Facet); /* Concept */ template< typename Forward_iterator, typename OutputIterator > - Vertex_handle insert_in_hole(Forward_iterator, const Forward_iterator, Facet, OutputIterator); + Vertex_handle insert_in_hole(Forward_iterator, const Forward_iterator, Facet, OutputIterator); /* Concept */ template< typename OutputIterator > Full_cell_handle insert_in_tagged_hole(Vertex_handle, Facet, OutputIterator); - Vertex_handle insert_increase_dimension(Vertex_handle); + Vertex_handle insert_increase_dimension(Vertex_handle); /* Concept */ // NOT DOCUMENTED void clear_visited_marks(Full_cell_handle) const; @@ -329,13 +338,13 @@ public: s->set_flags(flags); } - void clear() + void clear() /* Concept */ { clean_dynamic_memory(); dcur_ = -2; } - void set_current_dimension(const int d) + void set_current_dimension(const int d) /* Concept */ { CGAL_precondition(-1<=d && d<=ambient_dimension()); dcur_ = d; @@ -346,12 +355,12 @@ public: return full_cells_.emplace(*s); } - Full_cell_handle new_full_cell() + Full_cell_handle new_full_cell() /* Concept */ { return full_cells_.emplace(dmax_); } - void delete_full_cell(Full_cell_handle s) + void delete_full_cell(Full_cell_handle s) /* Concept */ { CGAL_precondition(Full_cell_handle() != s); // CGAL_expensive_precondition(is_full_cell(s)); @@ -359,7 +368,7 @@ public: } template< typename Forward_iterator > - void delete_full_cells(Forward_iterator start, Forward_iterator end) + void delete_full_cells(Forward_iterator start, Forward_iterator end) /* Concept */ { Forward_iterator s = start; while( s != end ) @@ -372,18 +381,18 @@ public: return vertices_.emplace(t); } - Vertex_handle new_vertex() + Vertex_handle new_vertex() /* Concept */ { return vertices_.emplace(); } - void delete_vertex(Vertex_handle v) + void delete_vertex(Vertex_handle v) /* Concept */ { CGAL_precondition( Vertex_handle() != v ); vertices_.erase(v); } - void associate_vertex_with_full_cell(Full_cell_handle s, const int i, Vertex_handle v) + void associate_vertex_with_full_cell(Full_cell_handle s, const int i, Vertex_handle v) /* Concept */ { CGAL_precondition(check_range(i)); CGAL_precondition(s != Full_cell_handle()); @@ -392,7 +401,7 @@ public: v->set_full_cell(s); } - void set_neighbors(Full_cell_handle s, int i, Full_cell_handle s1, int j) + void set_neighbors(Full_cell_handle s, int i, Full_cell_handle s1, int j) /* Concept */ { CGAL_precondition(check_range(i)); CGAL_precondition(check_range(j)); @@ -406,7 +415,7 @@ public: // SANITY CHECKS - bool is_valid(bool = true, int = 0) const; + bool is_valid(bool = true, int = 0) const; /* Concept */ /* op Partially checks whether |\Mvar| is an abstract simplicial complex. This function terminates without error if each vertex is a vertex of the full_cell of which it claims to be a vertex, if the @@ -420,23 +429,23 @@ public: // NOT DOCUMENTED template< class OutStream> void write_graph(OutStream &); - Vertex_iterator vertices_begin() { return vertices_.begin(); } - Vertex_iterator vertices_end() { return vertices_.end(); } - Full_cell_iterator full_cells_begin() { return full_cells_.begin(); } - Full_cell_iterator full_cells_end() { return full_cells_.end(); } + Vertex_iterator vertices_begin() { return vertices_.begin(); } /* Concept */ + Vertex_iterator vertices_end() { return vertices_.end(); } /* Concept */ + Full_cell_iterator full_cells_begin() { return full_cells_.begin(); } /* Concept */ + Full_cell_iterator full_cells_end() { return full_cells_.end(); } /* Concept */ - Vertex_const_iterator vertices_begin() const { return vertices_.begin(); } - Vertex_const_iterator vertices_end() const { return vertices_.end(); } - Full_cell_const_iterator full_cells_begin() const { return full_cells_.begin(); } - Full_cell_const_iterator full_cells_end() const { return full_cells_.end(); } + Vertex_const_iterator vertices_begin() const { return vertices_.begin(); } /* Concept */ + Vertex_const_iterator vertices_end() const { return vertices_.end(); } /* Concept */ + Full_cell_const_iterator full_cells_begin() const { return full_cells_.begin(); } /* Concept */ + Full_cell_const_iterator full_cells_end() const { return full_cells_.end(); } /* Concept */ - Facet_iterator facets_begin() + Facet_iterator facets_begin() /* Concept */ { if( current_dimension() <= 0 ) return facets_end(); return Facet_iterator(*this); } - Facet_iterator facets_end() + Facet_iterator facets_end() /* Concept */ { return Facet_iterator(*this, 0); } @@ -496,13 +505,13 @@ public: }; template< typename TraversalPredicate, typename OutputIterator > - Facet gather_full_cells(Full_cell_handle, TraversalPredicate &, OutputIterator &) const; + Facet gather_full_cells(Full_cell_handle, TraversalPredicate &, OutputIterator &) const; /* Concept */ template< typename OutputIterator > - OutputIterator incident_full_cells(const Face &, OutputIterator) const; + OutputIterator incident_full_cells(const Face &, OutputIterator) const; /* Concept */ template< typename OutputIterator > - OutputIterator incident_full_cells(Vertex_const_handle, OutputIterator) const; + OutputIterator incident_full_cells(Vertex_const_handle, OutputIterator) const; /* Concept */ template< typename OutputIterator > - OutputIterator compute_star(const Face &, OutputIterator) const; + OutputIterator compute_star(const Face &, OutputIterator) const; /* Concept */ #ifndef CGAL_CFG_NO_CPP0X_DEFAULT_TEMPLATE_ARGUMENTS_FOR_FUNCTION_TEMPLATES template< typename OutputIterator, typename Comparator = std::less > OutputIterator incident_upper_faces(Vertex_const_handle v, const int d, OutputIterator out, Comparator cmp = Comparator()) @@ -547,7 +556,7 @@ template< class Dim, class Vb, class Sb > template< typename OutputIterator > OutputIterator Triangulation_data_structure -::incident_full_cells(const Face & f, OutputIterator out) const +::incident_full_cells(const Face & f, OutputIterator out) const /* Concept */ { // CGAL_expensive_precondition_msg(is_full_cell(f.full_cell()), "the facet does not belong to the Triangulation"); Incident_full_cell_traversal_predicate tp(*this, f); @@ -559,7 +568,7 @@ template< class Dim, class Vb, class Sb > template< typename OutputIterator > OutputIterator Triangulation_data_structure -::incident_full_cells(Vertex_const_handle v, OutputIterator out) const +::incident_full_cells(Vertex_const_handle v, OutputIterator out) const /* Concept */ { // CGAL_expensive_precondition(is_vertex(v)); CGAL_precondition(Vertex_handle() != v); @@ -572,7 +581,7 @@ template< class Dim, class Vb, class Sb > template< typename OutputIterator > OutputIterator Triangulation_data_structure -::compute_star(const Face & f, OutputIterator out) const +::compute_star(const Face & f, OutputIterator out) const /* Concept */ { // CGAL_precondition_msg(is_full_cell(f.full_cell()), "the facet does not belong to the Triangulation"); Star_traversal_predicate tp(*this, f); @@ -584,9 +593,9 @@ template< class Dim, class Vb, class Sb > template< typename TraversalPredicate, typename OutputIterator > typename Triangulation_data_structure::Facet Triangulation_data_structure -::gather_full_cells( Full_cell_handle start, +::gather_full_cells(Full_cell_handle start, TraversalPredicate & tp, - OutputIterator & out) const + OutputIterator & out) const /* Concept */ { std::queue queue; set_visited(start, true); @@ -709,7 +718,7 @@ Triangulation_data_structure template typename Triangulation_data_structure::Vertex_handle Triangulation_data_structure -::collapse_face(const Face & f) +::collapse_face(const Face & f) /* Concept */ { const int fd = f.feature_dimension(); CGAL_precondition( (1 <= fd ) && (fd < current_dimension())); @@ -731,7 +740,7 @@ Triangulation_data_structure template void Triangulation_data_structure -::remove_decrease_dimension(Vertex_handle v, Vertex_handle star) +::remove_decrease_dimension(Vertex_handle v, Vertex_handle star) /* Concept */ { CGAL_assertion( current_dimension() >= -1 ); if( -1 == current_dimension() ) @@ -803,7 +812,7 @@ Triangulation_data_structure template typename Triangulation_data_structure::Vertex_handle Triangulation_data_structure -::insert_in_full_cell(Full_cell_handle s) +::insert_in_full_cell(Full_cell_handle s) /* Concept */ { CGAL_precondition(0 < current_dimension()); CGAL_precondition(Full_cell_handle() != s); @@ -835,7 +844,7 @@ Triangulation_data_structure template typename Triangulation_data_structure::Vertex_handle Triangulation_data_structure -::insert_in_face(const Face & f) +::insert_in_face(const Face & f) /* Concept */ { std::vector simps; simps.reserve(64); @@ -846,7 +855,7 @@ Triangulation_data_structure template typename Triangulation_data_structure::Vertex_handle Triangulation_data_structure -::insert_in_facet(const Facet & ft) +::insert_in_facet(const Facet & ft) /* Concept */ { Full_cell_handle s[2]; s[0] = full_cell(ft); @@ -923,8 +932,8 @@ template< class Dim, class Vb, class Sb > template< typename Forward_iterator, typename OutputIterator > typename Triangulation_data_structure::Vertex_handle Triangulation_data_structure -::insert_in_hole( Forward_iterator start, Forward_iterator end, Facet f, - OutputIterator out) +::insert_in_hole(Forward_iterator start, Forward_iterator end, Facet f, + OutputIterator out) /* Concept */ { CGAL_expensive_precondition( ( std::distance(start, end) == 1 ) @@ -942,7 +951,7 @@ template< class Dim, class Vb, class Sb > template< typename Forward_iterator > typename Triangulation_data_structure::Vertex_handle Triangulation_data_structure -::insert_in_hole(Forward_iterator start, Forward_iterator end, Facet f) +::insert_in_hole(Forward_iterator start, Forward_iterator end, Facet f) /* Concept */ { Emptyset_iterator out; return insert_in_hole(start, end, f, out); @@ -1056,7 +1065,7 @@ void Triangulation_data_structure template typename Triangulation_data_structure::Vertex_handle Triangulation_data_structure -::insert_increase_dimension(Vertex_handle star = Vertex_handle()) +::insert_increase_dimension(Vertex_handle star = Vertex_handle()) /* Concept */ { const int prev_cur_dim = current_dimension(); CGAL_precondition(prev_cur_dim < ambient_dimension()); @@ -1104,7 +1113,7 @@ Triangulation_data_structure template bool Triangulation_data_structure -::is_valid(bool verbose, int /* level */) const +::is_valid(bool verbose, int /* level */) const /* Concept */ { Full_cell_const_handle s, t; Vertex_const_handle v;