From 111d33bfd2c3422e75ae30d446587ebbd64e1597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Sat, 4 Jun 2022 13:52:13 +0200 Subject: [PATCH] alternative version to use the boost parameter API --- BGL/include/CGAL/boost/parameter.h | 9 --- Mesh_2/include/CGAL/lloyd_optimize_mesh_2.h | 80 +++++++------------ .../include/CGAL/Named_function_parameters.h | 49 ++++++++++++ .../internal/parameters_interface.h | 4 +- 4 files changed, 83 insertions(+), 59 deletions(-) diff --git a/BGL/include/CGAL/boost/parameter.h b/BGL/include/CGAL/boost/parameter.h index 14ab09b0474..afec98cacb8 100644 --- a/BGL/include/CGAL/boost/parameter.h +++ b/BGL/include/CGAL/boost/parameter.h @@ -78,15 +78,6 @@ BOOST_PARAMETER_NAME( domain ) BOOST_PARAMETER_NAME( criteria ) BOOST_PARAMETER_NAME( cdt ) -BOOST_PARAMETER_NAME( (seeds_begin, tag) seeds_begin_) -BOOST_PARAMETER_NAME( (seeds_end, tag) seeds_end_) -BOOST_PARAMETER_NAME( (mark, tag) mark_) - -BOOST_PARAMETER_NAME( (time_limit, tag) time_limit_ ) -BOOST_PARAMETER_NAME( (convergence, tag) convergence_) -BOOST_PARAMETER_NAME( (max_iteration_number, tag) max_iteration_number_ ) -BOOST_PARAMETER_NAME( (freeze_bound, tag) freeze_bound_) - BOOST_PARAMETER_NAME( (sliver_bound, tag) sliver_bound_) BOOST_PARAMETER_NAME( (sliver_criterion, tag) sliver_criterion_) BOOST_PARAMETER_NAME( (perturbation_vector, tag) perturbation_vector_) diff --git a/Mesh_2/include/CGAL/lloyd_optimize_mesh_2.h b/Mesh_2/include/CGAL/lloyd_optimize_mesh_2.h index e8b939d634e..973b7fc8dc7 100644 --- a/Mesh_2/include/CGAL/lloyd_optimize_mesh_2.h +++ b/Mesh_2/include/CGAL/lloyd_optimize_mesh_2.h @@ -22,20 +22,11 @@ #include #include #include -#include -#include #include #include -#ifndef DOXYGEN_RUNNING -// see -CGAL_PRAGMA_DIAG_PUSH -// see -CGAL_IGNORE_BOOST_PARAMETER_NAME_WARNINGS -#endif - namespace CGAL { @@ -98,7 +89,7 @@ namespace CGAL * \cgalParamDefault{0} * \cgalParamNEnd * - * \cgalParamNBegin{freeze_bound} + * \cgalParamNBegin{vertex_freeze_bound} * \cgalParamDescription{designed to reduce running time of each optimization iteration. * Any vertex that has a displacement less than a given fraction of the length * of its shortest incident edge, is frozen (i.e.\ is not relocated). @@ -132,6 +123,7 @@ lloyd_optimize_mesh_2(CDT& cdt, const CGAL_NP_CLASS& np = parameters::default_va using parameters::choose_parameter; using parameters::get_parameter; using parameters::get_parameter_reference; + using parameters::is_default_parameter; int max_iterations = choose_parameter(get_parameter(np, internal_np::number_of_iterations), 0); const double convergence_ratio = choose_parameter(get_parameter(np, internal_np::convergence_ratio), 0.001); @@ -148,47 +140,40 @@ lloyd_optimize_mesh_2(CDT& cdt, const CGAL_NP_CLASS& np = parameters::default_va // } const bool mark = choose_parameter(get_parameter(np, internal_np::seeds_are_in_domain), false); - return lloyd_optimize_mesh_2_impl(cdt, - max_iterations, - convergence_ratio, - freeze_bound, - time_limit, - seeds.begin(), - seeds.end(), - mark); + if (is_default_parameter::value || + is_default_parameter::value) + { + return lloyd_optimize_mesh_2_impl(cdt, + max_iterations, + convergence_ratio, + freeze_bound, + time_limit, + seeds.begin(), + seeds.end(), + mark); + } + else + { + return lloyd_optimize_mesh_2_impl(cdt, + max_iterations, + convergence_ratio, + freeze_bound, + time_limit, + choose_parameter(get_parameter(np, internal_np::i_seed_begin_iterator), CGAL::Emptyset_iterator()), + choose_parameter(get_parameter(np, internal_np::i_seed_end_iterator), CGAL::Emptyset_iterator()), + mark); + } } #ifndef DOXYGEN_RUNNING #ifndef CGAL_NO_DEPRECATED_CODE -#if defined(BOOST_MSVC) -# pragma warning(push) -# pragma warning(disable:4003) // not enough actual parameters for macro -#endif - // TODO: check how to use CGAL_DEPRECATED here - BOOST_PARAMETER_FUNCTION( - (Mesh_optimization_return_code), - lloyd_optimize_mesh_2, - parameters::tag, - (required (in_out(cdt),*)) - (optional - (max_iteration_number_, *, 0 ) - (convergence_, *, 0.001 ) - (time_limit_, *, 0. ) - (freeze_bound_, *, 0.001 ) - (seeds_begin_, *, CGAL::Emptyset_iterator())//see comments below - (seeds_end_, *, CGAL::Emptyset_iterator())//see comments below - (mark_, *, false) //if "false", seeds indicate "outside" regions - ) - ) + + template + CGAL_DEPRECATED + Mesh_optimization_return_code + lloyd_optimize_mesh_2(CDT& cdt, const NP_PACK& ... nps) { - return lloyd_optimize_mesh_2_impl(cdt, - max_iteration_number_, - convergence_, - freeze_bound_, - time_limit_, - seeds_begin_, - seeds_end_, - mark_); + return lloyd_optimize_mesh_2(cdt, internal_np::combine_named_parameters(nps ...)); } #if defined(BOOST_MSVC) @@ -266,9 +251,6 @@ lloyd_optimize_mesh_2(CDT& cdt, const CGAL_NP_CLASS& np = parameters::default_va return rc; } -CGAL_PRAGMA_DIAG_POP - -#include #else namespace CGAL { diff --git a/STL_Extension/include/CGAL/Named_function_parameters.h b/STL_Extension/include/CGAL/Named_function_parameters.h index a5313c72826..165f46b5a68 100644 --- a/STL_Extension/include/CGAL/Named_function_parameters.h +++ b/STL_Extension/include/CGAL/Named_function_parameters.h @@ -258,6 +258,20 @@ struct Named_function_parameters } #include #undef CGAL_add_named_parameter + + template + Named_function_parameters + combine(const Named_function_parameters& np) const + { + return Named_function_parameters(np.v,*this); + } + + template + auto + combine(const Named_function_parameters& np, const NPS& ... nps) const + { + return Named_function_parameters(np.v,*this).combine(nps...); + } }; namespace parameters { @@ -295,9 +309,33 @@ inline no_parameters(Named_function_parameters) typedef Named_function_parameters Params;\ return Params(p); \ } + #include #undef CGAL_add_named_parameter +#ifndef CGAL_NO_DEPRECATED_CODE +template +struct Boost_parameter_compatibility_wrapper +{ + template + Named_function_parameters + operator=(const K& p) const + { + typedef Named_function_parameters Params; + return Params(p); + } +}; + +// TODO: need to make sure this works when using several compilation units +const Boost_parameter_compatibility_wrapper max_iteration_number; +const Boost_parameter_compatibility_wrapper convergence; +const Boost_parameter_compatibility_wrapper freeze_bound; +const Boost_parameter_compatibility_wrapper time_limit; +const Boost_parameter_compatibility_wrapper seeds_begin; +const Boost_parameter_compatibility_wrapper seeds_end; +const Boost_parameter_compatibility_wrapper mark_; +#endif + // function to extract a parameter template typename internal_np::Get_param, Query_tag>::type @@ -373,6 +411,17 @@ struct is_default_parameter } // end of parameters namespace +namespace internal_np { + +template +auto +combine_named_parameters(const Named_function_parameters& np, const NPS& ... nps) +{ + return np.combine(nps ...); +} + +} // end of internal_np namespace + #ifndef CGAL_NO_DEPRECATED_CODE namespace Polygon_mesh_processing { diff --git a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h index 5532ee01100..99a802a9b02 100644 --- a/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h +++ b/STL_Extension/include/CGAL/STL_Extension/internal/parameters_interface.h @@ -245,4 +245,6 @@ CGAL_add_named_parameter(domain_is_initialized_t, domain_is_initialized, domain_ CGAL_add_named_parameter(seeds_are_in_domain_t, seeds_are_in_domain, seeds_are_in_domain) CGAL_add_named_parameter(criteria_t, criteria, criteria) CGAL_add_named_parameter(convergence_ratio_t, convergence_ratio, convergence_ratio) -// CGAL_add_named_parameter(freeze_bound_t, freeze_bound, freeze_bound) +CGAL_add_named_parameter(vertex_freeze_bound_t, vertex_freeze_bound, vertex_freeze_bound) +CGAL_add_named_parameter(i_seed_begin_iterator_t, i_seed_begin_iterator, i_seed_begin_iterator) +CGAL_add_named_parameter(i_seed_end_iterator_t, i_seed_end_iterator, i_seed_end_iterator)