mirror of https://github.com/CGAL/cgal
alternative version to use the boost parameter API
This commit is contained in:
parent
18039c7a71
commit
111d33bfd2
|
|
@ -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_)
|
||||
|
|
|
|||
|
|
@ -22,20 +22,11 @@
|
|||
#include <CGAL/Mesh_2/Mesh_sizing_field.h>
|
||||
#include <CGAL/Mesh_optimization_return_code.h>
|
||||
#include <CGAL/iterator.h>
|
||||
#include <CGAL/boost/parameter.h>
|
||||
#include <boost/parameter/preprocessor.hpp>
|
||||
|
||||
#include <CGAL/Named_function_parameters.h>
|
||||
|
||||
#include <fstream>
|
||||
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
// see <CGAL/config.h>
|
||||
CGAL_PRAGMA_DIAG_PUSH
|
||||
// see <CGAL/boost/parameter.h>
|
||||
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<CGAL_NP_CLASS,internal_np::i_seed_begin_iterator_t>::value ||
|
||||
is_default_parameter<CGAL_NP_CLASS,internal_np::i_seed_end_iterator_t>::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<typename CDT, typename ... NP_PACK>
|
||||
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 <CGAL/enable_warnings.h>
|
||||
#else
|
||||
|
||||
namespace CGAL {
|
||||
|
|
|
|||
|
|
@ -258,6 +258,20 @@ struct Named_function_parameters
|
|||
}
|
||||
#include <CGAL/STL_Extension/internal/parameters_interface.h>
|
||||
#undef CGAL_add_named_parameter
|
||||
|
||||
template <typename OT, typename OTag>
|
||||
Named_function_parameters<OT, OTag, self>
|
||||
combine(const Named_function_parameters<OT,OTag>& np) const
|
||||
{
|
||||
return Named_function_parameters<OT, OTag, self>(np.v,*this);
|
||||
}
|
||||
|
||||
template <typename OT, typename OTag, typename ... NPS>
|
||||
auto
|
||||
combine(const Named_function_parameters<OT,OTag>& np, const NPS& ... nps) const
|
||||
{
|
||||
return Named_function_parameters<OT, OTag, self>(np.v,*this).combine(nps...);
|
||||
}
|
||||
};
|
||||
|
||||
namespace parameters {
|
||||
|
|
@ -295,9 +309,33 @@ inline no_parameters(Named_function_parameters<T,Tag,Base>)
|
|||
typedef Named_function_parameters<K, internal_np::X> Params;\
|
||||
return Params(p); \
|
||||
}
|
||||
|
||||
#include <CGAL/STL_Extension/internal/parameters_interface.h>
|
||||
#undef CGAL_add_named_parameter
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
template <class Tag>
|
||||
struct Boost_parameter_compatibility_wrapper
|
||||
{
|
||||
template <typename K>
|
||||
Named_function_parameters<K, Tag>
|
||||
operator=(const K& p) const
|
||||
{
|
||||
typedef Named_function_parameters<K, Tag> Params;
|
||||
return Params(p);
|
||||
}
|
||||
};
|
||||
|
||||
// TODO: need to make sure this works when using several compilation units
|
||||
const Boost_parameter_compatibility_wrapper<internal_np::number_of_iterations_t> max_iteration_number;
|
||||
const Boost_parameter_compatibility_wrapper<internal_np::convergence_ratio_t> convergence;
|
||||
const Boost_parameter_compatibility_wrapper<internal_np::vertex_freeze_bound_t> freeze_bound;
|
||||
const Boost_parameter_compatibility_wrapper<internal_np::maximum_running_time_t> time_limit;
|
||||
const Boost_parameter_compatibility_wrapper<internal_np::i_seed_begin_iterator_t> seeds_begin;
|
||||
const Boost_parameter_compatibility_wrapper<internal_np::i_seed_end_iterator_t> seeds_end;
|
||||
const Boost_parameter_compatibility_wrapper<internal_np::seeds_are_in_domain_t> mark_;
|
||||
#endif
|
||||
|
||||
// function to extract a parameter
|
||||
template <typename T, typename Tag, typename Base, typename Query_tag>
|
||||
typename internal_np::Get_param<internal_np::Named_params_impl<T, Tag, Base>, Query_tag>::type
|
||||
|
|
@ -373,6 +411,17 @@ struct is_default_parameter
|
|||
|
||||
} // end of parameters namespace
|
||||
|
||||
namespace internal_np {
|
||||
|
||||
template <typename Tag, typename K, typename ... NPS>
|
||||
auto
|
||||
combine_named_parameters(const Named_function_parameters<K, Tag>& np, const NPS& ... nps)
|
||||
{
|
||||
return np.combine(nps ...);
|
||||
}
|
||||
|
||||
} // end of internal_np namespace
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
namespace Polygon_mesh_processing {
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue