From bbf0a0e7ace7e32cf2bae58305638b7530e53307 Mon Sep 17 00:00:00 2001 From: Sven Oesau Date: Thu, 3 Jul 2025 12:33:47 +0200 Subject: [PATCH 01/11] use simple deleted flag instead of tracking inactive indices removing Property_container::reserve as it basically adds inactive indices and thus means linear insertion time --- .../include/CGAL/Property_container.h | 45 +++++++++++++------ .../Property_map/test_Property_container.cpp | 9 +--- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/Property_map/include/CGAL/Property_container.h b/Property_map/include/CGAL/Property_container.h index 4aa3fe15577..8b517a7694a 100644 --- a/Property_map/include/CGAL/Property_container.h +++ b/Property_map/include/CGAL/Property_container.h @@ -248,6 +248,7 @@ class Property_container { std::multimap>> m_properties; std::vector m_active_indices{}; + bool m_has_deleted_elements = false; public: @@ -258,6 +259,7 @@ public: Property_container(const Property_container& other) { m_active_indices = other.m_active_indices; + m_has_deleted_elements = other.m_has_deleted_elements; for (auto [name, array] : other.m_properties) { // todo: this could probably be made faster using emplace_hint @@ -273,6 +275,7 @@ public: // This is not exactly an assignment as existing unique properties are kept. Property_container& operator=(const Property_container& other) { m_active_indices = other.m_active_indices; + m_has_deleted_elements = other.m_has_deleted_elements; for (auto [name, array] : other.m_properties) { // search if property already exists @@ -295,6 +298,7 @@ public: // This is not exactly an assignment as existing unique properties are kept. Property_container& operator=(Property_container&& other) { m_active_indices = std::move(other.m_active_indices); + m_has_deleted_elements = other.m_has_deleted_elements; for (auto [name, array] : other.m_properties) { // search if property already exists @@ -312,7 +316,7 @@ public: } // The moved-from property map should retain all of its properties, but contain 0 elements - other.reserve(0); + other.resize(0); return *this; } @@ -441,16 +445,15 @@ public: }*/ public: - - void reserve(std::size_t n) { - m_active_indices.resize(n); - for (auto [name, array]: m_properties) - array->reserve(n); - } - void resize(std::size_t n) { - reserve(n); + + m_active_indices.resize(n); + for (auto [name, array] : m_properties) + array->reserve(n); + std::fill(m_active_indices.begin(), m_active_indices.end(), true); + + m_has_deleted_elements = false; } [[nodiscard]] std::size_t size() const { return std::count(m_active_indices.begin(), m_active_indices.end(), true); } @@ -460,8 +463,11 @@ public: Index emplace_back() { // Expand the storage and return the last element - reserve(capacity() + 1); - m_active_indices.back() = true; + m_active_indices.push_back(true); + + for (auto [name, array] : m_properties) + array->reserve(capacity()); + auto first_new_index = Index(capacity() - 1); reset(first_new_index); return first_new_index; @@ -469,6 +475,9 @@ public: Index emplace() { + if (!m_has_deleted_elements) + return emplace_back(); + // If there are empty slots, return the index of one of them and mark it as full auto first_unused = std::find_if(m_active_indices.begin(), m_active_indices.end(), [](bool used) { return !used; }); if (first_unused != m_active_indices.end()) { @@ -478,20 +487,27 @@ public: return index; } + m_has_deleted_elements = false; + return emplace_back(); } Index emplace_group_back(std::size_t n) { // Expand the storage and return the start of the new region - reserve(capacity() + n); - for (auto it = m_active_indices.end() - n; it < m_active_indices.end(); ++it) - *it = true; + m_active_indices.resize(capacity() + n, true); + + for (auto [name, array] : m_properties) + array->reserve(capacity()); + return Index(capacity() - n); } Index emplace_group(std::size_t n) { + if (!m_has_deleted_elements) + return emplace_group_back(n); + auto search_start = m_active_indices.begin(); while (search_start != m_active_indices.end()) { @@ -544,6 +560,7 @@ public: void erase(Index i) { m_active_indices[i] = false; + m_has_deleted_elements = true; for (auto [name, array]: m_properties) array->reset(i); } diff --git a/Property_map/test/Property_map/test_Property_container.cpp b/Property_map/test/Property_map/test_Property_container.cpp index eb0099ed8c1..364ae65fdd6 100644 --- a/Property_map/test/Property_map/test_Property_container.cpp +++ b/Property_map/test/Property_map/test_Property_container.cpp @@ -41,11 +41,6 @@ void test_element_access() { auto& integers = properties.add_property("integers", 5); - // Reserve space for 100 elements - properties.reserve(100); - assert(properties.capacity() == 100); - assert(properties.size() == 0); - // Newly emplaced elements should go at the front assert(properties.emplace() == 0); assert(properties.emplace() == 1); @@ -61,7 +56,6 @@ void test_element_access() { auto& floats = properties.add_property("floats", 6.0f); // The new property array should already be of the right size - assert(floats.capacity() == 100); assert(properties.size() == 3); // Pre-existing elements should contain the default value @@ -87,9 +81,8 @@ void test_element_access() { // Erase an element, and the size should be reduced properties.erase(1); assert(properties.size() == 2); - assert(properties.capacity() == 100); assert(properties.active_list().size() == 2); - assert(properties.inactive_list().size() == 98); + assert(properties.inactive_list().size() == 1); // A newly emplaced element should take the empty slot assert(properties.emplace() == 1); From f40a223d2a6755801c2ef77e8039140e8a84423c Mon Sep 17 00:00:00 2001 From: Sven Oesau Date: Fri, 11 Jul 2025 16:41:40 +0200 Subject: [PATCH 02/11] behavior of QOpenGL.h changed, with 6.9.1 it does not provide APIENTRY from windows.h anymore, but QT_APIENTRY instead --- GraphicsView/include/CGAL/Qt/qglviewer.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/GraphicsView/include/CGAL/Qt/qglviewer.h b/GraphicsView/include/CGAL/Qt/qglviewer.h index e24a5fcd6d7..673e9450980 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer.h @@ -34,6 +34,13 @@ #include #include +#ifndef APIENTRY +#define APIENTRY QT_APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + class QTabWidget; class QImage; class QOpenGLFramebufferObject; From 1fab8f77b57598408876998d0d549832add4f40d Mon Sep 17 00:00:00 2001 From: Sven Oesau Date: Thu, 17 Jul 2025 15:32:23 +0200 Subject: [PATCH 03/11] bugfix CMakeLists.txt adding log to example/test to indicate whether Eigen3 or SuiteSparse is used --- .../ARAP_parameterization.cpp | 5 +++++ .../Surface_mesh_parameterization/CMakeLists.txt | 8 +++++--- .../Surface_mesh_parameterization/CMakeLists.txt | 13 +++++++++++++ .../extensive_parameterization_test.cpp | 5 +++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/ARAP_parameterization.cpp b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/ARAP_parameterization.cpp index 6919bd32dc8..192502af616 100644 --- a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/ARAP_parameterization.cpp +++ b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/ARAP_parameterization.cpp @@ -26,6 +26,11 @@ namespace SMP = CGAL::Surface_mesh_parameterization; int main(int argc, char** argv) { +#ifdef CGAL_SMP_USE_SUITESPARSE_SOLVERS + std::cout << "Using SuiteSparse" << std::endl; +#else + std::cout << "Using Eigen3" << std::endl; +#endif const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("meshes/head.off"); SurfaceMesh sm; diff --git a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/CMakeLists.txt b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/CMakeLists.txt index 59f4bcaec27..d7ad05d47b0 100644 --- a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/CMakeLists.txt +++ b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/CMakeLists.txt @@ -34,9 +34,11 @@ if(TARGET CGAL::Eigen3_support) target_link_libraries(square_border_parameterizer PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program( "iterative_authalic_parameterizer.cpp" ) target_link_libraries(iterative_authalic_parameterizer PUBLIC CGAL::Eigen3_support) - if(SuiteSparse_FOUND) - target_link_libraries(ARAP_parameterization PRIVATE ${SuiteSparse_LIBRARIES}) - target_link_libraries(orbifold PRIVATE ${SuiteSparse_LIBRARIES}) + if(TARGET SuiteSparse::UMFPACK) + target_link_libraries(ARAP_parameterization PRIVATE SuiteSparse::UMFPACK) + target_link_libraries(orbifold PRIVATE PRIVATE SuiteSparse::UMFPACK) + target_compile_definitions(ARAP_parameterization PRIVATE EIGEN_DONT_ALIGN_STATICALLY CGAL_SMP_USE_SUITESPARSE_SOLVERS) + target_compile_definitions(orbifold PRIVATE EIGEN_DONT_ALIGN_STATICALLY CGAL_SMP_USE_SUITESPARSE_SOLVERS) endif() else() diff --git a/Surface_mesh_parameterization/test/Surface_mesh_parameterization/CMakeLists.txt b/Surface_mesh_parameterization/test/Surface_mesh_parameterization/CMakeLists.txt index 00278df2f7a..885af839aeb 100644 --- a/Surface_mesh_parameterization/test/Surface_mesh_parameterization/CMakeLists.txt +++ b/Surface_mesh_parameterization/test/Surface_mesh_parameterization/CMakeLists.txt @@ -6,11 +6,24 @@ project(Surface_mesh_parameterization_Tests) # Find CGAL find_package(CGAL REQUIRED) +find_package(UMFPACK QUIET NO_MODULE) + +if(TARGET SuiteSparse::UMFPACK) + message(STATUS "Orbifold Tutte Embeddings will use UmfPackLU") +else() + message(STATUS "NOTICE: Examples will be compiled without the SuiteSparse library and UmfPack. Try setting CMAKE_PREFIX_PATH to your SuiteSparse installation.") +endif() + find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) include(CGAL_Eigen3_support) if(TARGET CGAL::Eigen3_support) create_single_source_cgal_program("extensive_parameterization_test.cpp") target_link_libraries(extensive_parameterization_test PUBLIC CGAL::Eigen3_support) + + if(TARGET SuiteSparse::UMFPACK) + target_link_libraries(extensive_parameterization_test PRIVATE SuiteSparse::UMFPACK) + target_compile_definitions(extensive_parameterization_test PRIVATE EIGEN_DONT_ALIGN_STATICALLY CGAL_SMP_USE_SUITESPARSE_SOLVERS) + endif() else() message("NOTICE: The tests require Eigen 3.1 (or greater), and will not be compiled.") endif() diff --git a/Surface_mesh_parameterization/test/Surface_mesh_parameterization/extensive_parameterization_test.cpp b/Surface_mesh_parameterization/test/Surface_mesh_parameterization/extensive_parameterization_test.cpp index ff97d007295..dbfc458d93d 100644 --- a/Surface_mesh_parameterization/test/Surface_mesh_parameterization/extensive_parameterization_test.cpp +++ b/Surface_mesh_parameterization/test/Surface_mesh_parameterization/extensive_parameterization_test.cpp @@ -78,6 +78,11 @@ typedef boost::graph_traits::halfedge_descriptor SM_SE_halfedge int main(int, char**) { +#ifdef CGAL_SMP_USE_SUITESPARSE_SOLVERS + std::cout << "Using SuiteSparse" << std::endl; +#else + std::cout << "Using Eigen3" << std::endl; +#endif std::cout.precision(17); CGAL::IO::set_pretty_mode(std::cout); From 3e5c2245448a7819fb7079800be2fe4d95b69610 Mon Sep 17 00:00:00 2001 From: Sven Oesau Date: Mon, 21 Jul 2025 13:21:46 +0200 Subject: [PATCH 04/11] renaming reserve to resize --- Property_map/include/CGAL/Property_container.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Property_map/include/CGAL/Property_container.h b/Property_map/include/CGAL/Property_container.h index 8b517a7694a..0f9c35ed8b8 100644 --- a/Property_map/include/CGAL/Property_container.h +++ b/Property_map/include/CGAL/Property_container.h @@ -50,7 +50,7 @@ public: virtual void append(const Property_array_base& other) = 0; - virtual void reserve(std::size_t n) = 0; + virtual void resize(std::size_t n) = 0; virtual void shrink_to_fit() = 0; @@ -89,7 +89,6 @@ public: Property_array(const std::vector& active_indices, const T& default_value) : m_data(), m_active_indices(active_indices), m_default_value(default_value) { - m_data.reserve(active_indices.capacity()); m_data.resize(active_indices.size(), m_default_value); } @@ -124,7 +123,7 @@ public: m_data.insert(m_data.end(), other.m_data.begin(), other.m_data.end()); } - virtual void reserve(std::size_t n) override { + virtual void resize(std::size_t n) override { CGAL_precondition(m_active_indices.size() == n); m_data.resize(n, m_default_value); }; @@ -449,7 +448,7 @@ public: m_active_indices.resize(n); for (auto [name, array] : m_properties) - array->reserve(n); + array->resize(n); std::fill(m_active_indices.begin(), m_active_indices.end(), true); @@ -466,7 +465,7 @@ public: m_active_indices.push_back(true); for (auto [name, array] : m_properties) - array->reserve(capacity()); + array->resize(capacity()); auto first_new_index = Index(capacity() - 1); reset(first_new_index); @@ -498,7 +497,7 @@ public: m_active_indices.resize(capacity() + n, true); for (auto [name, array] : m_properties) - array->reserve(capacity()); + array->resize(capacity()); return Index(capacity() - n); } @@ -623,7 +622,7 @@ public: if (it != range.second) array->append(*it->second.get()); else - array->reserve(m_active_indices.size()); + array->resize(m_active_indices.size()); } } From df0e12254c6b557bc347be32f3929550cc3ac9b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 25 Jul 2025 14:45:43 +0200 Subject: [PATCH 05/11] Drop bad const& in documentation There is no const & in the actual code --- .../Triangulation_3/CGAL/Regular_triangulation_cell_base_3.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Triangulation_3/doc/Triangulation_3/CGAL/Regular_triangulation_cell_base_3.h b/Triangulation_3/doc/Triangulation_3/CGAL/Regular_triangulation_cell_base_3.h index 3d110a67cb2..d106482eb54 100644 --- a/Triangulation_3/doc/Triangulation_3/CGAL/Regular_triangulation_cell_base_3.h +++ b/Triangulation_3/doc/Triangulation_3/CGAL/Regular_triangulation_cell_base_3.h @@ -75,7 +75,7 @@ circumcenter is not supposed to be computed by the constructor `Construct_weighted_circumcenter_3` of the traits class, hence the returned point has no weight. */ -const Point_3& weighted_circumcenter(const Traits& gt = Traits()) const; +Point_3 weighted_circumcenter(const Traits& gt = Traits()) const; /// @} From 8cf322f104fa7b1970d3e3105a53e585d82741c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 28 Jul 2025 09:23:23 +0200 Subject: [PATCH 06/11] make sure boost system is found --- Lab/demo/Lab/Plugins/Mesh_3/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lab/demo/Lab/Plugins/Mesh_3/CMakeLists.txt b/Lab/demo/Lab/Plugins/Mesh_3/CMakeLists.txt index 2234d34db36..84c980aaf43 100644 --- a/Lab/demo/Lab/Plugins/Mesh_3/CMakeLists.txt +++ b/Lab/demo/Lab/Plugins/Mesh_3/CMakeLists.txt @@ -45,7 +45,7 @@ else() endif() find_package(Boost QUIET OPTIONAL_COMPONENTS filesystem system) -if(Boost_FILESYSTEM_FOUND) +if(Boost_FILESYSTEM_FOUND AND Boost_SYSTEM_FOUND) qt6_wrap_ui( imgUI_FILES Image_res_dialog.ui raw_image.ui) cgal_lab_plugin(io_image_plugin Io_image_plugin Volume_plane_intersection.cpp @@ -57,7 +57,7 @@ if(Boost_FILESYSTEM_FOUND) if(VTK_LIBRARIES) target_compile_definitions(io_image_plugin PRIVATE -DCGAL_USE_VTK -DNOMINMAX) endif() - if(TARGET Boost::filesystem) + if(TARGET Boost::filesystem AND TARGET Boost::system) target_link_libraries(io_image_plugin PUBLIC Boost::filesystem Boost::system) else() From b7f70c6972e48754d834499d9adb0aefd0f200ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 28 Jul 2025 14:30:41 +0200 Subject: [PATCH 07/11] filesystem is now header only and lib was empty for some releases anyway --- Lab/demo/Lab/Plugins/Mesh_3/CMakeLists.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Lab/demo/Lab/Plugins/Mesh_3/CMakeLists.txt b/Lab/demo/Lab/Plugins/Mesh_3/CMakeLists.txt index 84c980aaf43..e8d95f4830d 100644 --- a/Lab/demo/Lab/Plugins/Mesh_3/CMakeLists.txt +++ b/Lab/demo/Lab/Plugins/Mesh_3/CMakeLists.txt @@ -57,9 +57,8 @@ if(Boost_FILESYSTEM_FOUND AND Boost_SYSTEM_FOUND) if(VTK_LIBRARIES) target_compile_definitions(io_image_plugin PRIVATE -DCGAL_USE_VTK -DNOMINMAX) endif() - if(TARGET Boost::filesystem AND TARGET Boost::system) - target_link_libraries(io_image_plugin PUBLIC Boost::filesystem - Boost::system) + if(TARGET Boost::filesystem) + target_link_libraries(io_image_plugin PUBLIC Boost::filesystem) else() target_link_libraries(io_image_plugin PUBLIC ${Boost_LIBRARIES}) endif() From d182dabf9446f5e7b5742ffd4af414c4eb419f11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 28 Jul 2025 15:41:20 +0200 Subject: [PATCH 08/11] cannot collapse only if one of the two vertex is not constrained + fill maps only if required --- .../repair_degeneracies.h | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h index d6ac3595d80..ccbcc17f10b 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h @@ -646,6 +646,7 @@ bool remove_almost_degenerate_faces(const FaceRange& face_range, { using CGAL::parameters::choose_parameter; using CGAL::parameters::get_parameter; + using parameters::is_default_parameter; typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; @@ -702,21 +703,25 @@ bool remove_almost_degenerate_faces(const FaceRange& face_range, CGAL_precondition(is_triangle_mesh(tmesh)); // constrain extremities of constrained edges - for(face_descriptor f : face_range) + if constexpr (!is_default_parameter::value || + !is_default_parameter::value) { - if(f == boost::graph_traits::null_face()) - continue; - - for(halfedge_descriptor h : CGAL::halfedges_around_face(halfedge(f, tmesh), tmesh)) + for(face_descriptor f : face_range) { - if(get(ecm, edge(h, tmesh))) + if(f == boost::graph_traits::null_face()) + continue; + + for(halfedge_descriptor h : CGAL::halfedges_around_face(halfedge(f, tmesh), tmesh)) { - put(vcm, source(h, tmesh), true); - put(vcm, target(h, tmesh), true); - } - else if(get(vcm_np, target(h, tmesh))) - { - put(vcm, target(h, tmesh), true); + if(get(ecm, edge(h, tmesh))) + { + put(vcm, source(h, tmesh), true); + put(vcm, target(h, tmesh), true); + } + else if(get(vcm_np, target(h, tmesh))) + { + put(vcm, target(h, tmesh), true); + } } } } @@ -813,7 +818,7 @@ bool remove_almost_degenerate_faces(const FaceRange& face_range, const edge_descriptor e = edge(h, tmesh); CGAL_assertion(!get(ecm, edge(h, tmesh))); - CGAL_assertion(!get(vcm, source(h, tmesh)) && !get(vcm, target(h, tmesh))); + CGAL_assertion(!get(vcm, source(h, tmesh)) || !get(vcm, target(h, tmesh))); #ifdef CGAL_PMP_DEBUG_REMOVE_DEGENERACIES_EXTRA std::cout << " treat needle: " << e From de6cbbce0c650744a5bb1f42c2b132e7ec4e4773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 29 Jul 2025 09:58:22 +0200 Subject: [PATCH 09/11] fix unused var warning --- .../CGAL/Boolean_set_operations_2/Gps_polygon_validation.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Gps_polygon_validation.h b/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Gps_polygon_validation.h index 8f50cc8960c..4910352c191 100644 --- a/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Gps_polygon_validation.h +++ b/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Gps_polygon_validation.h @@ -677,7 +677,7 @@ bool are_holes_and_boundary_pairwise_disjoint Polygon_set_2 gps(traits); // check for 2D intersections of holes (holes must be disjoint except for // vertices) - Size num_of_holes = 0; + // Size num_of_holes = 0; // functors for creating a pwh needed for inserting pgns into the arrangement // quickly Construct_polygon_with_holes_2 construct_pwh_functor = @@ -701,7 +701,7 @@ bool are_holes_and_boundary_pairwise_disjoint // traits.Construct_polygon_with_holes_2 (hole); // Polygon_with_holes_2 empty_pwh(hole); gps.insert(empty_pwh); - num_of_holes++; + // num_of_holes++; } } /* not good - doesn't work if intersection at vertices is legal. From 59bf188ea20320a51a41f853fe39dc96e6244f1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 30 Jul 2025 09:37:34 +0200 Subject: [PATCH 10/11] fix one more warning --- .../CGAL/Boolean_set_operations_2/Gps_polygon_validation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Gps_polygon_validation.h b/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Gps_polygon_validation.h index 4910352c191..f7d2de6fe7d 100644 --- a/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Gps_polygon_validation.h +++ b/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Gps_polygon_validation.h @@ -622,7 +622,7 @@ bool are_holes_and_boundary_pairwise_disjoint Topology_traits; typedef CGAL::Gps_on_surface_base_2 Polygon_set_2; - typedef typename Polygon_set_2::Size Size; + // typedef typename Polygon_set_2::Size Size; typedef typename Traits_2::Polygon_2 Polygon_2; typedef typename Traits_2::Polygon_with_holes_2 Polygon_with_holes_2; typedef typename Polygon_with_holes_2::Hole_const_iterator From deb2229f8b98ac84f6d29e7302d453df3dddd3b9 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Wed, 30 Jul 2025 11:33:16 +0200 Subject: [PATCH 11/11] fix the case where `p` is hidden in the RT3 if `p` would be hidden, its conflict zone is empty --- Triangulation_3/include/CGAL/Regular_triangulation_3.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Triangulation_3/include/CGAL/Regular_triangulation_3.h b/Triangulation_3/include/CGAL/Regular_triangulation_3.h index 4eb35b352bd..752e4333979 100644 --- a/Triangulation_3/include/CGAL/Regular_triangulation_3.h +++ b/Triangulation_3/include/CGAL/Regular_triangulation_3.h @@ -667,6 +667,9 @@ public: { CGAL_precondition(dimension() >= 2); + if(the_facet_is_in_its_cz) + *the_facet_is_in_its_cz = false; + std::vector cells; cells.reserve(32); std::vector facets;