From 7e6b5ea0817eb213ca16dc97b0842f4435d15c49 Mon Sep 17 00:00:00 2001 From: Cem Akarsubasi Date: Wed, 26 Nov 2025 18:14:45 +0100 Subject: [PATCH] Fix max collapses in HRSR --- src/GEL/HMesh/HierarchicalReconstruction.cpp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/GEL/HMesh/HierarchicalReconstruction.cpp b/src/GEL/HMesh/HierarchicalReconstruction.cpp index 56b519b1..7e5ba3ac 100644 --- a/src/GEL/HMesh/HierarchicalReconstruction.cpp +++ b/src/GEL/HMesh/HierarchicalReconstruction.cpp @@ -611,30 +611,23 @@ auto collapse_points(const std::vector& vertices, const std::vector std::vector> collapses; size_t total_collapses = 0; for (size_t iter = 0; iter < opts.max_iterations; ++iter) { - // TODO: stricter checking - const size_t max_collapses = - [&]() -> size_t { - return vertices.size() * std::pow(0.5, iter) * opts.reduction_per_iteration; - }(); + const auto this_iter_collapses = + static_cast(static_cast(vertices.size()) * std::pow(0.5, iter) * opts.reduction_per_iteration); std::vector activity; - size_t count = 0; - while (count < max_collapses) { + for (;count < this_iter_collapses; ++count) { total_collapses++; - count++; auto [active, latent, active_point_coords, latent_point_coords, v_bar] = graph.collapse_one(); activity.emplace_back(active_point_coords, latent_point_coords, v_bar); - if (total_collapses == max_collapses) { + if (opts.max_collapses != 0 && total_collapses >= opts.max_collapses) break; - } } collapses.emplace_back(std::move(activity)); - std::cout << "Collapsed " << count << " of " << max_collapses << std::endl; - if (total_collapses == max_collapses) { + std::cout << "Collapsed " << count << " of " << this_iter_collapses << std::endl; + if (opts.max_collapses != 0 && total_collapses >= opts.max_collapses) break; - } } Collapse collapse(std::move(collapses)); return std::make_pair(std::move(collapse), graph.to_point_cloud());