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/license/Tetrahedral_remeshing.h>
|
||||||
|
|
||||||
#include <CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h>
|
#include <CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h>
|
||||||
|
#include <CGAL/Tetrahedral_remeshing/Complex_cells_selector.h>
|
||||||
|
|
||||||
namespace CGAL
|
namespace CGAL
|
||||||
{
|
{
|
||||||
namespace Tetrahedral_remeshing
|
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>
|
template<typename C3T3, typename CellSelector>
|
||||||
std::size_t peel_slivers(C3T3& c3t3,
|
std::size_t peel_slivers(C3T3& c3t3,
|
||||||
|
|
@ -41,7 +45,8 @@ std::size_t peel_slivers(C3T3& c3t3,
|
||||||
#endif
|
#endif
|
||||||
for (Cell_handle cit : c3t3.cells_in_complex())
|
for (Cell_handle cit : c3t3.cells_in_complex())
|
||||||
{
|
{
|
||||||
if(!get(cell_selector, cit))
|
const bool selected = get(cell_selector, cit);
|
||||||
|
if(!selected)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
std::array<bool, 4> facets_on_surface;
|
std::array<bool, 4> facets_on_surface;
|
||||||
|
|
@ -111,6 +116,16 @@ std::size_t peel_slivers(C3T3& c3t3,
|
||||||
return nb_slivers_peel;
|
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 Tetrahedral_remeshing
|
||||||
} // end namespace CGAL
|
} // end namespace CGAL
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -57,22 +57,7 @@ public:
|
||||||
void after_flip(CellHandle /* c */) {}
|
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
|
template<typename Triangulation
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
#include <CGAL/Tetrahedral_remeshing/Sizing_field.h>
|
#include <CGAL/Tetrahedral_remeshing/Sizing_field.h>
|
||||||
#include <CGAL/Tetrahedral_remeshing/Uniform_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/tetrahedral_adaptive_remeshing_impl.h>
|
||||||
#include <CGAL/Tetrahedral_remeshing/internal/compute_c3t3_statistics.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 <
|
typedef typename internal_np::Lookup_named_param_def <
|
||||||
internal_np::cell_selector_t,
|
internal_np::cell_selector_t,
|
||||||
NamedParameters,
|
NamedParameters,
|
||||||
Tetrahedral_remeshing::internal::All_cells_selected<Tr>//default
|
Tetrahedral_remeshing::Complex_cells_selector<Tr>//default
|
||||||
> ::type SelectionFunctor;
|
> ::type SelectionFunctor;
|
||||||
SelectionFunctor cell_select
|
SelectionFunctor cell_select
|
||||||
= choose_parameter(get_parameter(np, internal_np::cell_selector),
|
= 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 Tr::Vertex_handle Vertex_handle;
|
||||||
typedef typename internal_np::Lookup_named_param_def <
|
typedef typename internal_np::Lookup_named_param_def <
|
||||||
|
|
@ -485,11 +487,11 @@ void tetrahedral_isotropic_remeshing(
|
||||||
typedef typename internal_np::Lookup_named_param_def <
|
typedef typename internal_np::Lookup_named_param_def <
|
||||||
internal_np::cell_selector_t,
|
internal_np::cell_selector_t,
|
||||||
NamedParameters,
|
NamedParameters,
|
||||||
Tetrahedral_remeshing::internal::All_cells_selected<Tr>//default
|
Tetrahedral_remeshing::Complex_cells_selector<Tr>//default
|
||||||
> ::type SelectionFunctor;
|
> ::type SelectionFunctor;
|
||||||
SelectionFunctor cell_select
|
SelectionFunctor cell_select
|
||||||
= choose_parameter(get_parameter(np, internal_np::cell_selector),
|
= 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 Tr::Vertex_handle Vertex_handle;
|
||||||
typedef typename internal_np::Lookup_named_param_def <
|
typedef typename internal_np::Lookup_named_param_def <
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue