Subversion Repositories gelsvn

Rev

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

Rev Author Line No. Line
386 jab 1
/*
2
 *  harmonics.h
3
 *  GEL
4
 *
5
 *  Created by J. Andreas Bærentzen on 01/09/08.
6
 *  Copyright 2008 __MyCompanyName__. All rights reserved.
7
 *
8
 */
9
 
399 jab 10
#ifndef __MESHEDIT_HARMONICS_H__
11
#define __MESHEDIT_HARMONICS_H__
12
 
391 jab 13
#include <CGLA/Vec3d.h>
14
#include <HMesh/Manifold.h>
596 jab 15
#include <HMesh/AttributeVector.h>
399 jab 16
#include <LinAlg/Matrix.h>
17
#include <LinAlg/Vector.h>
596 jab 18
#include <GLGraphics/ManifoldRenderer.h>
19
#include <GLGraphics/Console.h>
386 jab 20
 
596 jab 21
#define USE_SPARSE_MATRIX 0
403 jab 22
 
391 jab 23
class Harmonics
24
{
25
	HMesh::Manifold& mani;
596 jab 26
    HMesh::VertexAttributeVector<int> vtouched;
391 jab 27
 
28
	int maximum_eigenvalue;
614 jab 29
 
30
    bool is_initialized;
391 jab 31
 
32
	std::vector<CGLA::Vec3d> proj;
33
 
34
	LinAlg::CMatrix Q;
457 jab 35
	LinAlg::CVector qnorm;
391 jab 36
	LinAlg::CVector V;
457 jab 37
	LinAlg::CVector S;
614 jab 38
 
391 jab 39
	std::vector<float> max_eig_values;
614 jab 40
 
391 jab 41
	void make_laplace_operator();
457 jab 42
	void make_laplace_operator_sparse();
614 jab 43
 
391 jab 44
public:
45
 
614 jab 46
	/// Initial analysis of harmonics
641 janba 47
	Harmonics(HMesh::Manifold& mani);
391 jab 48
 
49
	/// Add a frequency to mesh reconstruction
50
	void add_frequency(int f, float scale = 1.0f);
51
 
52
	/// Reset the shape to use 0 eigenvalues
53
	void reset_shape();
54
 
55
	/// Do a partial reconstruct with an interval of eigenvalues
56
	void partial_reconstruct(int E0, int E1, float scale=1.0f);
57
 
641 janba 58
    double compute_adf(HMesh::VertexAttributeVector<double>& adf, double t);
391 jab 59
 
399 jab 60
};
61
 
403 jab 62
 
596 jab 63
class HarmonicsRenderer: public GLGraphics::ManifoldRenderer
614 jab 64
{
641 janba 65
    static GLuint prog_P0;
66
    static GLGraphics::Console::variable<float> display_harmonics_time;
67
    static GLGraphics::Console::variable<int> display_harmonics_diffuse;
68
    static GLGraphics::Console::variable<int> display_harmonics_highlight;
614 jab 69
 
641 janba 70
    HMesh::Manifold* m;
71
    Harmonics* h;
72
 
73
	/// Draw with eigenvalues
74
	void draw_adf();
75
 
614 jab 76
public:
641 janba 77
    HarmonicsRenderer(HMesh::Manifold& _m, Harmonics& _h, GLGraphics::Console& cs);
78
 
79
	/// Parse keystrokes that would influence the interactive display
80
	void parse_key(unsigned char key);
81
 
614 jab 82
};
403 jab 83
 
84
 
399 jab 85
#endif
86