From 7a91d9f1a575c85036d604c3a2b4ed8ac8ac3497 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 1 Feb 2021 12:36:34 +0000 Subject: [PATCH] With a subsequence p-q-p we do not simplify q --- .../simplify_overlapping_polyline.cpp | 2 +- .../include/CGAL/Polyline_simplification_2/simplify.h | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_overlapping_polyline.cpp b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_overlapping_polyline.cpp index 2df47f53932..96fa16269a3 100644 --- a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_overlapping_polyline.cpp +++ b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_overlapping_polyline.cpp @@ -27,7 +27,7 @@ int main() { CT ct; - std::vector P = { Point(0,1), Point(1,1), Point(2,2), Point(3,1), Point(4,1), Point(5,1) }; + std::vector P = { Point(0,1), Point(1,1), Point(2,2), Point(3,1), Point(4,1), Point(4,2), Point(4,1), Point(5,1) }; std::vector Q = { Point(5,0), Point(4,1), Point(3,1), Point(2,2), Point(1,1), Point(0,0) }; std::vector R = { Point(3,1), Point(4,1) }; 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 579bcfc9707..1b40efc3202 100644 --- a/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/simplify.h +++ b/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/simplify.h @@ -155,9 +155,15 @@ public: Constraint_iterator cit = pct.constraints_begin(), e = pct.constraints_end(); for(; cit!=e; ++cit){ Constraint_id cid = *cit; - Vertices_in_constraint_iterator it = pct.vertices_in_constraint_begin(cid); + Vertices_in_constraint_iterator it = pct.vertices_in_constraint_begin(cid), + ite = pct.vertices_in_constraint_end(cid); (*it)->set_removable(false); - it = pct.vertices_in_constraint_end(cid); + ++it; + for(; it != ite; ++it){ + if((boost::next(it) != ite) && (boost::prior(it)== boost::next(it))){ + (*it)->set_removable(false); + } + } it = boost::prior(it); (*it)->set_removable(false); }