Subversion Repositories gelsvn

Rev

Rev 362 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
448 jab 1
#ifndef __HMESH_MESH_OPTIMIZATION_H
2
#define __HMESH_MESH_OPTIMIZATION_H
149 jab 3
 
4
#include "HMesh/Manifold.h"
5
 
150 jab 6
namespace HMesh
149 jab 7
{
362 jab 8
	/** This class represents the energy of an edge. It is used in optimization 
9
	schemes where edges are swapped (aka flipped). */
149 jab 10
  class EnergyFun
11
  {
12
  public:
13
    virtual double delta_energy(HMesh::HalfEdgeIter) const = 0;
14
    virtual double energy(HMesh::HalfEdgeIter) const {return 0;}
15
  };
16
 
362 jab 17
	/// Optimize in a greedy fashion.
149 jab 18
  void priority_queue_optimization(HMesh::Manifold& m, const EnergyFun& efun);
362 jab 19
	/// Optimize with simulated annealing. Avoids getting trapped in local minima
149 jab 20
  void simulated_annealing_optimization(HMesh::Manifold& m, 
21
					const EnergyFun& efun,
22
					int max_iter=10000);
23
 
362 jab 24
	/** Minimize the angle between adjacent triangles. Almost the same as mean curvature 
25
		minimization */
149 jab 26
	void minimize_dihedral_angle(HMesh::Manifold& m,
27
															 int max_iter=10000,
28
															 bool anneal=false,
29
															 bool alpha=false,
30
															 double gamma=4.0);
362 jab 31
 
32
	/** Minimizes mean curvature. This is really the same as dihedral angle optimization
33
		except that we weight by edge length */
149 jab 34
  void minimize_curvature(HMesh::Manifold& m, bool anneal=false);
362 jab 35
 
36
  /// Minimizes gaussian curvature. Probably less useful than mean curvature.
149 jab 37
  void minimize_gauss_curvature(HMesh::Manifold& m, bool anneal=false);
362 jab 38
 
39
  /// Maximizes the minimum angle of triangles. Makes the mesh more Delaunay.
149 jab 40
  void maximize_min_angle(HMesh::Manifold& m, float thresh, bool anneal=false);
362 jab 41
 
42
  /// Tries to achieve valence 6 internally and 4 along edges.
149 jab 43
  void optimize_valency(HMesh::Manifold& m, bool anneal=false);
362 jab 44
 
45
  /// Make radom flips. Useful for generating synthetic test cases.
149 jab 46
  void randomize_mesh(HMesh::Manifold& m, int max_iter);
47
 
48
}
49
 
50
 
51
#endif