diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/Complex_cells_selector.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/Complex_cells_selector.h new file mode 100644 index 00000000000..d7822d6bea0 --- /dev/null +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/Complex_cells_selector.h @@ -0,0 +1,45 @@ +// Copyright (c) 2024 GeometryFactory (France) and Telecom Paris (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Jane Tournois, Noura Faraj, Jean-Marc Thiery, Tamy Boubekeur + +#ifndef CGAL_INTERNAL_C3T3_CELLS_SELECTOR_H +#define CGAL_INTERNAL_C3T3_CELLS_SELECTOR_H + +#include + +#include + +namespace CGAL +{ +namespace Tetrahedral_remeshing +{ + template + struct Complex_cells_selector + { + using key_type = typename Tr::Cell_handle; + using value_type = bool; + using reference = bool; + using category = boost::read_write_property_map_tag; + + friend value_type get(const Complex_cells_selector&, const key_type& c) + { + using SI = typename Tr::Cell::Subdomain_index; + return c->subdomain_index() != SI(); + } + friend void put(Complex_cells_selector&, const key_type&, const value_type) + {} //nothing to do : subdomain indices are updated in remeshing}; + }; + + +} // end namespace Tetrahedral_remeshing +} // end namespace CGAL + +#endif // CGAL_INTERNAL_C3T3_CELLS_SELECTOR_H diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/peel_slivers.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/peel_slivers.h index 9cbff2ba95a..183e53a000d 100644 --- a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/peel_slivers.h +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/peel_slivers.h @@ -16,11 +16,15 @@ #include #include +#include namespace CGAL { namespace Tetrahedral_remeshing { +template +std::size_t peel_slivers(C3T3& c3t3, + const typename C3T3::Triangulation::Geom_traits::FT& sliver_angle); template std::size_t peel_slivers(C3T3& c3t3, @@ -41,7 +45,8 @@ std::size_t peel_slivers(C3T3& c3t3, #endif for (Cell_handle cit : c3t3.cells_in_complex()) { - if(!get(cell_selector, cit)) + const bool selected = get(cell_selector, cit); + if(!selected) continue; std::array facets_on_surface; @@ -111,6 +116,16 @@ std::size_t peel_slivers(C3T3& c3t3, return nb_slivers_peel; } +template +std::size_t peel_slivers(C3T3 & c3t3, + const typename C3T3::Triangulation::Geom_traits::FT & sliver_angle) +{ + using Tr = typename C3T3::Triangulation; + return peel_slivers(c3t3, sliver_angle, + CGAL::Tetrahedral_remeshing::Complex_cells_selector()); +} + + } // end namespace Tetrahedral_remeshing } // end namespace CGAL diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_adaptive_remeshing_impl.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_adaptive_remeshing_impl.h index 5912bb67575..1e465f2c3b6 100644 --- a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_adaptive_remeshing_impl.h +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_adaptive_remeshing_impl.h @@ -57,22 +57,7 @@ public: void after_flip(CellHandle /* c */) {} }; -template -struct All_cells_selected -{ - using key_type = typename Tr::Cell_handle; - using value_type = bool; - using reference = bool; - using category = boost::read_write_property_map_tag; - friend value_type get(const All_cells_selected&, const key_type& c) - { - using SI = typename Tr::Cell::Subdomain_index; - return c->subdomain_index() != SI(); - } - friend void put(All_cells_selected&, const key_type&, const value_type) - {} //nothing to do : subdomain indices are updated in remeshing}; -}; template #include +#include + #include #include @@ -228,11 +230,11 @@ void tetrahedral_isotropic_remeshing( typedef typename internal_np::Lookup_named_param_def < internal_np::cell_selector_t, NamedParameters, - Tetrahedral_remeshing::internal::All_cells_selected//default + Tetrahedral_remeshing::Complex_cells_selector//default > ::type SelectionFunctor; SelectionFunctor cell_select = choose_parameter(get_parameter(np, internal_np::cell_selector), - Tetrahedral_remeshing::internal::All_cells_selected()); + Tetrahedral_remeshing::Complex_cells_selector()); typedef typename Tr::Vertex_handle Vertex_handle; typedef typename internal_np::Lookup_named_param_def < @@ -485,11 +487,11 @@ void tetrahedral_isotropic_remeshing( typedef typename internal_np::Lookup_named_param_def < internal_np::cell_selector_t, NamedParameters, - Tetrahedral_remeshing::internal::All_cells_selected//default + Tetrahedral_remeshing::Complex_cells_selector//default > ::type SelectionFunctor; SelectionFunctor cell_select = choose_parameter(get_parameter(np, internal_np::cell_selector), - Tetrahedral_remeshing::internal::All_cells_selected()); + Tetrahedral_remeshing::Complex_cells_selector()); typedef typename Tr::Vertex_handle Vertex_handle; typedef typename internal_np::Lookup_named_param_def <