From 8fa117bcc6cb297e1fef49f6f161b917f7553ec4 Mon Sep 17 00:00:00 2001 From: Efi Fogel Date: Sun, 28 Feb 2021 12:06:02 +0200 Subject: [PATCH] Reinstated back conversions --- .../Polygon_conversions.h | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Polygon_conversions.h b/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Polygon_conversions.h index 893b7d17243..f6fcd831412 100644 --- a/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Polygon_conversions.h +++ b/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Polygon_conversions.h @@ -102,7 +102,7 @@ convert_polygon_iterator(InputIterator it, using Function_type = std::function; Function_type func = - std::bind (convert_polygon, std::placeholders::_1, std::ref(tr)); + std::bind(convert_polygon, std::placeholders::_1, std::ref(tr)); return boost::transform_iterator(it, func); } @@ -118,34 +118,30 @@ struct Polygon_converter { using Output_polygon = typename Output_type::Polygon_2; OutputIterator& output; - Polygon_converter(OutputIterator& output) : output (output) { } + Polygon_converter(OutputIterator& output) : output(output) {} - void operator() (const Input_type& pwh) const { + void operator()(const Input_type& pwh) const { Output_polygon outer_boundary; - convert_polygon (pwh.outer_boundary(), outer_boundary); + convert_polygon(pwh.outer_boundary(), outer_boundary); std::vector holes; for (const Input_polygon& h : pwh.holes()) { - holes.emplace_back (); - convert_polygon (h, holes.back()); + holes.emplace_back(); + convert_polygon(h, holes.back()); } - *(output ++) = Output_type(outer_boundary, holes.begin(), holes.end()); + *(output++) = Output_type(outer_boundary, holes.begin(), holes.end()); } private: void convert_polygon(const Input_polygon& input, Output_polygon& out) const { - for (typename Input_polygon::Curve_const_iterator it = input.curves_begin(); - it != input.curves_end(); ++ it) - { - // Skip last point which is the repetition of the first point - typename Input_polygon::X_monotone_curve_2::Point_const_iterator - end = it->points_end(); - -- end; - for (typename Input_polygon::X_monotone_curve_2::Point_const_iterator - it2 = it->points_begin(); it2 != end; ++ it2) - out.push_back (*it2); + for (auto cit = input.curves_begin(); cit != input.curves_end(); ++cit) { + auto end = cit->points_end(); + // Skip last point, which is a duplication of the first point + --end; + for (auto pit = cit->points_begin(); pit != end; ++pit) + out.push_back(*pit); } } }; @@ -161,31 +157,38 @@ struct Polygon_converter_output_iterator : OutputIterator& output; Polygon_converter_output_iterator(OutputIterator& output) : - Base(output), output(output) + Base(output), + output(output) {} operator OutputIterator() const { return output; } }; -// THIS IS A TEMPORARY PLACE HOLDER AND SHOULD BE REMOVED // Convert General_polygon_2 to Polygon_2 template Polygon_2 -convert_polygon_back(const General_polygon_2& pgn) -{ - Polygon_2 tmp; - return tmp; +convert_polygon_back(const General_polygon_2& gpgn) { + Polygon_2 pgn; + for (auto cit = gpgn.curves_begin(); cit != gpgn.curves_end(); ++cit) { + auto end = cit->points_end(); + --end; // skip last point, which is a duplication of the first point + for (auto pit = cit->points_begin(); pit != end; ++pit) pgn.push_back(*pit); + } + return pgn; } -// THIS IS A TEMPORARY PLACE HOLDER AND SHOULD BE REMOVED // Convert General_polygon_with_holes_2 to Polygon_with_holes_2 template Polygon_with_holes_2 convert_polygon_back(const General_polygon_with_holes_2 - >& pwh) + >& gpwh) { - Polygon_with_holes_2 tmp; - return tmp; + std::vector> holes; + for (const auto& gh : gpwh.holes()) + holes.emplace_back(convert_polygon_back(gh)); + return Polygon_with_holes_2 + (convert_polygon_back(gpwh.outer_boundary()), + holes.begin(), holes.end()); } // Converts General_polygon_with_holes_2 to