From 3c1fce0903a7dc7e390b417e6bf93de29fabb6a4 Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Fri, 14 Feb 2025 00:57:43 +0100 Subject: [PATCH 1/3] do not deduplicate single line polygon --- src/PartSegCore_compiled_backend/triangulation/triangulate.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp b/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp index 374c766..5dad118 100644 --- a/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp +++ b/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp @@ -890,6 +890,7 @@ inline std::vector calc_dedup_edges( } } if (polygon.back() == polygon.front()) continue; + if (polygon.size() == 2) continue; edge = point::Segment(polygon.back(), polygon.front()); if (edges_set.count(edge) == 0) { edges_set.insert(edge); From 5f3e0864a79ad8390b96ff2859320832cf4326fb Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Fri, 14 Feb 2025 01:05:19 +0100 Subject: [PATCH 2/3] render edges of short polygon --- src/PartSegCore_compiled_backend/triangulation/triangulate.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp b/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp index 5dad118..da4f604 100644 --- a/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp +++ b/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp @@ -890,7 +890,6 @@ inline std::vector calc_dedup_edges( } } if (polygon.back() == polygon.front()) continue; - if (polygon.size() == 2) continue; edge = point::Segment(polygon.back(), polygon.front()); if (edges_set.count(edge) == 0) { edges_set.insert(edge); @@ -1328,6 +1327,7 @@ struct GraphNode { */ inline std::vector> split_polygon_on_repeated_edges( const std::vector &polygon) { + if (polygon.size() < 3) return {polygon}; auto edges_dedup = calc_dedup_edges({polygon}); std::vector> result; point::Segment segment; From 5a87e191b52b92fc902be8931dd87be2447c2922 Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Fri, 14 Feb 2025 08:43:20 +0100 Subject: [PATCH 3/3] update docstring --- src/PartSegCore_compiled_backend/triangulation/triangulate.hpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp b/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp index da4f604..e362d78 100644 --- a/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp +++ b/src/PartSegCore_compiled_backend/triangulation/triangulate.hpp @@ -1320,6 +1320,9 @@ struct GraphNode { * resulting sub-polygon contains unique edges. This operation can help to * resolve ambiguities in complex or self-intersecting polygons. * + * Note: Polygons with exactly 2 points are treated as single line segments and + * are not processed for edge deduplication between their first and last points. + * * @param polygon The input polygon represented as a list of edges. * * @return A vector of sub-polygons, where each sub-polygon is free of repeated