mirror of https://github.com/CGAL/cgal
Merge pull request #8059 from janetournois/Tet_remeshing-document_peeling-jtournois
Tetrahedral_remeshing - `peel_slivers()`
This commit is contained in:
commit
89b2f2bc2b
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 <
|
||||
|
|
|
|||
Loading…
Reference in New Issue