Merge pull request #8059 from janetournois/Tet_remeshing-document_peeling-jtournois

Tetrahedral_remeshing - `peel_slivers()`
This commit is contained in:
Laurent Rineau 2024-03-26 10:21:08 +01:00
commit 89b2f2bc2b
4 changed files with 67 additions and 20 deletions

View File

@ -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 <CGAL/license/Tetrahedral_remeshing.h>
#include <CGAL/property_map.h>
namespace CGAL
{
namespace Tetrahedral_remeshing
{
template<typename Tr>
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

View File

@ -16,11 +16,15 @@
#include <CGAL/license/Tetrahedral_remeshing.h>
#include <CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h>
#include <CGAL/Tetrahedral_remeshing/Complex_cells_selector.h>
namespace CGAL
{
namespace Tetrahedral_remeshing
{
template<typename C3T3>
std::size_t peel_slivers(C3T3& c3t3,
const typename C3T3::Triangulation::Geom_traits::FT& sliver_angle);
template<typename C3T3, typename CellSelector>
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<bool, 4> facets_on_surface;
@ -111,6 +116,16 @@ std::size_t peel_slivers(C3T3& c3t3,
return nb_slivers_peel;
}
template<typename C3T3>
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<Tr>());
}
} // end namespace Tetrahedral_remeshing
} // end namespace CGAL

View File

@ -57,22 +57,7 @@ public:
void after_flip(CellHandle /* c */) {}
};
template<typename Tr>
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<typename Triangulation

View File

@ -20,6 +20,8 @@
#include <CGAL/Tetrahedral_remeshing/Sizing_field.h>
#include <CGAL/Tetrahedral_remeshing/Uniform_sizing_field.h>
#include <CGAL/Tetrahedral_remeshing/Complex_cells_selector.h>
#include <CGAL/Tetrahedral_remeshing/internal/tetrahedral_adaptive_remeshing_impl.h>
#include <CGAL/Tetrahedral_remeshing/internal/compute_c3t3_statistics.h>
@ -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<Tr>//default
Tetrahedral_remeshing::Complex_cells_selector<Tr>//default
> ::type SelectionFunctor;
SelectionFunctor cell_select
= choose_parameter(get_parameter(np, internal_np::cell_selector),
Tetrahedral_remeshing::internal::All_cells_selected<Tr>());
Tetrahedral_remeshing::Complex_cells_selector<Tr>());
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<Tr>//default
Tetrahedral_remeshing::Complex_cells_selector<Tr>//default
> ::type SelectionFunctor;
SelectionFunctor cell_select
= choose_parameter(get_parameter(np, internal_np::cell_selector),
Tetrahedral_remeshing::internal::All_cells_selected<Tr>());
Tetrahedral_remeshing::Complex_cells_selector<Tr>());
typedef typename Tr::Vertex_handle Vertex_handle;
typedef typename internal_np::Lookup_named_param_def <