diff --git a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polyline.cpp b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polyline.cpp new file mode 100644 index 00000000000..2190354efa5 --- /dev/null +++ b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polyline.cpp @@ -0,0 +1,35 @@ +#include +#include +#include +#include +#include + +namespace PS = CGAL::Polyline_simplification_2; + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef K::Point_2 Point_2; +typedef std::list Polyline; +typedef PS::Stop_above_cost_threshold Stop; +typedef PS::Squared_distance_cost Cost; + +int main( ) +{ + Polyline polyline; + int n; + Point_2 p; + std::cin >> n; + while(std::cin >> p){ + polyline.push_back(p); + } + Cost cost; + std::vector result; + PS::simplify(polyline.begin(), polyline.end(), cost, Stop(0.5), std::back_inserter(result)); + + std::cout.precision(12); + for(int i=0; i < result.size(); ++i){ + std::cout << result[i] << std::endl; + } + return 0; +} + + 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 210366cf284..ec89294c2c2 100644 --- a/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/simplify.h +++ b/Polyline_simplification_2/include/CGAL/Polyline_simplification_2/simplify.h @@ -353,6 +353,55 @@ template + OutputIterator + simplify(PointIterator b, PointIterator e, + CostFunction cost, + StopFunction stop, + OutputIterator out, + bool close = false) +{ + typedef typename std::iterator_traits::value_type Point_2; + typedef typename CGAL::Kernel_traits::type K; + typedef Vertex_base_2< K > Vb; + typedef CGAL::Constrained_triangulation_face_base_2 Fb; + typedef CGAL::Triangulation_data_structure_2 TDS; + typedef CGAL::Constrained_Delaunay_triangulation_2 CDT; + typedef CGAL::Constrained_triangulation_plus_2 PCT; + typedef typename PCT::Constraint_id Constraint_id; + typedef typename PCT::Vertices_in_constraint_iterator Vertices_in_constraint_iterator; + + PCT pct; + + Constraint_id cid = pct.insert_constraint(b,e, close); + + bool keep_points = false; + Polyline_simplification_2 simplifier(pct, cost, stop); + while(simplifier()){} + + Vertices_in_constraint_iterator beg = pct.vertices_in_constraint_begin(cid); + Vertices_in_constraint_iterator end = pct.vertices_in_constraint_end(cid); + for(; beg!=end;){ + Point_2 p = (*beg)->point(); + ++beg; + if((!close) || (beg!=end)){ + *out++ = p; + } + } + return out; +} + + /*! \ingroup PkgPolylineSimplification2Functions