From ccb0db385bbbe0ae4cdc8fc99f89d5fdf5b94852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 23 Jun 2022 13:43:36 +0200 Subject: [PATCH] make create_exterior_skeleton_and_offset_polygons_with_holes_2 ignore the offset of the outer frame --- ...ffset_polygons_from_polygon_with_holes_2.h | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/Straight_skeleton_2/include/CGAL/create_offset_polygons_from_polygon_with_holes_2.h b/Straight_skeleton_2/include/CGAL/create_offset_polygons_from_polygon_with_holes_2.h index 139c7a17254..12f5e937513 100644 --- a/Straight_skeleton_2/include/CGAL/create_offset_polygons_from_polygon_with_holes_2.h +++ b/Straight_skeleton_2/include/CGAL/create_offset_polygons_from_polygon_with_holes_2.h @@ -90,8 +90,30 @@ create_exterior_skeleton_and_offset_polygons_with_holes_2(const FT& aOffset, const OfK& ofk, const SsK& ssk) { - return arrange_offset_polygons_2( - create_exterior_skeleton_and_offset_polygons_2(aOffset, aPoly, ofk, ssk)); + typedef typename CGAL_SS_i::Default_return_polygon_type::type Polygon_; + std::vector > raw_output = + create_exterior_skeleton_and_offset_polygons_2(aOffset, aPoly, ofk, ssk); + + // filter offset of the outer frame + typename OfK::Point_2 xtrm_pt = *(raw_output[0]->begin()); + std::size_t outer_id=0; + for(std::size_t i=0; iorientation() == COUNTERCLOCKWISE) + { + for (const typename OfK::Point_2& p : raw_output[i]->container()) + if (p < xtrm_pt) + { + xtrm_pt=p; + outer_id=i; + } + } + if (outer_id != (raw_output.size()-1)) + std::swap(raw_output[outer_id], raw_output.back()); + raw_output.pop_back(); + for (boost::shared_ptr ptr : raw_output) + ptr->reverse_orientation(); + + return arrange_offset_polygons_2(raw_output); } template