mirror of https://github.com/CGAL/cgal
move code so that we can reinject mesh_3 parameters functions into NFP class
This commit is contained in:
parent
300fbb1131
commit
54a6462273
|
|
@ -107,7 +107,7 @@ void initialize_triangulation_from_labeled_image(C3T3& c3t3,
|
|||
if(protect_features) {
|
||||
init_tr_from_labeled_image_call_init_features
|
||||
(c3t3, domain, criteria,
|
||||
CGAL::Mesh_3::internal::Has_features<Mesh_domain>());
|
||||
CGAL::internal::Has_features<Mesh_domain>());
|
||||
}
|
||||
|
||||
const double max_v = (std::max)((std::max)(image.vx(),
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
#include <CGAL/enum.h>
|
||||
#include <CGAL/tags.h>
|
||||
#include <CGAL/SMDS_3/Has_features.h>
|
||||
#include <CGAL/STL_Extension/internal/Has_features.h>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
|
||||
namespace CGAL {
|
||||
|
|
@ -33,7 +33,7 @@ template<typename Triangulation, typename MeshDomain>
|
|||
bool has_non_protecting_weights(const Triangulation& tr,
|
||||
const MeshDomain&)
|
||||
{
|
||||
const bool with_features = Has_features<MeshDomain>::value;
|
||||
const bool with_features = ::CGAL::internal::Has_features<MeshDomain>::value;
|
||||
|
||||
typedef typename Triangulation::FT FT;
|
||||
typedef typename Triangulation::Weighted_point Weighted_point;
|
||||
|
|
|
|||
|
|
@ -13,556 +13,22 @@
|
|||
|
||||
#include <CGAL/license/Mesh_3.h>
|
||||
#include <CGAL/Mesh_error_code.h>
|
||||
#include <CGAL/Mesh_3/parameters_defaults.h>
|
||||
#include <CGAL/Mesh_3/sliver_criteria.h>
|
||||
#include <CGAL/Named_function_parameters.h>
|
||||
#include <CGAL/SMDS_3/Has_features.h>
|
||||
#include <CGAL/STL_Extension/internal/Has_features.h>
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
namespace parameters {
|
||||
|
||||
namespace internal {
|
||||
#define CGAL_NP_BASE internal_np::No_property
|
||||
#define CGAL_NP_BUILD(P, V) P(V)
|
||||
|
||||
#include <CGAL/STL_Extension/internal/mesh_parameters_interface.h>
|
||||
|
||||
const int undef_parameter = -1;
|
||||
#undef CGAL_NP_BASE
|
||||
#undef CGAL_NP_BUILD
|
||||
|
||||
// Helpers
|
||||
struct Optimization_options_base
|
||||
{
|
||||
Optimization_options_base(bool b)
|
||||
: b_(b), time_limit_(undef_parameter), bound_(undef_parameter) {}
|
||||
} } // end of CGAL::parameters namespace
|
||||
|
||||
operator bool() const { return b_; }
|
||||
|
||||
bool is_time_limit_set() const { return time_limit_ != undef_parameter; }
|
||||
void set_time_limit(double d) { time_limit_ = d; }
|
||||
double time_limit() const { return time_limit_; }
|
||||
|
||||
bool is_bound_set() const { return bound_ != undef_parameter; }
|
||||
void set_bound(double d) { bound_ = d; }
|
||||
double bound() const { return bound_; }
|
||||
|
||||
private:
|
||||
bool b_;
|
||||
double time_limit_;
|
||||
double bound_;
|
||||
};
|
||||
|
||||
struct Global_optimization_options_base
|
||||
{
|
||||
Global_optimization_options_base()
|
||||
: convergence_(undef_parameter), max_it_nb_(undef_parameter) {}
|
||||
|
||||
bool is_convergence_set() const { return convergence_ != undef_parameter; }
|
||||
void set_convergence(double d) { convergence_ = d; }
|
||||
double convergence() const { return convergence_; }
|
||||
|
||||
bool is_max_iteration_number_set() const { return max_it_nb_ != undef_parameter; }
|
||||
void set_max_iteration_number(int i) { max_it_nb_ = i; }
|
||||
int max_iteration_number() const { return max_it_nb_; }
|
||||
|
||||
private:
|
||||
double convergence_;
|
||||
int max_it_nb_;
|
||||
};
|
||||
|
||||
// Perturb
|
||||
struct Perturb_options : public Optimization_options_base
|
||||
{
|
||||
Perturb_options(bool b) : Optimization_options_base(b) {}
|
||||
};
|
||||
|
||||
// Exude
|
||||
struct Exude_options : public Optimization_options_base
|
||||
{
|
||||
Exude_options(bool b) : Optimization_options_base(b) {}
|
||||
};
|
||||
|
||||
// Odt
|
||||
struct Odt_options : public Optimization_options_base
|
||||
, public Global_optimization_options_base
|
||||
{
|
||||
Odt_options(bool b) : Optimization_options_base(b)
|
||||
, Global_optimization_options_base() {}
|
||||
};
|
||||
|
||||
// Lloyd
|
||||
struct Lloyd_options : public Optimization_options_base
|
||||
, public Global_optimization_options_base
|
||||
{
|
||||
Lloyd_options(bool b) : Optimization_options_base(b)
|
||||
, Global_optimization_options_base() {}
|
||||
};
|
||||
|
||||
// Manifold
|
||||
struct Manifold_options {
|
||||
enum {
|
||||
NON_MANIFOLD = 0,
|
||||
MANIFOLD_WITH_BOUNDARY = 8,
|
||||
NO_BOUNDARY = 16,
|
||||
MANIFOLD = 24
|
||||
};
|
||||
|
||||
Manifold_options(const int topology)
|
||||
: mesh_topology(topology)
|
||||
{}
|
||||
Manifold_options()
|
||||
: mesh_topology(NON_MANIFOLD)
|
||||
{}
|
||||
|
||||
int mesh_topology;
|
||||
};
|
||||
|
||||
// Various Mesh_3 option
|
||||
struct Mesh_3_options {
|
||||
#ifndef CGAL_NO_ATOMIC
|
||||
typedef std::atomic<bool>* Pointer_to_stop_atomic_boolean_t;
|
||||
#else
|
||||
typedef bool* Pointer_to_stop_atomic_boolean_t;
|
||||
#endif
|
||||
Mesh_3_options(bool nonlinear = false)
|
||||
// This parameter `nonlinear` adds a compatibility with previous
|
||||
// API of the constructor of `C3t3_initializer`.
|
||||
// -- Laurent Rineau, 2019/05/03
|
||||
: dump_after_init_prefix()
|
||||
, dump_after_refine_surface_prefix()
|
||||
, dump_after_refine_prefix()
|
||||
, dump_after_glob_opt_prefix()
|
||||
, dump_after_perturb_prefix()
|
||||
, dump_after_exude_prefix()
|
||||
, number_of_initial_points(-1)
|
||||
, nonlinear_growth_of_balls(nonlinear)
|
||||
, maximal_number_of_vertices(0)
|
||||
, pointer_to_error_code(0)
|
||||
#ifndef CGAL_NO_ATOMIC
|
||||
, pointer_to_stop_atomic_boolean(0)
|
||||
#endif
|
||||
{}
|
||||
|
||||
std::string dump_after_init_prefix;
|
||||
std::string dump_after_refine_surface_prefix;
|
||||
std::string dump_after_refine_prefix;
|
||||
std::string dump_after_glob_opt_prefix;
|
||||
std::string dump_after_perturb_prefix;
|
||||
std::string dump_after_exude_prefix;
|
||||
int number_of_initial_points;
|
||||
bool nonlinear_growth_of_balls;
|
||||
std::size_t maximal_number_of_vertices;
|
||||
Mesh_error_code* pointer_to_error_code;
|
||||
#ifndef CGAL_NO_ATOMIC
|
||||
Pointer_to_stop_atomic_boolean_t pointer_to_stop_atomic_boolean;
|
||||
#endif
|
||||
|
||||
}; // end struct Mesh_3_options
|
||||
|
||||
// Features
|
||||
struct Features_options
|
||||
{
|
||||
Features_options(bool b) : b_(b) {}
|
||||
bool features() const { return b_; }
|
||||
private:
|
||||
bool b_;
|
||||
};
|
||||
|
||||
// -----------------------------------
|
||||
// Features generator
|
||||
// -----------------------------------
|
||||
// struct Features_option_generator
|
||||
template <typename HasFeatures>
|
||||
struct Features_options_generator {};
|
||||
|
||||
template<>
|
||||
struct Features_options_generator<CGAL::Tag_true>
|
||||
{
|
||||
Features_options operator()() { return Features_options(true); }
|
||||
};
|
||||
|
||||
template<>
|
||||
struct Features_options_generator<CGAL::Tag_false>
|
||||
{
|
||||
Features_options operator()() { return Features_options(false); }
|
||||
};
|
||||
|
||||
// struct Domain_features_generator is designed to handle cases where
|
||||
// MeshDomain::Has_features is not a valid type
|
||||
template< typename MeshDomain, bool MeshDomainHasHasFeatures >
|
||||
struct Domain_features_generator {};
|
||||
|
||||
template< typename MeshDomain >
|
||||
struct Domain_features_generator< MeshDomain, false >
|
||||
{
|
||||
Features_options operator()()
|
||||
{
|
||||
return Features_options_generator<CGAL::Tag_false>()();
|
||||
}
|
||||
};
|
||||
|
||||
template< typename MeshDomain >
|
||||
struct Domain_features_generator< MeshDomain, true >
|
||||
{
|
||||
Features_options operator()()
|
||||
{
|
||||
return Features_options_generator<typename MeshDomain::Has_features>()();
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace internal
|
||||
|
||||
|
||||
|
||||
// -----------------------------------
|
||||
// Reset_c3t3 (undocumented)
|
||||
// -----------------------------------
|
||||
inline
|
||||
Named_function_parameters<bool, internal_np::do_reset_c3t3_t>
|
||||
reset_c3t3()
|
||||
{
|
||||
return Named_function_parameters<bool, internal_np::do_reset_c3t3_t>(true);
|
||||
}
|
||||
|
||||
inline
|
||||
Named_function_parameters<bool, internal_np::do_reset_c3t3_t>
|
||||
no_reset_c3t3()
|
||||
{
|
||||
return Named_function_parameters<bool, internal_np::do_reset_c3t3_t>(false);
|
||||
}
|
||||
|
||||
// -----------------------------------
|
||||
// Perturb
|
||||
// -----------------------------------
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<internal::Perturb_options, internal_np::perturb_options_param_t>
|
||||
perturb(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using parameters::choose_parameter;
|
||||
using parameters::get_parameter;
|
||||
double time_limit = choose_parameter(get_parameter(np,internal_np::maximum_running_time),internal::undef_parameter);
|
||||
double sliver_bound = choose_parameter(get_parameter(np,internal_np::lower_sliver_bound),default_values_for_mesh_3::perturb_sliver_bound);
|
||||
|
||||
internal::Perturb_options options(true);
|
||||
|
||||
if ( internal::undef_parameter != time_limit)
|
||||
options.set_time_limit(time_limit);
|
||||
|
||||
options.set_bound(sliver_bound);
|
||||
typedef Named_function_parameters<internal::Perturb_options, internal_np::perturb_options_param_t> Param;
|
||||
return Param(options);
|
||||
}
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<internal::Perturb_options, internal_np::perturb_options_param_t>
|
||||
perturb(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return perturb(internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
|
||||
inline Named_function_parameters<internal::Perturb_options, internal_np::perturb_options_param_t>
|
||||
no_perturb()
|
||||
{
|
||||
typedef Named_function_parameters<internal::Perturb_options, internal_np::perturb_options_param_t> Param;
|
||||
return Param(internal::Perturb_options(false));
|
||||
}
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
CGAL_DEPRECATED
|
||||
inline
|
||||
Named_function_parameters<internal::Perturb_options, internal_np::perturb_options_param_t>
|
||||
perturb(double time_limit_,
|
||||
double sliver_bound_=0)
|
||||
{
|
||||
return perturb(time_limit(time_limit_).
|
||||
sliver_bound(sliver_bound_));
|
||||
}
|
||||
#endif
|
||||
|
||||
// -----------------------------------
|
||||
// Exude
|
||||
// -----------------------------------
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<internal::Exude_options, internal_np::exude_options_param_t>
|
||||
exude(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using parameters::choose_parameter;
|
||||
using parameters::get_parameter;
|
||||
double time_limit = choose_parameter(get_parameter(np,internal_np::maximum_running_time),internal::undef_parameter);
|
||||
double sliver_bound = choose_parameter(get_parameter(np,internal_np::lower_sliver_bound),default_values_for_mesh_3::perturb_sliver_bound);
|
||||
|
||||
internal::Exude_options options(true);
|
||||
|
||||
if ( internal::undef_parameter != time_limit)
|
||||
options.set_time_limit(time_limit);
|
||||
options.set_bound(sliver_bound);
|
||||
typedef Named_function_parameters<internal::Exude_options, internal_np::exude_options_param_t> Param;
|
||||
|
||||
return Param(options);
|
||||
}
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<internal::Exude_options, internal_np::exude_options_param_t>
|
||||
exude(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return exude(internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
inline Named_function_parameters<internal::Exude_options, internal_np::exude_options_param_t>
|
||||
no_exude()
|
||||
{
|
||||
typedef Named_function_parameters<internal::Exude_options, internal_np::exude_options_param_t> Param;
|
||||
return Param(internal::Exude_options(false));
|
||||
}
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
CGAL_DEPRECATED
|
||||
inline
|
||||
Named_function_parameters<internal::Exude_options, internal_np::exude_options_param_t>
|
||||
exude(double time_limit_,
|
||||
double sliver_bound_ = 0)
|
||||
{
|
||||
return exude(time_limit(time_limit_).sliver_bound(sliver_bound_));
|
||||
}
|
||||
#endif
|
||||
|
||||
// -----------------------------------
|
||||
// Odt
|
||||
// -----------------------------------
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<internal::Odt_options, internal_np::odt_options_param_t>
|
||||
odt(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using parameters::choose_parameter;
|
||||
using parameters::get_parameter;
|
||||
double time_limit = choose_parameter(get_parameter(np,internal_np::maximum_running_time),0);
|
||||
double freeze_bound = choose_parameter(get_parameter(np,internal_np::vertex_freeze_bound),default_values_for_mesh_3::odt_freeze_ratio);
|
||||
double convergence = choose_parameter(get_parameter(np,internal_np::convergence_ratio), default_values_for_mesh_3::odt_convergence_ratio);
|
||||
int max_iteration_number = choose_parameter(get_parameter(np,internal_np::number_of_iterations), 0);
|
||||
internal::Odt_options options(true);
|
||||
|
||||
options.set_time_limit(time_limit);
|
||||
options.set_bound(freeze_bound);
|
||||
options.set_convergence(convergence);
|
||||
options.set_max_iteration_number(max_iteration_number);
|
||||
typedef Named_function_parameters<internal::Odt_options, internal_np::odt_options_param_t> Param;
|
||||
return Param(options);
|
||||
}
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<internal::Odt_options, internal_np::odt_options_param_t>
|
||||
odt(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return odt(internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
inline Named_function_parameters<internal::Odt_options, internal_np::odt_options_param_t>
|
||||
no_odt()
|
||||
{
|
||||
typedef Named_function_parameters<internal::Odt_options, internal_np::odt_options_param_t> Param;
|
||||
return Param(internal::Odt_options(false));
|
||||
}
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
CGAL_DEPRECATED
|
||||
inline
|
||||
Named_function_parameters<internal::Odt_options, internal_np::odt_options_param_t>
|
||||
odt(double time_limit_,
|
||||
std::size_t max_iteration_number_ = 0,
|
||||
double convergence_ = 0.02,
|
||||
double freeze_bound_ = 0.01,
|
||||
bool do_freeze_ = true)
|
||||
{
|
||||
return odt(time_limit(time_limit_).
|
||||
max_iteration_number(max_iteration_number_).
|
||||
convergence(convergence_).
|
||||
freeze_bound(freeze_bound_).
|
||||
do_freeze(do_freeze_));
|
||||
}
|
||||
#endif
|
||||
|
||||
// -----------------------------------
|
||||
// Lloyd
|
||||
// -----------------------------------
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<internal::Lloyd_options, internal_np::lloyd_options_param_t>
|
||||
lloyd(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using parameters::choose_parameter;
|
||||
using parameters::get_parameter;
|
||||
double time_limit = choose_parameter(get_parameter(np,internal_np::maximum_running_time),0);
|
||||
double freeze_bound = choose_parameter(get_parameter(np,internal_np::vertex_freeze_bound),default_values_for_mesh_3::lloyd_freeze_ratio);
|
||||
double convergence = choose_parameter(get_parameter(np,internal_np::convergence_ratio), default_values_for_mesh_3::lloyd_convergence_ratio);
|
||||
int max_iteration_number = choose_parameter(get_parameter(np,internal_np::number_of_iterations), 0);
|
||||
internal::Lloyd_options options(true);
|
||||
|
||||
options.set_time_limit(time_limit);
|
||||
options.set_bound(freeze_bound);
|
||||
options.set_convergence(convergence);
|
||||
options.set_max_iteration_number(max_iteration_number);
|
||||
|
||||
typedef Named_function_parameters<internal::Lloyd_options, internal_np::lloyd_options_param_t> Param;
|
||||
return Param(options);
|
||||
}
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<internal::Lloyd_options, internal_np::lloyd_options_param_t>
|
||||
lloyd(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return lloyd(internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
inline Named_function_parameters<internal::Lloyd_options, internal_np::lloyd_options_param_t>
|
||||
no_lloyd()
|
||||
{
|
||||
typedef Named_function_parameters<internal::Lloyd_options, internal_np::lloyd_options_param_t> Param;
|
||||
return Param(internal::Lloyd_options(false));
|
||||
}
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
CGAL_DEPRECATED
|
||||
inline
|
||||
Named_function_parameters<internal::Lloyd_options, internal_np::lloyd_options_param_t>
|
||||
lloyd(double time_limit_,
|
||||
std::size_t max_iteration_number_ = 0,
|
||||
double convergence_ = 0.02,
|
||||
double freeze_bound_ = 0.01,
|
||||
bool do_freeze_= true)
|
||||
{
|
||||
return lloyd(time_limit(time_limit_).
|
||||
max_iteration_number(max_iteration_number_).
|
||||
convergence(convergence_).
|
||||
freeze_bound(freeze_bound_).
|
||||
do_freeze(do_freeze_));
|
||||
}
|
||||
#endif
|
||||
|
||||
// -----------------------------------
|
||||
// Manifold options
|
||||
// -----------------------------------
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<internal::Manifold_options, internal_np::manifold_param_t>
|
||||
manifold_options(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using parameters::choose_parameter;
|
||||
using parameters::get_parameter;
|
||||
int mesh_topology = choose_parameter(get_parameter(np, internal_np::mesh_topology_number), -1);
|
||||
internal::Manifold_options options;
|
||||
options.mesh_topology = mesh_topology;
|
||||
|
||||
typedef Named_function_parameters<internal::Manifold_options, internal_np::manifold_param_t> Param;
|
||||
return Param(options);
|
||||
}
|
||||
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<internal::Manifold_options, internal_np::manifold_param_t>
|
||||
manifold_options(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return manifold_options(internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
inline Named_function_parameters<internal::Manifold_options, internal_np::manifold_param_t>
|
||||
manifold()
|
||||
{
|
||||
typedef Named_function_parameters<internal::Manifold_options, internal_np::manifold_param_t> Param;
|
||||
return Param(internal::Manifold_options(internal::Manifold_options::MANIFOLD));
|
||||
}
|
||||
inline Named_function_parameters<internal::Manifold_options, internal_np::manifold_param_t>
|
||||
manifold_with_boundary()
|
||||
{
|
||||
typedef Named_function_parameters<internal::Manifold_options, internal_np::manifold_param_t> Param;
|
||||
return Param(internal::Manifold_options(
|
||||
internal::Manifold_options::MANIFOLD_WITH_BOUNDARY));
|
||||
}
|
||||
inline Named_function_parameters<internal::Manifold_options, internal_np::manifold_param_t>
|
||||
non_manifold()
|
||||
{
|
||||
typedef Named_function_parameters<internal::Manifold_options, internal_np::manifold_param_t> Param;
|
||||
return Param(internal::Manifold_options(internal::Manifold_options::NON_MANIFOLD));
|
||||
}
|
||||
|
||||
// -----------------------------------
|
||||
// Mesh options
|
||||
// -----------------------------------
|
||||
|
||||
// Undocumented parameter for refine_mesh_3 and make_mesh_3.
|
||||
// Allows to dump the mesh at given stage of the mesh generation
|
||||
// algorithm.
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<internal::Mesh_3_options, internal_np::mesh_param_t>
|
||||
mesh_3_options(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using parameters::choose_parameter;
|
||||
using parameters::get_parameter;
|
||||
internal::Mesh_3_options options;
|
||||
|
||||
options.dump_after_init_prefix=choose_parameter(get_parameter(np, internal_np::dump_after_init_prefix_param), "");
|
||||
options.dump_after_refine_surface_prefix=choose_parameter(get_parameter(np, internal_np::dump_after_refine_surface_prefix_param), "");
|
||||
options.dump_after_refine_prefix=choose_parameter(get_parameter(np, internal_np::dump_after_refine_prefix_param), "");
|
||||
options.dump_after_glob_opt_prefix=choose_parameter(get_parameter(np, internal_np::dump_after_glob_opt_prefix_param), "");
|
||||
options.dump_after_perturb_prefix=choose_parameter(get_parameter(np, internal_np::dump_after_perturb_prefix_param), "");
|
||||
options.dump_after_exude_prefix=choose_parameter(get_parameter(np, internal_np::dump_after_refine_surface_prefix_param), "");
|
||||
options.number_of_initial_points=choose_parameter(get_parameter(np, internal_np::number_of_initial_points_param), -1);
|
||||
options.nonlinear_growth_of_balls = choose_parameter(get_parameter(np, internal_np::nonlinear_growth_of_balls_param), false);
|
||||
options.maximal_number_of_vertices=choose_parameter(get_parameter(np, internal_np::maximal_number_of_vertices_param), 0);
|
||||
options.pointer_to_error_code=choose_parameter(get_parameter(np, internal_np::pointer_to_error_code_param), ((Mesh_error_code*)0));
|
||||
#ifndef CGAL_NO_ATOMIC
|
||||
options.pointer_to_stop_atomic_boolean=choose_parameter(get_parameter(np, internal_np::pointer_to_stop_atomic_boolean_param),
|
||||
((internal::Mesh_3_options::Pointer_to_stop_atomic_boolean_t)0));
|
||||
#endif
|
||||
|
||||
typedef Named_function_parameters<internal::Mesh_3_options, internal_np::mesh_param_t> Param;
|
||||
return Param(options);
|
||||
}
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<internal::Mesh_3_options, internal_np::mesh_param_t>
|
||||
mesh_3_options(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return mesh_3_options(internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
// Undocumented parameter for refine_mesh_3 and make_mesh_3.
|
||||
// Default Mesh_3_options: dump at every stage of the mesh generation.
|
||||
inline
|
||||
Named_function_parameters<internal::Mesh_3_options, internal_np::mesh_param_t>
|
||||
mesh_3_dump()
|
||||
{
|
||||
typedef Named_function_parameters<internal::Mesh_3_options, internal_np::mesh_param_t> Param;
|
||||
internal::Mesh_3_options options;
|
||||
|
||||
options.dump_after_init_prefix = "mesh_dump_after_init";
|
||||
options.dump_after_refine_surface_prefix = "mesh_dump_after_refine_surface";
|
||||
options.dump_after_refine_prefix = "mesh_dump_after_refine";
|
||||
options.dump_after_glob_opt_prefix = "mesh_dump_after_glob_opt";
|
||||
options.dump_after_perturb_prefix = "mesh_dump_after_perturb";
|
||||
options.dump_after_exude_prefix = "mesh_dump_after_exude";
|
||||
|
||||
return Param(options);
|
||||
}
|
||||
|
||||
// -----------------------------------
|
||||
// Features_options
|
||||
// -----------------------------------
|
||||
inline Named_function_parameters<internal::Features_options, internal_np::features_option_param_t>
|
||||
features() {
|
||||
typedef Named_function_parameters<internal::Features_options, internal_np::features_option_param_t> Param;
|
||||
return Param(internal::Features_options(true));
|
||||
}
|
||||
|
||||
inline Named_function_parameters<internal::Features_options, internal_np::features_option_param_t>
|
||||
no_features() {
|
||||
typedef Named_function_parameters<internal::Features_options, internal_np::features_option_param_t> Param;
|
||||
return Param(internal::Features_options(false)); }
|
||||
|
||||
template < typename MeshDomain >
|
||||
inline Named_function_parameters<internal::Features_options, internal_np::features_option_param_t>
|
||||
features(const MeshDomain& /*domain*/)
|
||||
{
|
||||
typedef typename internal::Domain_features_generator<MeshDomain,
|
||||
CGAL::Mesh_3::internal::has_Has_features<MeshDomain>::value > Generator;
|
||||
|
||||
typedef Named_function_parameters<internal::Features_options, internal_np::features_option_param_t> Param;
|
||||
return Param(Generator()());
|
||||
}
|
||||
|
||||
} } //namespace CGAL::parameters
|
||||
|
||||
#endif //CGAL_MESH_3_PARAMETERS_H
|
||||
|
|
@ -23,6 +23,9 @@
|
|||
|
||||
#include <CGAL/Mesh_3/sliver_criteria.h>
|
||||
|
||||
// see also default_values_for_mesh_3 namespace
|
||||
// in CGAL/STL_Extension/internal/mesh_option_classes.h
|
||||
|
||||
namespace CGAL {
|
||||
namespace parameters { namespace default_values_for_mesh_3 {
|
||||
|
||||
|
|
@ -30,7 +33,6 @@ namespace parameters { namespace default_values_for_mesh_3 {
|
|||
const double exude_sliver_bound = 0.;
|
||||
|
||||
// perturb_mesh_3
|
||||
const double perturb_sliver_bound = 0.;
|
||||
template<typename C3T3>
|
||||
CGAL::Mesh_3::Min_dihedral_angle_criterion
|
||||
<typename C3T3::Triangulation>
|
||||
|
|
@ -43,14 +45,6 @@ CGAL::Mesh_3::Min_dihedral_angle_criterion
|
|||
// global optimizers
|
||||
const bool do_freeze = true;
|
||||
|
||||
// lloyd_optimize_mesh_3
|
||||
const double lloyd_freeze_ratio = 0.01;
|
||||
const double lloyd_convergence_ratio = 0.02;
|
||||
|
||||
// odt_optimize_mesh_3
|
||||
const double odt_freeze_ratio = 0.01;
|
||||
const double odt_convergence_ratio = 0.02;
|
||||
|
||||
} } // end namespace parameters::default_values_for_mesh_3
|
||||
} // end namespace CGAL
|
||||
|
||||
|
|
|
|||
|
|
@ -14,17 +14,13 @@
|
|||
|
||||
#include <CGAL/license/Mesh_3.h>
|
||||
|
||||
#include <CGAL/STL_Extension/internal/mesh_option_classes.h>
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
enum Mesh_error_code {
|
||||
CGAL_MESH_3_NO_ERROR = 0,
|
||||
CGAL_MESH_3_MAXIMAL_NUMBER_OF_VERTICES_REACHED,
|
||||
CGAL_MESH_3_STOPPED
|
||||
};
|
||||
|
||||
inline
|
||||
std::string mesh_error_string(const Mesh_error_code& error_code) {
|
||||
switch(error_code) {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
#include <CGAL/refine_mesh_3.h>
|
||||
#include <CGAL/tags.h>
|
||||
#include <CGAL/Mesh_3/Protect_edges_sizing_field.h>
|
||||
#include <CGAL/SMDS_3/Has_features.h>
|
||||
#include <CGAL/STL_Extension/internal/Has_features.h>
|
||||
#include <CGAL/Mesh_3/C3T3_helpers.h>
|
||||
|
||||
#include <boost/mpl/has_xxx.hpp>
|
||||
|
|
@ -494,7 +494,7 @@ void make_mesh_3_impl(C3T3& c3t3,
|
|||
C3T3,
|
||||
MeshDomain,
|
||||
MeshCriteria,
|
||||
Mesh_3::internal::has_Has_features<MeshDomain>::value > () (c3t3,
|
||||
::CGAL::internal::has_Has_features<MeshDomain>::value > () (c3t3,
|
||||
domain,
|
||||
criteria,
|
||||
with_features,
|
||||
|
|
|
|||
|
|
@ -382,11 +382,11 @@ void make_periodic_3_mesh_3_impl(C3T3& c3t3,
|
|||
// Initialize c3t3
|
||||
Periodic_3_mesh_3::internal::C3t3_initializer<
|
||||
C3T3, MeshDomain, MeshCriteria,
|
||||
Mesh_3::internal::has_Has_features<MeshDomain>::value>()(c3t3,
|
||||
domain,
|
||||
criteria,
|
||||
with_features,
|
||||
mesh_options);
|
||||
internal::has_Has_features<MeshDomain>::value>()(c3t3,
|
||||
domain,
|
||||
criteria,
|
||||
with_features,
|
||||
mesh_options);
|
||||
|
||||
// Build mesher and launch refinement process
|
||||
refine_periodic_3_mesh_3(c3t3, domain, criteria,
|
||||
|
|
|
|||
|
|
@ -226,7 +226,7 @@ initialize(const Mesh_criteria& criteria, Mesh_fnt::Domain_tag)
|
|||
C3t3,
|
||||
Domain,
|
||||
Mesh_criteria,
|
||||
CGAL::Mesh_3::internal::has_Has_features<Domain>::value >()
|
||||
CGAL::internal::has_Has_features<Domain>::value >()
|
||||
(c3t3_,
|
||||
*domain_,
|
||||
criteria,
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
#include <boost/variant/variant.hpp>
|
||||
#include <boost/variant/get.hpp>
|
||||
#include <boost/variant/apply_visitor.hpp>
|
||||
#include <CGAL/SMDS_3/Has_features.h>
|
||||
#include <CGAL/STL_Extension/internal/Has_features.h>
|
||||
#include <CGAL/IO/io.h>
|
||||
|
||||
#include <tuple>
|
||||
|
|
@ -53,7 +53,7 @@ struct Index_generator<T, T>
|
|||
typedef Index type;
|
||||
};
|
||||
|
||||
template <typename MD, bool has_feature = Has_features<MD>::value>
|
||||
template <typename MD, bool has_feature = ::CGAL::internal::Has_features<MD>::value>
|
||||
struct Indices_tuple_generator
|
||||
{
|
||||
using type = std::tuple<typename MD::Subdomain_index,
|
||||
|
|
@ -152,7 +152,7 @@ template <typename T>
|
|||
const T& get_index(const T& x) { return x; }
|
||||
|
||||
template <typename Mesh_domain,
|
||||
bool has_feature = Has_features<Mesh_domain>::value>
|
||||
bool has_feature = ::CGAL::internal::Has_features<Mesh_domain>::value>
|
||||
struct Read_mesh_domain_index {
|
||||
// here we have has_feature==true
|
||||
|
||||
|
|
@ -181,7 +181,7 @@ struct Read_mesh_domain_index {
|
|||
// Read_mesh_domain_index<Mesh_domain, true>
|
||||
|
||||
template <typename Mesh_domain,
|
||||
bool has_feature = Has_features<Mesh_domain>::value>
|
||||
bool has_feature = ::CGAL::internal::Has_features<Mesh_domain>::value>
|
||||
struct Write_mesh_domain_index {
|
||||
// here we have has_feature==true
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#endif
|
||||
|
||||
#include <CGAL/tags.h>
|
||||
#include <CGAL/STL_Extension/internal/mesh_option_classes.h>
|
||||
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
|
|
@ -242,11 +243,93 @@ get_parameter_reference_impl(const Named_params_impl<T, Tag, Base>& np, Query_ta
|
|||
return get_parameter_reference_impl(static_cast<const typename Base::base&>(np), tag);
|
||||
}
|
||||
|
||||
} // end of internal_np namespace
|
||||
|
||||
template <typename T, typename Tag, typename Base = internal_np::No_property>
|
||||
struct Named_function_parameters;
|
||||
|
||||
namespace parameters{
|
||||
|
||||
typedef Named_function_parameters<bool, internal_np::all_default_t> Default_named_parameters;
|
||||
|
||||
Default_named_parameters
|
||||
inline default_values();
|
||||
|
||||
// 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
|
||||
get_parameter(const Named_function_parameters<T, Tag, Base>& np, Query_tag tag)
|
||||
{
|
||||
return internal_np::get_parameter_impl(static_cast<const internal_np::Named_params_impl<T, Tag, Base>&>(np), tag);
|
||||
}
|
||||
|
||||
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>::reference
|
||||
get_parameter_reference(const Named_function_parameters<T, Tag, Base>& np, Query_tag tag)
|
||||
{
|
||||
return internal_np::get_parameter_reference_impl(
|
||||
static_cast<const internal_np::Named_params_impl<T, Tag, Base>&>(np),
|
||||
tag);
|
||||
}
|
||||
|
||||
// Two parameters, non-trivial default value
|
||||
template <typename D>
|
||||
D& choose_parameter(const internal_np::Param_not_found&, D& d)
|
||||
{
|
||||
return d;
|
||||
}
|
||||
|
||||
template <typename D>
|
||||
const D& choose_parameter(const internal_np::Param_not_found&, const D& d)
|
||||
{
|
||||
return d;
|
||||
}
|
||||
|
||||
template <typename D>
|
||||
D choose_parameter(const internal_np::Param_not_found&, D&& d)
|
||||
{
|
||||
return std::forward<D>(d);
|
||||
}
|
||||
|
||||
template <typename T, typename D>
|
||||
T& choose_parameter(T& t, D&)
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
template <typename T, typename D>
|
||||
const T& choose_parameter(const T& t, const D&)
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
// single parameter so that we can avoid a default construction
|
||||
template <typename D>
|
||||
D choose_parameter(const internal_np::Param_not_found&)
|
||||
{
|
||||
return D();
|
||||
}
|
||||
|
||||
template <typename D, typename T>
|
||||
const T& choose_parameter(const T& t)
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
} // 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
|
||||
|
||||
|
||||
template <typename T, typename Tag, typename Base = internal_np::No_property>
|
||||
template <typename T, typename Tag, typename Base>
|
||||
struct Named_function_parameters
|
||||
: internal_np::Named_params_impl<T, Tag, Base>
|
||||
{
|
||||
|
|
@ -299,6 +382,15 @@ struct Named_function_parameters
|
|||
#undef CGAL_add_named_parameter_with_compatibility_ref_only
|
||||
#undef CGAL_add_extra_named_parameter_with_compatibility
|
||||
|
||||
// inject mesh specific named parameter functions
|
||||
#define CGAL_NP_BASE self
|
||||
#define CGAL_NP_BUILD(P, V) P(V, *this)
|
||||
|
||||
#include <CGAL/STL_Extension/internal/mesh_parameters_interface.h>
|
||||
|
||||
#undef CGAL_NP_BASE
|
||||
#undef CGAL_NP_BUILD
|
||||
|
||||
template <typename OT, typename OTag>
|
||||
Named_function_parameters<OT, OTag, self>
|
||||
combine(const Named_function_parameters<OT,OTag>& np) const
|
||||
|
|
@ -319,7 +411,11 @@ struct Named_function_parameters
|
|||
|
||||
namespace parameters {
|
||||
|
||||
typedef Named_function_parameters<bool, internal_np::all_default_t> Default_named_parameters;
|
||||
Default_named_parameters
|
||||
inline default_values()
|
||||
{
|
||||
return Default_named_parameters();
|
||||
}
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
Default_named_parameters
|
||||
|
|
@ -329,12 +425,6 @@ inline all_default()
|
|||
}
|
||||
#endif
|
||||
|
||||
Default_named_parameters
|
||||
inline default_values()
|
||||
{
|
||||
return Default_named_parameters();
|
||||
}
|
||||
|
||||
template <typename T, typename Tag, typename Base>
|
||||
Named_function_parameters<T,Tag,Base>
|
||||
inline no_parameters(Named_function_parameters<T,Tag,Base>)
|
||||
|
|
@ -405,67 +495,6 @@ struct Boost_parameter_compatibility_wrapper<Tag, true>
|
|||
#undef CGAL_add_named_parameter_with_compatibility
|
||||
#undef CGAL_add_named_parameter_with_compatibility_ref_only
|
||||
|
||||
// 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
|
||||
get_parameter(const Named_function_parameters<T, Tag, Base>& np, Query_tag tag)
|
||||
{
|
||||
return internal_np::get_parameter_impl(static_cast<const internal_np::Named_params_impl<T, Tag, Base>&>(np), tag);
|
||||
}
|
||||
|
||||
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>::reference
|
||||
get_parameter_reference(const Named_function_parameters<T, Tag, Base>& np, Query_tag tag)
|
||||
{
|
||||
return internal_np::get_parameter_reference_impl(
|
||||
static_cast<const internal_np::Named_params_impl<T, Tag, Base>&>(np),
|
||||
tag);
|
||||
}
|
||||
|
||||
// Two parameters, non-trivial default value
|
||||
template <typename D>
|
||||
D& choose_parameter(const internal_np::Param_not_found&, D& d)
|
||||
{
|
||||
return d;
|
||||
}
|
||||
|
||||
template <typename D>
|
||||
const D& choose_parameter(const internal_np::Param_not_found&, const D& d)
|
||||
{
|
||||
return d;
|
||||
}
|
||||
|
||||
template <typename D>
|
||||
D choose_parameter(const internal_np::Param_not_found&, D&& d)
|
||||
{
|
||||
return std::forward<D>(d);
|
||||
}
|
||||
|
||||
template <typename T, typename D>
|
||||
T& choose_parameter(T& t, D&)
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
template <typename T, typename D>
|
||||
const T& choose_parameter(const T& t, const D&)
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
// single parameter so that we can avoid a default construction
|
||||
template <typename D>
|
||||
D choose_parameter(const internal_np::Param_not_found&)
|
||||
{
|
||||
return D();
|
||||
}
|
||||
|
||||
template <typename D, typename T>
|
||||
const T& choose_parameter(const T& t)
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
// Version with three parameters for dynamic property maps
|
||||
template <typename D, typename Dynamic_tag, typename PolygonMesh>
|
||||
D choose_parameter(const internal_np::Param_not_found&, Dynamic_tag tag, PolygonMesh& pm)
|
||||
|
|
@ -493,17 +522,6 @@ 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 {
|
||||
|
||||
|
|
@ -526,7 +544,7 @@ namespace boost
|
|||
}
|
||||
#endif
|
||||
|
||||
// For disambiguation using SFINAR
|
||||
// For disambiguation using SFINAE
|
||||
BOOST_MPL_HAS_XXX_TRAIT_DEF(CGAL_Named_function_parameters_class)
|
||||
template<class T>
|
||||
CGAL_CPP17_INLINE constexpr bool is_named_function_parameter = has_CGAL_Named_function_parameters_class<T>::value;
|
||||
|
|
|
|||
|
|
@ -6,21 +6,17 @@
|
|||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
// Author(s) : Stéphane Tayeb, Laurent Rineau
|
||||
|
||||
#ifndef CGAL_MESH_3_HAS_FEATURES_H
|
||||
#define CGAL_MESH_3_HAS_FEATURES_H
|
||||
|
||||
#include <CGAL/license/SMDS_3.h>
|
||||
|
||||
#ifndef CGAL_HAS_FEATURES_H
|
||||
#define CGAL_HAS_FEATURES_H
|
||||
|
||||
#include <boost/mpl/has_xxx.hpp>
|
||||
#include <CGAL/tags.h>
|
||||
|
||||
namespace CGAL {
|
||||
namespace Mesh_3 {
|
||||
namespace internal {
|
||||
|
||||
// A type has_Has_features to check if type 'Has_features' is a nested
|
||||
|
|
@ -40,7 +36,6 @@ namespace internal {
|
|||
{};
|
||||
|
||||
} // end namespace internal
|
||||
} // end namespace Mesh_3
|
||||
} // end namespace CGAL
|
||||
|
||||
#endif // CGAL_MESH_3_HAS_FEATURES_H
|
||||
|
|
@ -0,0 +1,229 @@
|
|||
// Copyright (c) 2009 INRIA Sophia-Antipolis (France).
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org).
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
|
||||
#ifndef CGAL_MESH_OPTION_CLASSES_H
|
||||
#define CGAL_MESH_OPTION_CLASSES_H
|
||||
|
||||
#include <CGAL/STL_Extension/internal/Has_features.h>
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
enum Mesh_error_code {
|
||||
CGAL_MESH_3_NO_ERROR = 0,
|
||||
CGAL_MESH_3_MAXIMAL_NUMBER_OF_VERTICES_REACHED,
|
||||
CGAL_MESH_3_STOPPED
|
||||
};
|
||||
|
||||
namespace parameters {
|
||||
|
||||
namespace internal {
|
||||
|
||||
const int undef_parameter = -1;
|
||||
|
||||
// Helpers
|
||||
struct Optimization_options_base
|
||||
{
|
||||
Optimization_options_base(bool b)
|
||||
: b_(b), time_limit_(undef_parameter), bound_(undef_parameter) {}
|
||||
|
||||
operator bool() const { return b_; }
|
||||
|
||||
bool is_time_limit_set() const { return time_limit_ != undef_parameter; }
|
||||
void set_time_limit(double d) { time_limit_ = d; }
|
||||
double time_limit() const { return time_limit_; }
|
||||
|
||||
bool is_bound_set() const { return bound_ != undef_parameter; }
|
||||
void set_bound(double d) { bound_ = d; }
|
||||
double bound() const { return bound_; }
|
||||
|
||||
private:
|
||||
bool b_;
|
||||
double time_limit_;
|
||||
double bound_;
|
||||
};
|
||||
|
||||
struct Global_optimization_options_base
|
||||
{
|
||||
Global_optimization_options_base()
|
||||
: convergence_(undef_parameter), max_it_nb_(undef_parameter) {}
|
||||
|
||||
bool is_convergence_set() const { return convergence_ != undef_parameter; }
|
||||
void set_convergence(double d) { convergence_ = d; }
|
||||
double convergence() const { return convergence_; }
|
||||
|
||||
bool is_max_iteration_number_set() const { return max_it_nb_ != undef_parameter; }
|
||||
void set_max_iteration_number(int i) { max_it_nb_ = i; }
|
||||
int max_iteration_number() const { return max_it_nb_; }
|
||||
|
||||
private:
|
||||
double convergence_;
|
||||
int max_it_nb_;
|
||||
};
|
||||
|
||||
// Perturb
|
||||
struct Perturb_options : public Optimization_options_base
|
||||
{
|
||||
Perturb_options(bool b) : Optimization_options_base(b) {}
|
||||
};
|
||||
|
||||
// Exude
|
||||
struct Exude_options : public Optimization_options_base
|
||||
{
|
||||
Exude_options(bool b) : Optimization_options_base(b) {}
|
||||
};
|
||||
|
||||
// Odt
|
||||
struct Odt_options : public Optimization_options_base
|
||||
, public Global_optimization_options_base
|
||||
{
|
||||
Odt_options(bool b) : Optimization_options_base(b)
|
||||
, Global_optimization_options_base() {}
|
||||
};
|
||||
|
||||
// Lloyd
|
||||
struct Lloyd_options : public Optimization_options_base
|
||||
, public Global_optimization_options_base
|
||||
{
|
||||
Lloyd_options(bool b) : Optimization_options_base(b)
|
||||
, Global_optimization_options_base() {}
|
||||
};
|
||||
|
||||
// Manifold
|
||||
struct Manifold_options {
|
||||
enum {
|
||||
NON_MANIFOLD = 0,
|
||||
MANIFOLD_WITH_BOUNDARY = 8,
|
||||
NO_BOUNDARY = 16,
|
||||
MANIFOLD = 24
|
||||
};
|
||||
|
||||
Manifold_options(const int topology)
|
||||
: mesh_topology(topology)
|
||||
{}
|
||||
Manifold_options()
|
||||
: mesh_topology(NON_MANIFOLD)
|
||||
{}
|
||||
|
||||
int mesh_topology;
|
||||
};
|
||||
|
||||
// Various Mesh_3 option
|
||||
struct Mesh_3_options {
|
||||
#ifndef CGAL_NO_ATOMIC
|
||||
typedef std::atomic<bool>* Pointer_to_stop_atomic_boolean_t;
|
||||
#else
|
||||
typedef bool* Pointer_to_stop_atomic_boolean_t;
|
||||
#endif
|
||||
Mesh_3_options(bool nonlinear = false)
|
||||
// This parameter `nonlinear` adds a compatibility with previous
|
||||
// API of the constructor of `C3t3_initializer`.
|
||||
// -- Laurent Rineau, 2019/05/03
|
||||
: dump_after_init_prefix()
|
||||
, dump_after_refine_surface_prefix()
|
||||
, dump_after_refine_prefix()
|
||||
, dump_after_glob_opt_prefix()
|
||||
, dump_after_perturb_prefix()
|
||||
, dump_after_exude_prefix()
|
||||
, number_of_initial_points(-1)
|
||||
, nonlinear_growth_of_balls(nonlinear)
|
||||
, maximal_number_of_vertices(0)
|
||||
, pointer_to_error_code(0)
|
||||
#ifndef CGAL_NO_ATOMIC
|
||||
, pointer_to_stop_atomic_boolean(0)
|
||||
#endif
|
||||
{}
|
||||
|
||||
std::string dump_after_init_prefix;
|
||||
std::string dump_after_refine_surface_prefix;
|
||||
std::string dump_after_refine_prefix;
|
||||
std::string dump_after_glob_opt_prefix;
|
||||
std::string dump_after_perturb_prefix;
|
||||
std::string dump_after_exude_prefix;
|
||||
int number_of_initial_points;
|
||||
bool nonlinear_growth_of_balls;
|
||||
std::size_t maximal_number_of_vertices;
|
||||
Mesh_error_code* pointer_to_error_code;
|
||||
#ifndef CGAL_NO_ATOMIC
|
||||
Pointer_to_stop_atomic_boolean_t pointer_to_stop_atomic_boolean;
|
||||
#endif
|
||||
|
||||
}; // end struct Mesh_3_options
|
||||
|
||||
// Features
|
||||
struct Features_options
|
||||
{
|
||||
Features_options(bool b) : b_(b) {}
|
||||
bool features() const { return b_; }
|
||||
private:
|
||||
bool b_;
|
||||
};
|
||||
|
||||
// -----------------------------------
|
||||
// Features generator
|
||||
// -----------------------------------
|
||||
// struct Features_option_generator
|
||||
template <typename HasFeatures>
|
||||
struct Features_options_generator {};
|
||||
|
||||
template<>
|
||||
struct Features_options_generator<CGAL::Tag_true>
|
||||
{
|
||||
Features_options operator()() { return Features_options(true); }
|
||||
};
|
||||
|
||||
template<>
|
||||
struct Features_options_generator<CGAL::Tag_false>
|
||||
{
|
||||
Features_options operator()() { return Features_options(false); }
|
||||
};
|
||||
|
||||
// struct Domain_features_generator is designed to handle cases where
|
||||
// MeshDomain::Has_features is not a valid type
|
||||
template< typename MeshDomain, bool MeshDomainHasHasFeatures >
|
||||
struct Domain_features_generator {};
|
||||
|
||||
template< typename MeshDomain >
|
||||
struct Domain_features_generator< MeshDomain, false >
|
||||
{
|
||||
Features_options operator()()
|
||||
{
|
||||
return Features_options_generator<CGAL::Tag_false>()();
|
||||
}
|
||||
};
|
||||
|
||||
template< typename MeshDomain >
|
||||
struct Domain_features_generator< MeshDomain, true >
|
||||
{
|
||||
Features_options operator()()
|
||||
{
|
||||
return Features_options_generator<typename MeshDomain::Has_features>()();
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace internal
|
||||
|
||||
|
||||
namespace default_values_for_mesh_3 {
|
||||
|
||||
// perturb_mesh_3
|
||||
const double perturb_sliver_bound = 0.;
|
||||
|
||||
// lloyd_optimize_mesh_3
|
||||
const double lloyd_freeze_ratio = 0.01;
|
||||
const double lloyd_convergence_ratio = 0.02;
|
||||
|
||||
// odt_optimize_mesh_3
|
||||
const double odt_freeze_ratio = 0.01;
|
||||
const double odt_convergence_ratio = 0.02;
|
||||
|
||||
|
||||
} } } //namespace CGAL::parameters::def
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,370 @@
|
|||
// Copyright (c) 2017 GeometryFactory (France). All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org)
|
||||
//
|
||||
// $URL$
|
||||
// $Id$
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
//
|
||||
|
||||
// List of named parameters special functions used in meshing packages of CGAL
|
||||
// no guard on purpose as they are injected both in the parameter namespace
|
||||
// and the Named_function_parameters class.
|
||||
|
||||
|
||||
// -----------------------------------
|
||||
// Reset_c3t3 (undocumented)
|
||||
// -----------------------------------
|
||||
inline
|
||||
Named_function_parameters<bool, ::CGAL::internal_np::do_reset_c3t3_t, CGAL_NP_BASE>
|
||||
reset_c3t3()
|
||||
{
|
||||
typedef Named_function_parameters<bool, ::CGAL::internal_np::do_reset_c3t3_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, true);
|
||||
}
|
||||
|
||||
inline
|
||||
Named_function_parameters<bool, ::CGAL::internal_np::do_reset_c3t3_t, CGAL_NP_BASE>
|
||||
no_reset_c3t3()
|
||||
{
|
||||
typedef Named_function_parameters<bool, ::CGAL::internal_np::do_reset_c3t3_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, false);
|
||||
}
|
||||
|
||||
// -----------------------------------
|
||||
// Perturb
|
||||
// -----------------------------------
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Perturb_options, ::CGAL::internal_np::perturb_options_param_t, CGAL_NP_BASE>
|
||||
perturb(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using ::CGAL::parameters::choose_parameter;
|
||||
using ::CGAL::parameters::get_parameter;
|
||||
double time_limit = choose_parameter(get_parameter(np,::CGAL::internal_np::maximum_running_time),::CGAL::parameters::internal::undef_parameter);
|
||||
double sliver_bound = choose_parameter(get_parameter(np,::CGAL::internal_np::lower_sliver_bound),::CGAL::parameters::default_values_for_mesh_3::perturb_sliver_bound);
|
||||
|
||||
::CGAL::parameters::internal::Perturb_options options(true);
|
||||
|
||||
if ( ::CGAL::parameters::internal::undef_parameter != time_limit)
|
||||
options.set_time_limit(time_limit);
|
||||
|
||||
options.set_bound(sliver_bound);
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Perturb_options, ::CGAL::internal_np::perturb_options_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, options);
|
||||
}
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Perturb_options, ::CGAL::internal_np::perturb_options_param_t, CGAL_NP_BASE>
|
||||
perturb(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return perturb(::CGAL::internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
|
||||
inline Named_function_parameters<::CGAL::parameters::internal::Perturb_options, ::CGAL::internal_np::perturb_options_param_t, CGAL_NP_BASE>
|
||||
no_perturb()
|
||||
{
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Perturb_options, ::CGAL::internal_np::perturb_options_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param,::CGAL::parameters::internal::Perturb_options(false));
|
||||
}
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
CGAL_DEPRECATED
|
||||
inline
|
||||
Named_function_parameters<::CGAL::parameters::internal::Perturb_options, ::CGAL::internal_np::perturb_options_param_t, CGAL_NP_BASE>
|
||||
perturb(double time_limit_,
|
||||
double sliver_bound_=0)
|
||||
{
|
||||
return perturb(time_limit(time_limit_).
|
||||
sliver_bound(sliver_bound_));
|
||||
}
|
||||
#endif
|
||||
|
||||
// -----------------------------------
|
||||
// Exude
|
||||
// -----------------------------------
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Exude_options, ::CGAL::internal_np::exude_options_param_t, CGAL_NP_BASE>
|
||||
exude(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using ::CGAL::parameters::choose_parameter;
|
||||
using ::CGAL::parameters::get_parameter;
|
||||
double time_limit = choose_parameter(get_parameter(np,::CGAL::internal_np::maximum_running_time),::CGAL::parameters::internal::undef_parameter);
|
||||
double sliver_bound = choose_parameter(get_parameter(np,::CGAL::internal_np::lower_sliver_bound),::CGAL::parameters::default_values_for_mesh_3::perturb_sliver_bound);
|
||||
|
||||
::CGAL::parameters::internal::Exude_options options(true);
|
||||
|
||||
if ( ::CGAL::parameters::internal::undef_parameter != time_limit)
|
||||
options.set_time_limit(time_limit);
|
||||
options.set_bound(sliver_bound);
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Exude_options, ::CGAL::internal_np::exude_options_param_t, CGAL_NP_BASE> Param;
|
||||
|
||||
return CGAL_NP_BUILD(Param, options);
|
||||
}
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Exude_options, ::CGAL::internal_np::exude_options_param_t, CGAL_NP_BASE>
|
||||
exude(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return exude(::CGAL::internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
inline Named_function_parameters<::CGAL::parameters::internal::Exude_options, ::CGAL::internal_np::exude_options_param_t, CGAL_NP_BASE>
|
||||
no_exude()
|
||||
{
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Exude_options, ::CGAL::internal_np::exude_options_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param,::CGAL::parameters::internal::Exude_options(false));
|
||||
}
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
CGAL_DEPRECATED
|
||||
inline
|
||||
Named_function_parameters<::CGAL::parameters::internal::Exude_options, ::CGAL::internal_np::exude_options_param_t, CGAL_NP_BASE>
|
||||
exude(double time_limit_,
|
||||
double sliver_bound_ = 0)
|
||||
{
|
||||
return exude(time_limit(time_limit_).sliver_bound(sliver_bound_));
|
||||
}
|
||||
#endif
|
||||
|
||||
// -----------------------------------
|
||||
// Odt
|
||||
// -----------------------------------
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Odt_options, ::CGAL::internal_np::odt_options_param_t, CGAL_NP_BASE>
|
||||
odt(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using ::CGAL::parameters::choose_parameter;
|
||||
using ::CGAL::parameters::get_parameter;
|
||||
double time_limit = choose_parameter(get_parameter(np,::CGAL::internal_np::maximum_running_time),0);
|
||||
double freeze_bound = choose_parameter(get_parameter(np,::CGAL::internal_np::vertex_freeze_bound),::CGAL::parameters::default_values_for_mesh_3::odt_freeze_ratio);
|
||||
double convergence = choose_parameter(get_parameter(np,::CGAL::internal_np::convergence_ratio), ::CGAL::parameters::default_values_for_mesh_3::odt_convergence_ratio);
|
||||
int max_iteration_number = choose_parameter(get_parameter(np,::CGAL::internal_np::number_of_iterations), 0);
|
||||
::CGAL::parameters::internal::Odt_options options(true);
|
||||
|
||||
options.set_time_limit(time_limit);
|
||||
options.set_bound(freeze_bound);
|
||||
options.set_convergence(convergence);
|
||||
options.set_max_iteration_number(max_iteration_number);
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Odt_options, ::CGAL::internal_np::odt_options_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param,options);
|
||||
}
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Odt_options, ::CGAL::internal_np::odt_options_param_t, CGAL_NP_BASE>
|
||||
odt(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return odt(::CGAL::internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
inline Named_function_parameters<::CGAL::parameters::internal::Odt_options, ::CGAL::internal_np::odt_options_param_t, CGAL_NP_BASE>
|
||||
no_odt()
|
||||
{
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Odt_options, ::CGAL::internal_np::odt_options_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param,::CGAL::parameters::internal::Odt_options(false));
|
||||
}
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
CGAL_DEPRECATED
|
||||
inline
|
||||
Named_function_parameters<::CGAL::parameters::internal::Odt_options, ::CGAL::internal_np::odt_options_param_t, CGAL_NP_BASE>
|
||||
odt(double time_limit_,
|
||||
std::size_t max_iteration_number_ = 0,
|
||||
double convergence_ = 0.02,
|
||||
double freeze_bound_ = 0.01,
|
||||
bool do_freeze_ = true)
|
||||
{
|
||||
return odt(time_limit(time_limit_).
|
||||
max_iteration_number(max_iteration_number_).
|
||||
convergence(convergence_).
|
||||
freeze_bound(freeze_bound_).
|
||||
do_freeze(do_freeze_));
|
||||
}
|
||||
#endif
|
||||
|
||||
// -----------------------------------
|
||||
// Lloyd
|
||||
// -----------------------------------
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Lloyd_options, ::CGAL::internal_np::lloyd_options_param_t, CGAL_NP_BASE>
|
||||
lloyd(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using ::CGAL::parameters::choose_parameter;
|
||||
using ::CGAL::parameters::get_parameter;
|
||||
double time_limit = choose_parameter(get_parameter(np,::CGAL::internal_np::maximum_running_time),0);
|
||||
double freeze_bound = choose_parameter(get_parameter(np,::CGAL::internal_np::vertex_freeze_bound),::CGAL::parameters::default_values_for_mesh_3::lloyd_freeze_ratio);
|
||||
double convergence = choose_parameter(get_parameter(np,::CGAL::internal_np::convergence_ratio), ::CGAL::parameters::default_values_for_mesh_3::lloyd_convergence_ratio);
|
||||
int max_iteration_number = choose_parameter(get_parameter(np,::CGAL::internal_np::number_of_iterations), 0);
|
||||
::CGAL::parameters::internal::Lloyd_options options(true);
|
||||
|
||||
options.set_time_limit(time_limit);
|
||||
options.set_bound(freeze_bound);
|
||||
options.set_convergence(convergence);
|
||||
options.set_max_iteration_number(max_iteration_number);
|
||||
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Lloyd_options, ::CGAL::internal_np::lloyd_options_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, options);
|
||||
}
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Lloyd_options, ::CGAL::internal_np::lloyd_options_param_t, CGAL_NP_BASE>
|
||||
lloyd(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return lloyd(::CGAL::internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
inline Named_function_parameters<::CGAL::parameters::internal::Lloyd_options, ::CGAL::internal_np::lloyd_options_param_t, CGAL_NP_BASE>
|
||||
no_lloyd()
|
||||
{
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Lloyd_options, ::CGAL::internal_np::lloyd_options_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, ::CGAL::parameters::internal::Lloyd_options(false));
|
||||
}
|
||||
|
||||
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||
CGAL_DEPRECATED
|
||||
inline
|
||||
Named_function_parameters<::CGAL::parameters::internal::Lloyd_options, ::CGAL::internal_np::lloyd_options_param_t, CGAL_NP_BASE>
|
||||
lloyd(double time_limit_,
|
||||
std::size_t max_iteration_number_ = 0,
|
||||
double convergence_ = 0.02,
|
||||
double freeze_bound_ = 0.01,
|
||||
bool do_freeze_= true)
|
||||
{
|
||||
return lloyd(time_limit(time_limit_).
|
||||
max_iteration_number(max_iteration_number_).
|
||||
convergence(convergence_).
|
||||
freeze_bound(freeze_bound_).
|
||||
do_freeze(do_freeze_));
|
||||
}
|
||||
#endif
|
||||
|
||||
// -----------------------------------
|
||||
// Manifold options
|
||||
// -----------------------------------
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Manifold_options, ::CGAL::internal_np::manifold_param_t, CGAL_NP_BASE>
|
||||
manifold_options(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using ::CGAL::parameters::choose_parameter;
|
||||
using ::CGAL::parameters::get_parameter;
|
||||
int mesh_topology = choose_parameter(get_parameter(np, ::CGAL::internal_np::mesh_topology_number), -1);
|
||||
::CGAL::parameters::internal::Manifold_options options;
|
||||
options.mesh_topology = mesh_topology;
|
||||
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Manifold_options, ::CGAL::internal_np::manifold_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, options);
|
||||
}
|
||||
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Manifold_options, ::CGAL::internal_np::manifold_param_t, CGAL_NP_BASE>
|
||||
manifold_options(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return manifold_options(::CGAL::internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
inline Named_function_parameters<::CGAL::parameters::internal::Manifold_options, ::CGAL::internal_np::manifold_param_t, CGAL_NP_BASE>
|
||||
manifold()
|
||||
{
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Manifold_options, ::CGAL::internal_np::manifold_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, ::CGAL::parameters::internal::Manifold_options(::CGAL::parameters::internal::Manifold_options::MANIFOLD));
|
||||
}
|
||||
inline Named_function_parameters<::CGAL::parameters::internal::Manifold_options, ::CGAL::internal_np::manifold_param_t, CGAL_NP_BASE>
|
||||
manifold_with_boundary()
|
||||
{
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Manifold_options, ::CGAL::internal_np::manifold_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param,::CGAL::parameters::internal::Manifold_options(
|
||||
::CGAL::parameters::internal::Manifold_options::MANIFOLD_WITH_BOUNDARY));
|
||||
}
|
||||
inline Named_function_parameters<::CGAL::parameters::internal::Manifold_options, ::CGAL::internal_np::manifold_param_t, CGAL_NP_BASE>
|
||||
non_manifold()
|
||||
{
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Manifold_options, ::CGAL::internal_np::manifold_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, ::CGAL::parameters::internal::Manifold_options(::CGAL::parameters::internal::Manifold_options::NON_MANIFOLD));
|
||||
}
|
||||
|
||||
// -----------------------------------
|
||||
// Mesh options
|
||||
// -----------------------------------
|
||||
|
||||
// Undocumented parameter for refine_mesh_3 and make_mesh_3.
|
||||
// Allows to dump the mesh at given stage of the mesh generation
|
||||
// algorithm.
|
||||
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Mesh_3_options, ::CGAL::internal_np::mesh_param_t, CGAL_NP_BASE>
|
||||
mesh_3_options(const CGAL_NP_CLASS& np = parameters::default_values())
|
||||
{
|
||||
using ::CGAL::parameters::choose_parameter;
|
||||
using ::CGAL::parameters::get_parameter;
|
||||
::CGAL::parameters::internal::Mesh_3_options options;
|
||||
|
||||
options.dump_after_init_prefix=choose_parameter(get_parameter(np, ::CGAL::internal_np::dump_after_init_prefix_param), "");
|
||||
options.dump_after_refine_surface_prefix=choose_parameter(get_parameter(np, ::CGAL::internal_np::dump_after_refine_surface_prefix_param), "");
|
||||
options.dump_after_refine_prefix=choose_parameter(get_parameter(np, ::CGAL::internal_np::dump_after_refine_prefix_param), "");
|
||||
options.dump_after_glob_opt_prefix=choose_parameter(get_parameter(np, ::CGAL::internal_np::dump_after_glob_opt_prefix_param), "");
|
||||
options.dump_after_perturb_prefix=choose_parameter(get_parameter(np, ::CGAL::internal_np::dump_after_perturb_prefix_param), "");
|
||||
options.dump_after_exude_prefix=choose_parameter(get_parameter(np, ::CGAL::internal_np::dump_after_refine_surface_prefix_param), "");
|
||||
options.number_of_initial_points=choose_parameter(get_parameter(np, ::CGAL::internal_np::number_of_initial_points_param), -1);
|
||||
options.nonlinear_growth_of_balls = choose_parameter(get_parameter(np, ::CGAL::internal_np::nonlinear_growth_of_balls_param), false);
|
||||
options.maximal_number_of_vertices=choose_parameter(get_parameter(np, ::CGAL::internal_np::maximal_number_of_vertices_param), 0);
|
||||
options.pointer_to_error_code=choose_parameter(get_parameter(np, ::CGAL::internal_np::pointer_to_error_code_param), ((Mesh_error_code*)0));
|
||||
#ifndef CGAL_NO_ATOMIC
|
||||
options.pointer_to_stop_atomic_boolean=choose_parameter(get_parameter(np, ::CGAL::internal_np::pointer_to_stop_atomic_boolean_param),
|
||||
((::CGAL::parameters::internal::Mesh_3_options::Pointer_to_stop_atomic_boolean_t)0));
|
||||
#endif
|
||||
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Mesh_3_options, ::CGAL::internal_np::mesh_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, options);
|
||||
}
|
||||
|
||||
template<typename ... CGAL_NP_TEMPLATE_PARAMETERS_VARIADIC>
|
||||
Named_function_parameters<::CGAL::parameters::internal::Mesh_3_options, ::CGAL::internal_np::mesh_param_t, CGAL_NP_BASE>
|
||||
mesh_3_options(const CGAL_NP_CLASS& ... nps)
|
||||
{
|
||||
return mesh_3_options(::CGAL::internal_np::combine_named_parameters(nps...));
|
||||
}
|
||||
|
||||
// Undocumented parameter for refine_mesh_3 and make_mesh_3.
|
||||
// Default Mesh_3_options: dump at every stage of the mesh generation.
|
||||
inline
|
||||
Named_function_parameters<::CGAL::parameters::internal::Mesh_3_options, ::CGAL::internal_np::mesh_param_t, CGAL_NP_BASE>
|
||||
mesh_3_dump()
|
||||
{
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Mesh_3_options, ::CGAL::internal_np::mesh_param_t, CGAL_NP_BASE> Param;
|
||||
::CGAL::parameters::internal::Mesh_3_options options;
|
||||
|
||||
options.dump_after_init_prefix = "mesh_dump_after_init";
|
||||
options.dump_after_refine_surface_prefix = "mesh_dump_after_refine_surface";
|
||||
options.dump_after_refine_prefix = "mesh_dump_after_refine";
|
||||
options.dump_after_glob_opt_prefix = "mesh_dump_after_glob_opt";
|
||||
options.dump_after_perturb_prefix = "mesh_dump_after_perturb";
|
||||
options.dump_after_exude_prefix = "mesh_dump_after_exude";
|
||||
|
||||
return CGAL_NP_BUILD(Param, options);
|
||||
}
|
||||
|
||||
// -----------------------------------
|
||||
// Features_options
|
||||
// -----------------------------------
|
||||
inline Named_function_parameters<::CGAL::parameters::internal::Features_options, ::CGAL::internal_np::features_option_param_t, CGAL_NP_BASE>
|
||||
features() {
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Features_options, ::CGAL::internal_np::features_option_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, ::CGAL::parameters::internal::Features_options(true));
|
||||
}
|
||||
|
||||
inline Named_function_parameters<::CGAL::parameters::internal::Features_options, ::CGAL::internal_np::features_option_param_t, CGAL_NP_BASE>
|
||||
no_features() {
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Features_options, ::CGAL::internal_np::features_option_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param, ::CGAL::parameters::internal::Features_options(false)); }
|
||||
|
||||
template < typename MeshDomain >
|
||||
inline Named_function_parameters<::CGAL::parameters::internal::Features_options, ::CGAL::internal_np::features_option_param_t, CGAL_NP_BASE>
|
||||
features(const MeshDomain& /*domain*/)
|
||||
{
|
||||
typedef typename ::CGAL::parameters::internal::Domain_features_generator<MeshDomain,
|
||||
CGAL::internal::has_Has_features<MeshDomain>::value > Generator;
|
||||
|
||||
typedef Named_function_parameters<::CGAL::parameters::internal::Features_options, ::CGAL::internal_np::features_option_param_t, CGAL_NP_BASE> Param;
|
||||
return CGAL_NP_BUILD(Param,Generator()());
|
||||
}
|
||||
Loading…
Reference in New Issue