From 0197d1bfd5c2f384ce6926d67870cee4a768cc27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Valque?= Date: Wed, 7 May 2025 19:12:07 +0200 Subject: [PATCH] Revert "solved bug when visitor is visited a triangle before its creation" This reverts commit f4f37cc82ba3e0135e5e9289b6890ab7257694d5. --- .../CGAL/Polygon_mesh_processing/autorefinement.h | 8 ++++---- .../internal/triangle_soup_snap_rounding.h | 2 +- .../test_snap_rounding.cpp | 15 +++++---------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h index 63cf789d0cc..c273e36f064 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/autorefinement.h @@ -1576,13 +1576,13 @@ bool autorefine_triangle_soup(PointRange& soup_points, soup_triangles_out.reserve(offset + new_triangles.size()); for (const std::pair, std::size_t>& t_and_id : new_triangles) { - soup_triangles_out.push_back({ get_point_id(t_and_id.first[0]), - get_point_id(t_and_id.first[1]), - get_point_id(t_and_id.first[2]) }); if constexpr(std::is_same_v) visitor.new_subdivision(soup_triangles_out[soup_triangles_out.size()-1], soup_triangles[tri_inter_ids_inverse[t_and_id.second]]); else - visitor.new_subtriangle(soup_triangles_out.size()-1, tri_inter_ids_inverse[t_and_id.second]); + visitor.new_subtriangle(soup_triangles_out.size(), tri_inter_ids_inverse[t_and_id.second]); + soup_triangles_out.push_back({ get_point_id(t_and_id.first[0]), + get_point_id(t_and_id.first[1]), + get_point_id(t_and_id.first[2]) }); } } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/triangle_soup_snap_rounding.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/triangle_soup_snap_rounding.h index 48021113d6b..4a2e8e77e44 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/triangle_soup_snap_rounding.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/triangle_soup_snap_rounding.h @@ -95,7 +95,7 @@ private: // Repair_polygon_soup without remove_pinched_polygons since our polygon are triangles template ::Polygon_3> + typename Polygon = typename ::CGAL::internal::Polygon_types::Polygon_3> struct Triangle_soup_fixer { template diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_snap_rounding.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_snap_rounding.cpp index 1a1f899b959..b8d8689a752 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_snap_rounding.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_snap_rounding.cpp @@ -32,7 +32,7 @@ struct My_visitor : public PMP::Autorefinement::Default_visitor void number_of_output_triangles(std::size_t nbt) { tgt_check.assign(expected_nb_output, 0); - // assert(nbt==expected_nb_output); + assert(nbt==expected_nb_output); } void verbatim_triangle_copy(std::size_t tgt_id, std::size_t src_id) @@ -62,7 +62,7 @@ struct My_visitor : public PMP::Autorefinement::Default_visitor }; template -void test(const std::string fname, std::size_t nb_vertices_after_autorefine, std::size_t expected_nb_output, Tag tag) +void test(const char* fname, std::size_t nb_vertices_after_autorefine, std::size_t expected_nb_output, Tag tag) { std::cout << "Running tests on " << fname; if (std::is_same_v) @@ -80,16 +80,11 @@ void test(const std::string fname, std::size_t nb_vertices_after_autorefine, std // Testing autorefine() My_visitor visitor(triangles.size(), expected_nb_output); - PMP::repair_polygon_soup(points, triangles); - PMP::triangulate_polygons(points, triangles); - PMP::autorefine_triangle_soup(points, triangles, CGAL::parameters::visitor(visitor).concurrency_tag(tag).erase_all_duplicates(false).apply_iterative_snap_rounding(true)); - // PMP::autorefine_triangle_soup(points, triangles, CGAL::parameters::concurrency_tag(tag).erase_all_duplicates(false).apply_iterative_snap_rounding(true).snap_grid_size(23).number_of_iterations(15)); - CGAL::IO::write_polygon_soup("/tmp/debug.off", points, triangles); + PMP::autorefine_triangle_soup(points, triangles, CGAL::parameters::visitor(visitor).concurrency_tag(tag).apply_iterative_snap_rounding(true)); assert( nb_vertices_after_autorefine==points.size()); assert( expected_nb_output==triangles.size()); assert( !PMP::does_triangle_soup_self_intersect(points, triangles) ); - CGAL::IO::write_polygon_soup("/tmp/debug.off", points, triangles); - +// CGAL::IO::write_polygon_soup("/tmp/debug.off", points, triangles); } int main(int argc, const char** argv) @@ -97,7 +92,7 @@ int main(int argc, const char** argv) // file expected_nb_of_vertices expected_nb_of_faces (after repair) for (int i=0;i<(argc-1)/3; ++i) { - test(std::string("/home/lvalque/CGAL/git/PMP_triangle_soup_rounding-GF/Polygon_mesh_processing/test/Polygon_mesh_processing/")+argv[1+3*i], atoi(argv[1+3*i+1]), atoi(argv[1+3*i+2]), CGAL::Sequential_tag()); + test(argv[1+3*i], atoi(argv[1+3*i+1]), atoi(argv[1+3*i+2]), CGAL::Sequential_tag()); #ifdef CGAL_LINKED_WITH_TBB test(argv[1+3*i], atoi(argv[1+3*i+1]), atoi(argv[1+3*i+2]), CGAL::Parallel_tag()); #endif