43
45
(time_limit_, *, 0 )
44
46
(sliver_bound_, *, parameters::default_values::perturb_sliver_bound )
47
(sliver_criterion_, *,
48
parameters::default_values::default_sliver_criterion(c3t3,sliver_bound_))
49
(perturbation_vector_, *,
50
default_perturbation_vector(c3t3,domain,sliver_criterion_))
48
return perturb_mesh_3_impl(c3t3, domain, time_limit_, sliver_bound_);
54
CGAL_USE(sliver_bound_);
55
return perturb_mesh_3_impl(c3t3, domain, time_limit_, sliver_criterion_,
56
perturbation_vector_);
53
template <typename C3T3, typename MeshDomain>
54
Mesh_optimization_return_code
55
perturb_mesh_3_impl(C3T3& c3t3,
56
const MeshDomain& domain,
57
const double time_limit,
58
const double sliver_bound)
60
template <typename C3T3,
62
typename SliverCriterion>
63
std::vector<typename Mesh_3::Sliver_perturber<C3T3,MeshDomain,SliverCriterion>::Perturbation*>
64
default_perturbation_vector(const C3T3&,
66
const SliverCriterion&)
60
68
typedef MeshDomain Md;
61
typedef typename C3T3::Triangulation::Geom_traits Gt;
62
typedef Mesh_3::Min_dihedral_angle_criterion<Gt> Sc;
63
//typedef Mesh_3::Radius_radio_criterion<Gt> Sc;
69
typedef SliverCriterion Sc;
65
70
typedef Mesh_3::Sliver_perturber<C3T3,Md,Sc> Perturber;
71
typedef typename Perturber::Perturbation Perturbation;
66
73
typedef Mesh_3::Sq_radius_perturbation<C3T3,Md,Sc> Sq_radius;
67
74
typedef Mesh_3::Volume_perturbation<C3T3,Md,Sc> Volume;
68
75
typedef Mesh_3::Dihedral_angle_perturbation<C3T3,Md,Sc> Dihedral_angle;
69
76
typedef Mesh_3::Li_random_perturbation<C3T3,Md,Sc> Li_random;
78
std::vector<Perturbation*> perturbation_vect;
79
perturbation_vect.push_back(new Sq_radius(40,0.05));
80
perturbation_vect.push_back(new Volume(40,0.05));
81
perturbation_vect.push_back(new Dihedral_angle(40,0.05));
82
perturbation_vect.push_back(new Li_random(100,0.15));
84
return perturbation_vect;
88
template <typename C3T3,
90
typename SliverCriterion,
91
typename PPerturbationVector>
92
Mesh_optimization_return_code
93
perturb_mesh_3_impl(C3T3& c3t3,
94
const MeshDomain& domain,
95
const double time_limit,
96
const SliverCriterion& sliver_criterion,
97
const PPerturbationVector& perturbation_vector)
99
typedef MeshDomain Md;
100
typedef SliverCriterion Sc;
102
typedef Mesh_3::Sliver_perturber<C3T3,Md,Sc> Perturber;
71
104
// Build perturber
72
Perturber perturber(c3t3,domain);
105
Perturber perturber(c3t3, domain, sliver_criterion);
108
for(std::size_t i = 0; i < perturbation_vector.size(); ++i)
109
perturber.add_perturbation( perturbation_vector[i] );
74
perturber.add_perturbation(new Sq_radius(40,0.05));
75
perturber.add_perturbation(new Volume(40,0.05));
76
perturber.add_perturbation(new Dihedral_angle(40,0.05));
77
perturber.add_perturbation(new Li_random(100,0.15));
80
112
perturber.set_time_limit(time_limit);
82
114
// Launch perturber
83
if ( sliver_bound != 0 )
84
return perturber(sliver_bound);