From 141ade3b018ea91bf4a2f2e5b97af08fcb6270ff Mon Sep 17 00:00:00 2001 From: Marc Kramer Date: Mon, 27 Jan 2025 19:02:44 +0100 Subject: [PATCH] Support touching holes --- poly2tri/sweep/sweep_context.cc | 7 ++++++- poly2tri/sweep/sweep_context.h | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/poly2tri/sweep/sweep_context.cc b/poly2tri/sweep/sweep_context.cc index 7b9432f..dbfb1c3 100644 --- a/poly2tri/sweep/sweep_context.cc +++ b/poly2tri/sweep/sweep_context.cc @@ -49,11 +49,16 @@ void SweepContext::AddHole(const std::vector& polyline) { InitEdges(polyline); for (auto i : polyline) { - points_.push_back(i); + if (point_set_.insert(i).second) { + points_.push_back(i); + } } } void SweepContext::AddPoint(Point* point) { + if (!point_set_.insert(point).second) { + throw std::runtime_error("Point already exists"); + } points_.push_back(point); } diff --git a/poly2tri/sweep/sweep_context.h b/poly2tri/sweep/sweep_context.h index 11d5739..42d545d 100644 --- a/poly2tri/sweep/sweep_context.h +++ b/poly2tri/sweep/sweep_context.h @@ -34,6 +34,7 @@ #include #include #include +#include namespace p2t { @@ -136,6 +137,7 @@ friend class Sweep; std::vector triangles_; std::list map_; std::vector points_; +std::unordered_set point_set_; // Advancing front AdvancingFront* front_;