mirror of https://github.com/CGAL/cgal
port back to C++17
The lack of `std::set::contains` is a real pain! Using `count()` instead reduces the readability of the code.
This commit is contained in:
parent
c41a55f99b
commit
62e3e8dc12
|
|
@ -284,6 +284,7 @@ private:
|
||||||
using CDT_2 = typename CDT_2_types::CDT;
|
using CDT_2 = typename CDT_2_types::CDT;
|
||||||
using CDT_2_traits = typename CDT_2_types::Projection_traits;
|
using CDT_2_traits = typename CDT_2_types::Projection_traits;
|
||||||
using CDT_2_face_handle = typename CDT_2::Face_handle;
|
using CDT_2_face_handle = typename CDT_2::Face_handle;
|
||||||
|
using CDT_2_edge = typename CDT_2::Edge;
|
||||||
static_assert(std::is_nothrow_move_constructible<CDT_2>::value,
|
static_assert(std::is_nothrow_move_constructible<CDT_2>::value,
|
||||||
"move cstr is missing");
|
"move cstr is missing");
|
||||||
static_assert(std::is_nothrow_move_assignable<CDT_2>::value,
|
static_assert(std::is_nothrow_move_assignable<CDT_2>::value,
|
||||||
|
|
@ -954,12 +955,12 @@ private:
|
||||||
const auto cdt_2_dual_graph = dual(cdt_2.tds());
|
const auto cdt_2_dual_graph = dual(cdt_2.tds());
|
||||||
const boost::filtered_graph dual(
|
const boost::filtered_graph dual(
|
||||||
cdt_2_dual_graph,
|
cdt_2_dual_graph,
|
||||||
[](auto edge) {
|
+[](CDT_2_edge edge) { // the `+` forces conversion of the lambda to a function pointer
|
||||||
const auto face = edge.first;
|
const auto face = edge.first;
|
||||||
const auto i = unsigned(edge.second);
|
const auto i = unsigned(edge.second);
|
||||||
return false == face->info().is_edge_also_in_3d_triangulation.test(i);
|
return false == face->info().is_edge_also_in_3d_triangulation.test(i);
|
||||||
},
|
},
|
||||||
[](auto face_handle) { return false == face_handle->info().is_outside_the_face; });
|
+[](CDT_2_face_handle face_handle) { return false == face_handle->info().is_outside_the_face; });
|
||||||
boost::breadth_first_search(dual, fh,
|
boost::breadth_first_search(dual, fh,
|
||||||
boost::color_map(typename CDT_2_types::Color_map_is_in_region())
|
boost::color_map(typename CDT_2_types::Color_map_is_in_region())
|
||||||
.visitor(boost::make_bfs_visitor(boost::write_property(
|
.visitor(boost::make_bfs_visitor(boost::write_property(
|
||||||
|
|
@ -1007,8 +1008,9 @@ private:
|
||||||
Tri triangle;
|
Tri triangle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename Fh_region>
|
||||||
int does_edge_intersect_region(Cell_handle cell, int index_vc, int index_vd,
|
int does_edge_intersect_region(Cell_handle cell, int index_vc, int index_vd,
|
||||||
const CDT_2& cdt_2, const auto& fh_region)
|
const CDT_2& cdt_2, const Fh_region& fh_region)
|
||||||
{
|
{
|
||||||
const auto vc = cell->vertex(index_vd);
|
const auto vc = cell->vertex(index_vd);
|
||||||
const auto vd = cell->vertex(index_vc);
|
const auto vd = cell->vertex(index_vc);
|
||||||
|
|
@ -1042,10 +1044,10 @@ private:
|
||||||
// Given a region and a border edge of it, returns an edge in the link of the
|
// Given a region and a border edge of it, returns an edge in the link of the
|
||||||
// border edge that intersects the region.
|
// border edge that intersects the region.
|
||||||
// The returned edge has its first vertex above the region.
|
// The returned edge has its first vertex above the region.
|
||||||
template <typename Edges_container>
|
template <typename Fh_region, typename Edges_container>
|
||||||
std::optional<Edge> search_first_intersection(CDT_3_face_index /*face_index*/,
|
std::optional<Edge> search_first_intersection(CDT_3_face_index /*face_index*/,
|
||||||
const CDT_2& cdt_2,
|
const CDT_2& cdt_2,
|
||||||
const auto& fh_region,
|
const Fh_region& fh_region,
|
||||||
const Edges_container& border_edges)
|
const Edges_container& border_edges)
|
||||||
{
|
{
|
||||||
for(const auto [c, i, j]: border_edges) {
|
for(const auto [c, i, j]: border_edges) {
|
||||||
|
|
@ -1092,11 +1094,12 @@ private:
|
||||||
return std::pair<Vertex_handle, Vertex_handle>{c->vertex(i), c->vertex(j)};
|
return std::pair<Vertex_handle, Vertex_handle>{c->vertex(i), c->vertex(j)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Fh_region, typename Vertices_container>
|
||||||
auto construct_cavities(CDT_3_face_index face_index,
|
auto construct_cavities(CDT_3_face_index face_index,
|
||||||
int region_count,
|
int region_count,
|
||||||
const CDT_2& cdt_2,
|
const CDT_2& cdt_2,
|
||||||
const auto& fh_region,
|
const Fh_region& fh_region,
|
||||||
const auto& polygon_vertices,
|
const Vertices_container& polygon_vertices,
|
||||||
Edge first_intersecting_edge)
|
Edge first_intersecting_edge)
|
||||||
{
|
{
|
||||||
// outputs
|
// outputs
|
||||||
|
|
@ -1145,8 +1148,8 @@ private:
|
||||||
IO::oformat(v_above, with_point),
|
IO::oformat(v_above, with_point),
|
||||||
IO::oformat(v_below, with_point));
|
IO::oformat(v_below, with_point));
|
||||||
#endif // CGAL_CDT_3_DEBUG_REGION
|
#endif // CGAL_CDT_3_DEBUG_REGION
|
||||||
CGAL_assertion(false == polygon_vertices.contains(v_above));
|
CGAL_assertion(0 == polygon_vertices.count(v_above));
|
||||||
CGAL_assertion(false == polygon_vertices.contains(v_below));
|
CGAL_assertion(0 == polygon_vertices.count(v_below));
|
||||||
if(new_vertex(v_above)) {
|
if(new_vertex(v_above)) {
|
||||||
vertices_of_upper_cavity.push_back(v_above);
|
vertices_of_upper_cavity.push_back(v_above);
|
||||||
}
|
}
|
||||||
|
|
@ -1167,7 +1170,7 @@ private:
|
||||||
const auto index_v_below = cell->index(v_below);
|
const auto index_v_below = cell->index(v_below);
|
||||||
const auto index_vc = 6 - index_v_above - index_v_below - facet_index;
|
const auto index_vc = 6 - index_v_above - index_v_below - facet_index;
|
||||||
const auto vc = cell->vertex(index_vc);
|
const auto vc = cell->vertex(index_vc);
|
||||||
if(polygon_vertices.contains(vc)) continue; // intersecting edges cannot touch the border
|
if(polygon_vertices.count(vc) > 0) continue; // intersecting edges cannot touch the border
|
||||||
|
|
||||||
auto test_edge = [&](Vertex_handle v0, int index_v0, Vertex_handle v1, int index_v1, int expected) {
|
auto test_edge = [&](Vertex_handle v0, int index_v0, Vertex_handle v1, int index_v1, int expected) {
|
||||||
auto [cached_value_it, not_visited] = new_edge(v0, v1, false);
|
auto [cached_value_it, not_visited] = new_edge(v0, v1, false);
|
||||||
|
|
@ -1218,10 +1221,10 @@ private:
|
||||||
const auto index_v_below = cell->index(v_below);
|
const auto index_v_below = cell->index(v_below);
|
||||||
const auto cell_above = cell->neighbor(index_v_below);
|
const auto cell_above = cell->neighbor(index_v_below);
|
||||||
const auto cell_below = cell->neighbor(index_v_above);
|
const auto cell_below = cell->neighbor(index_v_above);
|
||||||
if(!intersecting_cells.contains(cell_above)) {
|
if(0 == intersecting_cells.count(cell_above)) {
|
||||||
facets_of_upper_cavity.emplace_back(cell_above, cell_above->index(cell));
|
facets_of_upper_cavity.emplace_back(cell_above, cell_above->index(cell));
|
||||||
}
|
}
|
||||||
if(!intersecting_cells.contains(cell_below)) {
|
if(0 == intersecting_cells.count(cell_below)) {
|
||||||
facets_of_lower_cavity.emplace_back(cell_below, cell_below->index(cell));
|
facets_of_lower_cavity.emplace_back(cell_below, cell_below->index(cell));
|
||||||
}
|
}
|
||||||
} while(++cell_circ != end);
|
} while(++cell_circ != end);
|
||||||
|
|
@ -1243,8 +1246,9 @@ private:
|
||||||
static constexpr With_point_tag with_point{};
|
static constexpr With_point_tag with_point{};
|
||||||
static constexpr With_point_and_info_tag with_point_and_info{};
|
static constexpr With_point_and_info_tag with_point_and_info{};
|
||||||
|
|
||||||
|
template <typename Fh_region>
|
||||||
void restore_subface_region(CDT_3_face_index face_index, int region_count,
|
void restore_subface_region(CDT_3_face_index face_index, int region_count,
|
||||||
CDT_2& non_const_cdt_2, auto& non_const_fh_region)
|
CDT_2& non_const_cdt_2, Fh_region& non_const_fh_region)
|
||||||
{
|
{
|
||||||
const auto& cdt_2 = non_const_cdt_2;
|
const auto& cdt_2 = non_const_cdt_2;
|
||||||
const auto& fh_region = non_const_fh_region;
|
const auto& fh_region = non_const_fh_region;
|
||||||
|
|
@ -1319,6 +1323,8 @@ private:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if __has_include(<format>) && \
|
||||||
|
(__cpp_lib_format >= 201907L || __cplusplus >= 202000L || _MSVC_LANG >= 202000L)
|
||||||
std::cerr << std::format
|
std::cerr << std::format
|
||||||
("NOTE: diagonal: {:.6} {:.6} {} in tr\n",
|
("NOTE: diagonal: {:.6} {:.6} {} in tr\n",
|
||||||
IO::oformat(*diagonal.begin(), with_point),
|
IO::oformat(*diagonal.begin(), with_point),
|
||||||
|
|
@ -1357,6 +1363,7 @@ private:
|
||||||
face_index, region_count);
|
face_index, region_count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif // __has_include(<format>) && (__cpp_lib_format >= 201907L || __cplusplus >= 202000L || _MSVC_LANG >= 202000L)
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
@ -1410,7 +1417,7 @@ private:
|
||||||
const auto [c, facet_index] = f;
|
const auto [c, facet_index] = f;
|
||||||
for(int i = 0; i < 3; ++i) {
|
for(int i = 0; i < 3; ++i) {
|
||||||
const auto vh = c->vertex(T_3::vertex_triple_index(facet_index, i));
|
const auto vh = c->vertex(T_3::vertex_triple_index(facet_index, i));
|
||||||
if(!polygon_points.contains(tr.point(vh))) {
|
if(0 == polygon_points.count(tr.point(vh))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1760,7 +1767,7 @@ private:
|
||||||
const Facets_range& orig_facets_of_cavity_border,
|
const Facets_range& orig_facets_of_cavity_border,
|
||||||
const Vertices_range& orig_vertices_of_cavity) const ///@TODO: not deterministic, without time stamps
|
const Vertices_range& orig_vertices_of_cavity) const ///@TODO: not deterministic, without time stamps
|
||||||
{
|
{
|
||||||
using Vertex_map = T_3::Vertex_handle_unique_hash_map;
|
using Vertex_map = typename T_3::Vertex_handle_unique_hash_map;
|
||||||
struct {
|
struct {
|
||||||
Constrained_Delaunay_triangulation_3 cavity_triangulation;
|
Constrained_Delaunay_triangulation_3 cavity_triangulation;
|
||||||
std::set<Vertex_handle> vertices;
|
std::set<Vertex_handle> vertices;
|
||||||
|
|
@ -1805,7 +1812,7 @@ private:
|
||||||
missing_faces.clear();
|
missing_faces.clear();
|
||||||
boost::container::small_vector<Facet, 32> internal_facets;
|
boost::container::small_vector<Facet, 32> internal_facets;
|
||||||
for(auto f : facets_of_cavity_border) {
|
for(auto f : facets_of_cavity_border) {
|
||||||
if(cells_of_cavity.contains(f.first)) {
|
if(cells_of_cavity.count(f.first) > 0) {
|
||||||
// internal facet, due to cavity growing
|
// internal facet, due to cavity growing
|
||||||
internal_facets.push_back(f);
|
internal_facets.push_back(f);
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -1839,7 +1846,7 @@ private:
|
||||||
for(int i = 0; i < 3; ++i) {
|
for(int i = 0; i < 3; ++i) {
|
||||||
Facet other_f{cell, this->vertex_triple_index(facet_index, i)};
|
Facet other_f{cell, this->vertex_triple_index(facet_index, i)};
|
||||||
Facet mirror_f = this->mirror_facet(other_f);
|
Facet mirror_f = this->mirror_facet(other_f);
|
||||||
if(!cells_of_cavity.contains(mirror_f.first)) {
|
if(cells_of_cavity.count(mirror_f.first) == 0) {
|
||||||
facets_of_cavity_border.insert(mirror_f);
|
facets_of_cavity_border.insert(mirror_f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2062,7 +2069,7 @@ private:
|
||||||
fh->info().missing_subface = false;
|
fh->info().missing_subface = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(processed_faces.contains(fh))
|
if(processed_faces.count(fh)> 0)
|
||||||
continue;
|
continue;
|
||||||
auto fh_region = region(cdt_2, fh);
|
auto fh_region = region(cdt_2, fh);
|
||||||
processed_faces.insert(fh_region.begin(), fh_region.end());
|
processed_faces.insert(fh_region.begin(), fh_region.end());
|
||||||
|
|
@ -2224,7 +2231,8 @@ public:
|
||||||
CGAL::IO::write_OFF(out, cdt_2, CGAL::parameters::face_color_map(color_pmap));
|
CGAL::IO::write_OFF(out, cdt_2, CGAL::parameters::face_color_map(color_pmap));
|
||||||
}
|
}
|
||||||
|
|
||||||
void write_region(std::ostream& out, const auto& region)
|
template <typename Region>
|
||||||
|
void write_region(std::ostream& out, const Region& region)
|
||||||
{
|
{
|
||||||
for(const auto fh_2d : region) {
|
for(const auto fh_2d : region) {
|
||||||
write_2d_triangle(out, fh_2d);
|
write_2d_triangle(out, fh_2d);
|
||||||
|
|
@ -2324,7 +2332,9 @@ public:
|
||||||
return CGAL::write_facets(out, tr, std::forward<Facets>(facets_range));
|
return CGAL::write_facets(out, tr, std::forward<Facets>(facets_range));
|
||||||
}
|
}
|
||||||
|
|
||||||
void dump_facets_of_cavity(CDT_3_face_index face_index, int region_count, std::string type, const auto& facets_range)
|
template <typename Facets_range>
|
||||||
|
void dump_facets_of_cavity(CDT_3_face_index face_index, int region_count, std::string type,
|
||||||
|
const Facets_range& facets_range)
|
||||||
{
|
{
|
||||||
std::ofstream out(std::string("dump_facets_of_region_") + std::to_string(face_index) + "_" +
|
std::ofstream out(std::string("dump_facets_of_region_") + std::to_string(face_index) + "_" +
|
||||||
std::to_string(region_count) + "_" + type + ".off");
|
std::to_string(region_count) + "_" + type + ".off");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue