From 3513a4e60cf9249d3572a8292b597932abe8d9d6 Mon Sep 17 00:00:00 2001 From: Lingjie Zhu Date: Sun, 7 Oct 2018 15:39:10 +0800 Subject: [PATCH] fix num_xxxx error --- .../approximate_triangle_mesh.h | 9 +++++--- .../CGAL/Variational_shape_approximation.h | 23 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Surface_mesh_approximation/include/CGAL/Surface_mesh_approximation/approximate_triangle_mesh.h b/Surface_mesh_approximation/include/CGAL/Surface_mesh_approximation/approximate_triangle_mesh.h index 5d30d5d4535..504b19caa25 100644 --- a/Surface_mesh_approximation/include/CGAL/Surface_mesh_approximation/approximate_triangle_mesh.h +++ b/Surface_mesh_approximation/include/CGAL/Surface_mesh_approximation/approximate_triangle_mesh.h @@ -144,10 +144,13 @@ bool approximate_triangle_mesh(const TriangleMesh &tm, const NamedParameters &np const Verbose_level vl = choose_param( get_param(np, internal_np::verbose_level), SILENT); + const std::size_t number_of_faces = std::distance(faces(tm).first, faces(tm).second); + const std::size_t number_of_vertices = std::distance(vertices(tm).first, vertices(tm).second); + if (vl == MAIN_STEPS || vl == VERBOSE) { std::cout << "Variational shape approximation:" - << "\n#f " << num_faces(tm) - << "\n#v " << num_vertices(tm) << std::endl; + << "\n#f " << number_of_faces + << "\n#v " << number_of_vertices << std::endl; } L21_metric metric(tm, point_pmap); @@ -176,7 +179,7 @@ bool approximate_triangle_mesh(const TriangleMesh &tm, const NamedParameters &np std::cout << "Seeding done." << std::endl; // default number of iterations - std::size_t nb_of_iterations_default = max_nb_of_proxies ? num_faces(tm) / *max_nb_of_proxies : 30; + std::size_t nb_of_iterations_default = max_nb_of_proxies ? number_of_faces / *max_nb_of_proxies : 30; nb_of_iterations_default = (std::min)((std::max)( nb_of_iterations_default, static_cast(20)), static_cast(60)); const std::size_t nb_of_iterations = choose_param( diff --git a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h index 56aa4b2e9a9..bcc8c47d513 100644 --- a/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h +++ b/Surface_mesh_approximation/include/CGAL/Variational_shape_approximation.h @@ -232,6 +232,8 @@ private: // member variables // The triangle mesh. const TriangleMesh *m_ptm; + // The exact number of faces + const std::size_t m_nb_of_faces; // The mesh vertex point map. VertexPointMap m_vpoint_map; // The approximation object. @@ -278,6 +280,7 @@ public: const VertexPointMap &vpoint_map, const Error_metric &error_metric) : m_ptm(&tm), + m_nb_of_faces(std::distance(faces(tm).first, faces(tm).second)), m_vpoint_map(vpoint_map), m_metric(&error_metric), m_average_edge_length(0.0), @@ -331,7 +334,7 @@ public: const std::size_t nb_relaxations = choose_param(get_param(np, internal_np::number_of_relaxations), 5); // maximum number of proxies internally, maybe better choice? - const std::size_t nb_px = num_faces(*m_ptm) / 3; + const std::size_t nb_px = m_nb_of_faces / 3; // initialize proxies and the proxy map to prepare for insertion bootstrap_from_connected_components(); @@ -497,7 +500,7 @@ public: std::cerr << "zero error, diffuse w.r.t. number of faces" << std::endl; #endif const double avg_face = - static_cast(num_faces(*m_ptm)) / static_cast(nb_proxies); + static_cast(m_nb_of_faces) / static_cast(nb_proxies); std::vector px_size(m_proxies.size(), 0.0); BOOST_FOREACH(face_descriptor f, faces(*m_ptm)) px_size[get(m_fproxy_map, f)] += 1.0; @@ -1024,7 +1027,7 @@ private: * @brief randomly initializes proxies to target number of proxies. * @note To ensure the randomness, call `std::srand()` beforehand. * @param max_nb_proxies maximum number of proxies, - * should be in range `(nb_connected_components, num_faces(*m_ptm))` + * should be in range `(nb_connected_components, nb_faces)` * @param nb_iterations number of re-fitting iterations * @return number of proxies initialized */ @@ -1044,7 +1047,7 @@ private: /*! * @brief incrementally initializes proxies to target number of proxies. * @param max_nb_proxies maximum number of proxies, - * should be in range `(nb_connected_components, num_faces(*m_ptm))` + * should be in range `(nb_connected_components, nb_faces)` * @param nb_iterations number of re-fitting iterations * before each incremental proxy insertion * @return number of proxies initialized @@ -1060,7 +1063,7 @@ private: /*! * @brief hierarchically initializes proxies to target number of proxies. * @param max_nb_proxies maximum number of proxies, - * should be in range `(nb_connected_components, num_faces(*m_ptm))` + * should be in range `(nb_connected_components, nb_faces)` * @param nb_iterations number of re-fitting iterations * before each hierarchical proxy insertion * @return number of proxies initialized @@ -1087,7 +1090,7 @@ private: * with both maximum number of proxies and minimum error drop stop criteria, * where the first criterion met stops the seeding. * @note To ensure the randomness, call `std::srand()` beforehand. - * @param max_nb_proxies maximum number of proxies, should be in range `(nb_connected_components, num_faces(tm) / 3)` + * @param max_nb_proxies maximum number of proxies, should be in range `(nb_connected_components, nb_faces / 3)` * @param min_error_drop minimum error drop, should be in range `(0.0, 1.0)` * @param nb_iterations number of re-fitting iterations * @return number of proxies initialized @@ -1122,7 +1125,7 @@ private: * @brief incrementally initializes proxies * with both maximum number of proxies and minimum error drop stop criteria, * The first criterion met stops the seeding. - * @param max_nb_proxies maximum number of proxies, should be in range `(nb_connected_components, num_faces(tm) / 3)` + * @param max_nb_proxies maximum number of proxies, should be in range `(nb_connected_components, nb_faces / 3)` * @param min_error_drop minimum error drop, should be in range `(0.0, 1.0)` * @param nb_iterations number of re-fitting iterations * @return number of proxies initialized @@ -1145,7 +1148,7 @@ private: * @brief hierarchically initializes proxies * with both maximum number of proxies and minimum error drop stop criteria, * where the first criterion met stops the seeding. - * @param max_nb_proxies maximum number of proxies, should be in range `(nb_connected_components, num_faces(tm) / 3)` + * @param max_nb_proxies maximum number of proxies, should be in range `(nb_connected_components, nb_faces / 3)` * @param min_error_drop minimum error drop, should be in range `(0.0, 1.0)` * @param nb_iterations number of re-fitting iterations * @return number of proxies initialized @@ -1370,14 +1373,14 @@ private: */ bool random_pick_non_seed_faces(const std::size_t nb_requested, std::vector &picked_faces) { - if (nb_requested + m_proxies.size() >= num_faces(*m_ptm)) + if (nb_requested + m_proxies.size() >= m_nb_of_faces) return false; std::set seed_faces_set; BOOST_FOREACH(const Proxy_wrapper &pxw, m_proxies) seed_faces_set.insert(pxw.seed); - const std::size_t nb_nsf = num_faces(*m_ptm) - m_proxies.size(); + const std::size_t nb_nsf = m_nb_of_faces - m_proxies.size(); std::vector non_seed_faces; non_seed_faces.reserve(nb_nsf); BOOST_FOREACH(face_descriptor f, faces(*m_ptm)) {