From beeae185a78f85de44cab5abdda05f24931b0be2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 8 Jun 2022 12:04:02 +0200 Subject: [PATCH] Add a basic visitor to AW3 --- .../CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h index 3d09b2a8dff..e88e00fafe0 100644 --- a/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h +++ b/Alpha_wrap_3/include/CGAL/Alpha_wrap_3/internal/Alpha_wrap_3.h @@ -103,13 +103,26 @@ struct Wrapping_default_visitor { Wrapping_default_visitor() { } + template + void on_alpha_wrapping_begin(const AlphaWrapper&) { } + + template + void on_flood_fill_begin(const AlphaWrapper&) { } + + template + void before_facet_treatment(const AlphaWrapper&, const Gate&) { } + template void before_Steiner_point_insertion(const Wrapper&, const Point&) { } template void after_Steiner_point_insertion(const Wrapper&, VertexHandle) { } - void after_alpha_wrapping() { } + template + void on_flood_fill_end(const AlphaWrapper&) { } + + template + void on_alpha_wrapping_end(const AlphaWrapper&) { }; }; template @@ -187,6 +200,7 @@ public: const Geom_traits& geom_traits() const { return m_dt.geom_traits(); } Dt& triangulation() { return m_dt; } const Dt& triangulation() const { return m_dt; } + const Alpha_PQ& queue() const { return m_queue; } double default_alpha() const { @@ -252,6 +266,8 @@ public: t.start(); #endif + visitor.on_alpha_wrapping_begin(*this); + if(!initialize(alpha, offset, seeds)) return; @@ -340,7 +356,7 @@ public: #endif #endif - visitor.after_alpha_wrapping(); + visitor.on_alpha_wrapping_end(*this); } // Convenience overloads @@ -1029,6 +1045,8 @@ private: std::cout << "> Flood fill..." << std::endl; #endif + visitor.on_flood_fill_begin(*this); + // Explore all finite cells that are reachable from one of the initial outside cells. while(!m_queue.empty()) { @@ -1055,6 +1073,8 @@ private: std::cout << "Priority: " << gate.priority() << std::endl; #endif + visitor.before_facet_treatment(*this, gate); + m_queue.pop(); #ifdef CGAL_AW3_DEBUG_DUMP_EVERY_STEP @@ -1170,6 +1190,8 @@ private: } } // while(!queue.empty()) + visitor.on_flood_fill_end(*this); + // Check that no useful facet has been ignored CGAL_postcondition_code(for(auto fit=m_dt.finite_facets_begin(), fend=m_dt.finite_facets_end(); fit!=fend; ++fit) {) CGAL_postcondition_code( if(fit->first->info().is_outside == fit->first->neighbor(fit->second)->info().is_outside) continue;)