Revert "solved bug when visitor is visited a triangle before its creation"

This reverts commit f4f37cc82ba3e0135e5e9289b6890ab7257694d5.
This commit is contained in:
Léo Valque 2025-05-07 19:12:07 +02:00
parent 8edbef468b
commit 0197d1bfd5
3 changed files with 10 additions and 15 deletions

View File

@ -1576,13 +1576,13 @@ bool autorefine_triangle_soup(PointRange& soup_points,
soup_triangles_out.reserve(offset + new_triangles.size()); soup_triangles_out.reserve(offset + new_triangles.size());
for (const std::pair<std::array<EK::Point_3,3>, std::size_t>& t_and_id : new_triangles) for (const std::pair<std::array<EK::Point_3,3>, 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, Wrap_snap_visitor>) if constexpr(std::is_same_v<Visitor, Wrap_snap_visitor>)
visitor.new_subdivision(soup_triangles_out[soup_triangles_out.size()-1], soup_triangles[tri_inter_ids_inverse[t_and_id.second]]); visitor.new_subdivision(soup_triangles_out[soup_triangles_out.size()-1], soup_triangles[tri_inter_ids_inverse[t_and_id.second]]);
else 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]) });
} }
} }

View File

@ -95,7 +95,7 @@ private:
// Repair_polygon_soup without remove_pinched_polygons since our polygon are triangles // Repair_polygon_soup without remove_pinched_polygons since our polygon are triangles
template <typename PointRange, typename PolygonRange, template <typename PointRange, typename PolygonRange,
typename Polygon = typename ::CGAL::Polygon_mesh_processing::internal::Polygon_types<PointRange, PolygonRange>::Polygon_3> typename Polygon = typename ::CGAL::internal::Polygon_types<PointRange, PolygonRange>::Polygon_3>
struct Triangle_soup_fixer struct Triangle_soup_fixer
{ {
template <typename NamedParameters> template <typename NamedParameters>

View File

@ -32,7 +32,7 @@ struct My_visitor : public PMP::Autorefinement::Default_visitor
void number_of_output_triangles(std::size_t nbt) void number_of_output_triangles(std::size_t nbt)
{ {
tgt_check.assign(expected_nb_output, 0); 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) 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 <class Tag> template <class Tag>
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; std::cout << "Running tests on " << fname;
if (std::is_same_v<Tag, CGAL::Sequential_tag>) if (std::is_same_v<Tag, CGAL::Sequential_tag>)
@ -80,16 +80,11 @@ void test(const std::string fname, std::size_t nb_vertices_after_autorefine, std
// Testing autorefine() // Testing autorefine()
My_visitor visitor(triangles.size(), expected_nb_output); My_visitor visitor(triangles.size(), expected_nb_output);
PMP::repair_polygon_soup(points, triangles); PMP::autorefine_triangle_soup(points, triangles, CGAL::parameters::visitor(visitor).concurrency_tag(tag).apply_iterative_snap_rounding(true));
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);
assert( nb_vertices_after_autorefine==points.size()); assert( nb_vertices_after_autorefine==points.size());
assert( expected_nb_output==triangles.size()); assert( expected_nb_output==triangles.size());
assert( !PMP::does_triangle_soup_self_intersect(points, triangles) ); 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) 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) // file expected_nb_of_vertices expected_nb_of_faces (after repair)
for (int i=0;i<(argc-1)/3; ++i) 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 #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()); test(argv[1+3*i], atoi(argv[1+3*i+1]), atoi(argv[1+3*i+2]), CGAL::Parallel_tag());
#endif #endif