~ubuntu-branches/debian/stretch/cgal/stretch

« back to all changes in this revision

Viewing changes to include/CGAL/perturb_mesh_3.h

  • Committer: Package Import Robot
  • Author(s): Joachim Reichel
  • Date: 2014-04-05 10:56:43 UTC
  • mfrom: (1.2.4)
  • Revision ID: package-import@ubuntu.com-20140405105643-jgnrpu2thtx23zfs
Tags: 4.4-1
* New upstream release.
* Remove patches do-not-link-example-with-qt4-support-library.patch and
  fix_jet_fitting_3.patch (applied upstream).

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
#include <CGAL/Mesh_3/Sliver_perturber.h>
32
32
#include <CGAL/Mesh_optimization_return_code.h>
33
33
#include <CGAL/Mesh_3/parameters_defaults.h>
 
34
#include <vector>
 
35
#include <CGAL/use.h>
34
36
 
35
37
namespace CGAL {
36
38
 
42
44
  (optional
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_))
45
51
  )
46
52
)
47
53
{
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_);
49
57
}
50
58
 
51
59
 
52
 
 
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, 
 
61
          typename MeshDomain, 
 
62
          typename SliverCriterion>
 
63
std::vector<typename Mesh_3::Sliver_perturber<C3T3,MeshDomain,SliverCriterion>::Perturbation*>
 
64
default_perturbation_vector(const C3T3&,
 
65
                            const MeshDomain&,
 
66
                            const SliverCriterion&)
59
67
{
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;
64
 
  
 
69
  typedef SliverCriterion Sc;
65
70
  typedef Mesh_3::Sliver_perturber<C3T3,Md,Sc>            Perturber;
 
71
  typedef typename Perturber::Perturbation                Perturbation;
 
72
 
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;
70
77
  
 
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));
 
83
 
 
84
  return perturbation_vect;
 
85
}
 
86
 
 
87
 
 
88
template <typename C3T3, 
 
89
          typename MeshDomain, 
 
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)
 
98
{
 
99
  typedef MeshDomain Md;
 
100
  typedef SliverCriterion Sc;
 
101
  
 
102
  typedef Mesh_3::Sliver_perturber<C3T3,Md,Sc> Perturber;
 
103
  
71
104
  // Build perturber
72
 
  Perturber perturber(c3t3,domain);
 
105
  Perturber perturber(c3t3, domain, sliver_criterion);
 
106
 
 
107
  // Add perturbations
 
108
  for(std::size_t i = 0; i < perturbation_vector.size(); ++i)
 
109
    perturber.add_perturbation( perturbation_vector[i] );
73
110
  
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));
78
 
 
79
111
  // Set max time
80
112
  perturber.set_time_limit(time_limit);
81
 
  
 
113
 
82
114
  // Launch perturber
83
 
  if ( sliver_bound != 0 )
84
 
    return perturber(sliver_bound);
85
 
  else
86
 
    return perturber();
 
115
  return perturber();
87
116
}
88
117
  
89
118