diff --git a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify.cpp b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify.cpp index df94394821c..1d9b69c91bb 100644 --- a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify.cpp +++ b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify.cpp @@ -35,11 +35,11 @@ int main( ) cit != pct.constraints_end(); ++cit) { std::cout << "simplified polyline" << std::endl; - for(Vertices_in_constraint_iterator vit = - pct.vertices_in_constraint_begin(*cit); - vit != pct.vertices_in_constraint_end(*cit); + for(Points_in_constraint_iterator vit = + pct.points_in_constraint_begin(*cit); + vit != pct.points_in_constraint_end(*cit); ++vit) - std::cout << vit->point() << std::endl; + std::cout << *vit << std::endl; } return 0; } diff --git a/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/Squared_distance_cost.h b/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/Squared_distance_cost.h index 6c441ac3f2e..d6be13c38b9 100644 --- a/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/Squared_distance_cost.h +++ b/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/Squared_distance_cost.h @@ -59,8 +59,8 @@ public: Compute_squared_distance compute_squared_distance = pct.geom_traits().compute_squared_distance_2_object() ; Construct_segment construct_segment = pct.geom_traits().construct_segment_2_object() ; - Point const& lP = p->point; - Point const& lR = r->point; + Point const& lP = (*p)->point(); + Point const& lR = (*r)->point(); Segment lP_R = construct_segment(lP, lR) ; @@ -68,7 +68,7 @@ public: ++p; for ( ;p != r; ++p ) - d1 = (std::max)(d1, compute_squared_distance( lP_R, p->point ) ) ; + d1 = (std::max)(d1, compute_squared_distance( lP_R, (*p)->point() ) ) ; return d1 ; } diff --git a/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/mark_vertices_unremovable.h b/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/mark_vertices_unremovable.h index 3dc4b742352..1997aa92067 100644 --- a/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/mark_vertices_unremovable.h +++ b/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/mark_vertices_unremovable.h @@ -40,12 +40,12 @@ mark_vertices_unremovable(CGAL::Polyline_constrained_triangulation_2& pct, for(Vertices_in_constraint_iterator it = pct.vertices_in_constraint_begin(cid); it != pct.vertices_in_constraint_end(cid); it++){ - if(it->point.x() < l->point().x()) l = *it; - if(it->point.x() > r->point().x()) r = *it; - if(it->point.y() < b->point().y()) b = *it; - if(it->point.y() > t->point().y()) t = *it; - } - l->fixed = r->fixed = t->fixed = b->fixed = true; + if((*it)->point().x() < l->point().x()) l = *it; + if((*it)->point().x() > r->point().x()) r = *it; + if((*it)->point().y() < b->point().y()) b = *it; + if((*it)->point().y() > t->point().y()) t = *it; + } + l->fixed = r->fixed = t->fixed = b->fixed = true; } diff --git a/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/simplify.h b/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/simplify.h index 94e5d33aae2..a79eb8b6fc2 100644 --- a/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/simplify.h +++ b/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/simplify.h @@ -75,7 +75,7 @@ public: bool operator() ( Vertices_in_constraint_iterator const& x, Vertices_in_constraint_iterator const& y ) const { - return x->vertex->cost < y->vertex->cost; + return (*x)->cost < (*y)->cost; } } ; @@ -86,7 +86,7 @@ public: typedef value_type reference; typedef Vertices_in_constraint_iterator key_type; - reference operator[] ( key_type const& x ) const { return x->id ; } + reference operator[] ( key_type const& x ) const { return x.base()->id ; } } ; typedef CGAL::Modifiable_priority_queue MPQ ; @@ -129,17 +129,17 @@ public: for(Vertices_in_constraint_iterator it = pct.vertices_in_constraint_begin(cid); it != pct.vertices_in_constraint_end(cid); ++it){ - if(! it->vertex->fixed){ + if(! (*it)->fixed){ Vertices_in_constraint_iterator u = boost::prior(it); Vertices_in_constraint_iterator w = boost::next(it); boost::optional dist = cost(pct, u, it, w); if(dist){ - it->vertex->cost = *dist; + (*it)->cost = *dist; (*mpq).push(it); ++n; } else { - it->vertex->cost = (std::numeric_limits::max)(); + (*it)->cost = (std::numeric_limits::max)(); std::cerr << "could not compute a cost" << std::endl; } } @@ -162,15 +162,15 @@ public: is_removable(Vertices_in_constraint_iterator it) { typedef typename PCT::Geom_traits Geom_traits; - if(it->vertex->fixed) { + if((*it)->fixed) { return false; } - Vertex_handle vh = it->vertex; + Vertex_handle vh = *it; Vertices_in_constraint_iterator u = boost::prior(it); - Vertex_handle uh = u->vertex; + Vertex_handle uh = *u; Vertices_in_constraint_iterator w = boost::next(it); - Vertex_handle wh = w->vertex; + Vertex_handle wh = *w; typename Geom_traits::Orientation_2 orientation_2 = pct.geom_traits().orientation_2_object(); CGAL::Orientation o = orientation_2(uh->point(), vh->point(), wh->point()); @@ -206,7 +206,7 @@ public: for(Vertices_in_constraint_iterator it = pct.vertices_in_constraint_begin(cid); it != pct.vertices_in_constraint_end(cid); ++it){ - it->id = id++; + it.base()->id = id++; } return id; } @@ -230,33 +230,33 @@ operator()() } Vertices_in_constraint_iterator v = (*mpq).top(); (*mpq).pop(); - if(stop(pct, v, v->vertex->cost, pct_initial_number_of_vertices, pct.number_of_vertices())){ + if(stop(pct, v, (*v)->cost, pct_initial_number_of_vertices, pct.number_of_vertices())){ return false; } if(is_removable(v)){ Vertices_in_constraint_iterator u = boost::prior(v), w = boost::next(v); pct.simplify(u,v,w, keep_points); - if(! u->vertex->fixed){ + if(! (*u)->fixed){ Vertices_in_constraint_iterator uu = boost::prior(u); boost::optional dist = cost(pct, uu,u,w); if(! dist){ std::cerr << "undefined cost not handled yet" << std::endl; } else { - u->vertex->cost = *dist; + (*u)->cost = *dist; if((*mpq).contains(u)){ (*mpq).update(u, true); } } } - if(! w->vertex->fixed){ + if(! (*w)->fixed){ Vertices_in_constraint_iterator ww = boost::next(w); boost::optional dist = cost(pct, u,w,ww); if(! dist){ std::cerr << "undefined cost not handled yet" << std::endl; } else { - w->vertex->cost = *dist; + (*w)->cost = *dist; if((*mpq).contains(w)){ (*mpq).update(w, true); } @@ -304,11 +304,8 @@ template result; - for(Vertices_in_constraint_iterator it = pct.vertices_in_constraint_begin(cid); - it != pct.vertices_in_constraint_end(cid); - it++) { - result.push_back(it->point); - } + std::copy(pct.points_in_constraint_begin(cid), + pct.points_in_constraint_end(cid), std::back_inserter(result)); return result; } diff --git a/Triangulation_2/include/CGAL/Polyline_constrained_triangulation_2.h b/Triangulation_2/include/CGAL/Polyline_constrained_triangulation_2.h index 8b5842ada3b..ec79769d754 100644 --- a/Triangulation_2/include/CGAL/Polyline_constrained_triangulation_2.h +++ b/Triangulation_2/include/CGAL/Polyline_constrained_triangulation_2.h @@ -573,11 +573,11 @@ public: { hierarchy.simplify(u,v,w); - Triangulation::remove_incident_constraints(v->vertex); + Triangulation::remove_incident_constraints(*v); - Triangulation::remove(v->vertex); + Triangulation::remove(*v); - Triangulation::insert_constraint(u->vertex,w->vertex); + Triangulation::insert_constraint(*u, *w); } void remove_points_from_constraint(Constraint_id cid) @@ -585,7 +585,7 @@ public: hierarchy.remove_points_from_constraint(cid); } -void remove_points_from_constraints() + void remove_points_from_constraints() { hierarchy.remove_points_from_constraints(); } diff --git a/Triangulation_2/include/CGAL/Polyline_constraint_hierarchy_2.h b/Triangulation_2/include/CGAL/Polyline_constraint_hierarchy_2.h index 75e461e68ee..95da805a003 100644 --- a/Triangulation_2/include/CGAL/Polyline_constraint_hierarchy_2.h +++ b/Triangulation_2/include/CGAL/Polyline_constraint_hierarchy_2.h @@ -73,10 +73,10 @@ public: { public: Point_it() : Vertex_it::iterator_adaptor_() {} - Point_it(typename Vertex_list::all_iterator it) : Vertex_it::iterator_adaptor_(it) {} + Point_it(typename Vertex_list::all_iterator it) : Point_it::iterator_adaptor_(it) {} private: friend class boost::iterator_core_access; - Vertex_handle dereference() const { return this->base()->point(); } + Point& dereference() const { return this->base()->point(); } }; // only nodes with a vertex_handle that is still in the triangulation @@ -91,6 +91,7 @@ public: public: Vertex_it() : Vertex_it::iterator_adaptor_() {} Vertex_it(typename Vertex_list::skip_iterator it) : Vertex_it::iterator_adaptor_(it) {} + operator Point_it() const { return Point_it(this->base()); } private: friend class boost::iterator_core_access; Vertex_handle dereference() const { return this->base()->vertex(); } @@ -146,8 +147,15 @@ public: bool vertices_in_constraint(Constraint hc, Vertex_it& v_first, Vertex_it& v_past) const; - Vertex_it vertices_in_constraint_begin(Constraint_id) const; - Vertex_it vertices_in_constraint_end(Constraint_id) const; + Vertex_it vertices_in_constraint_begin(Constraint_id cid) const + { return cid->skip_begin(); } + Vertex_it vertices_in_constraint_end(Constraint_id cid) const + { return cid->skip_end(); } + + Point_it points_in_constraint_begin(Constraint_id cid) const + { return cid->all_begin(); } + Point_it points_in_constraint_end(Constraint_id cid) const + { return cid->all_end(); } bool enclosing_constraint(Edge he, Constraint& hc) const; bool enclosing_constraint(T vaa, T vbb, T& va, T& vb) const; @@ -413,22 +421,6 @@ contexts_end(T va, T vb) return last; } -template -typename Polyline_constraint_hierarchy_2::Vertex_it -Polyline_constraint_hierarchy_2:: -vertices_in_constraint_begin(Constraint_id cid) const -{ - return cid->skip_begin(); -} - -template -typename Polyline_constraint_hierarchy_2::Vertex_it -Polyline_constraint_hierarchy_2:: -vertices_in_constraint_end(Constraint_id cid) const -{ - return cid->skip_end(); -} - template void Polyline_constraint_hierarchy_2:: @@ -529,13 +521,13 @@ void Polyline_constraint_hierarchy_2::simplify(Vertex_it uc, Vertex_it wc) { - CGAL_assertion(vc->vertex->fixed != true); - Vertex_handle u = uc->vertex, v = vc->vertex, w = wc->vertex; + CGAL_assertion((*vc)->fixed != true); + Vertex_handle u = *uc, v = *vc, w = *wc; typename Sc_to_c_map::iterator uv_sc_iter = sc_to_c_map.find(make_edge(u, v)); CGAL_assertion_msg( uv_sc_iter != sc_to_c_map.end(), "not a subconstraint" ); Context_list* uv_hcl = uv_sc_iter->second; CGAL_assertion_msg(uv_hcl->size() == 1, "more than one constraint passing through the subconstraint" ); - if((uv_hcl->front().current())->vertex != u) { + if(*(uv_hcl->front().current()) != u) { std::swap(u,w); uv_sc_iter = sc_to_c_map.find(make_edge(u, v)); CGAL_assertion_msg( uv_sc_iter != sc_to_c_map.end(), "not a subconstraint" ); @@ -550,7 +542,7 @@ void Polyline_constraint_hierarchy_2::simplify(Vertex_it uc, Vertex_list* vertex_list = uv_hcl->front().id(); CGAL_assertion_msg(vertex_list == vw_hcl->front().id(), "subconstraints from different polyline constraints" ); // Remove the list item which points to v - vertex_list->skip(vc); + vertex_list->skip(vc.base()); // Remove the entries for [u,v] and [v,w] sc_to_c_map.erase(uv_sc_iter); @@ -566,9 +558,10 @@ int Polyline_constraint_hierarchy_2::remove_points_from_constraint(Constraint_id cid) { int n=0; - for(Point_it it = cid->all_begin(); it != cid->all_end(); ++it) { - if(cid->is_skipped(it)) { - it = cid->erase(it); + for(Point_it it = points_in_constraint_begin(cid); + it != points_in_constraint_end(cid); ++it) { + if(cid->is_skipped(it.base())) { + it = cid->erase(it.base()); ++n; } }