Blame view

stim/visualization/glnetwork.h 1.78 KB
a9073ab5   Pavel Govyadinov   glnetwork is unde...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
  #ifndef STIM_GLNETWORK_H
  #define STIM_GLNETWORK_H
  
  #include <GL/glew.h>
  #include <GL/glut.h>
  #include "network.h"
  #include <stim/math/vector.h>
  #include <list>
  #include <ANN/ANN.h>
  #include "fiber.h"
  
  
  namespace stim
  {
  template <typename T>
  class glnetwork : public virtual network<T>
  {
  private:
  	using stim::network<T>::E;
  
  	GLuint dList;
  
  	void init()
  	{
  		if(glIsList(dList))
  			glDeleteLists(dList, 1);
  		dList = glGenLists(1);
  		glListBase(dList);
  		glMatrixMode(GL_PROJECTION);
  		glLoadIdentity;
  		glMatrixMode(GL_MODELVIEW);
  		glLoadIdentity;
  	}
  
  	void
  	Create(GLenum mode)
  	{
  		glNewList(dList, GL_COMPILE);
  		glLineWidth(3.5);
  		for(int i = 0; i < E.size(); i++)
  		{
  			if(mode == GL_SELECT)
  			{
  //				glLineWidth(3.5);
  				glLoadName(i);
  			}
  			else{
  //				glLineWidth(1.0+1.0*i);
  			}
  			glColor3f(0.0, 1.0-0.05*i, i*0.05);
  			std::vector<stim::vec<T> > line = getEdgeCenterLine(i);
  			glBegin(GL_LINE_STRIP);
  			for(int j = 0; j < line.size(); j++)
  			{
  				glVertex3f(line[j][0],
  					line[j][1],
  					line[j][2]);
  			}
  			glEnd();
  		}
  		glEndList();
  //		CHECK_OPENGL_ERROR
  	}
  	
  public:
  	using stim::network<T>::sizeE;
  	using stim::network<T>::getEdgeCenterLine;
  	glnetwork()
  	{
  
  	}
  	
  	void
  	createFromSelf(GLenum mode = GL_RENDER)
  	{
  		init();
  		Create(mode);
  	}
  
  	void
  	Render()
  	{
  		glCallList(dList);
  //		CHECK_OPENGL_ERROR
  	}
  
  	void
  	RenderLine(std::vector<stim::vec<T> > l)
  	{
                  glColor3f(0.5, 1.0, 0.5);
                  glLineWidth(3.0);
                  glBegin(GL_LINE_STRIP);
                  for(int j = 0; j < l.size(); j++){
                          glVertex3f(
                                  l[j][0],
                                  l[j][1],
                                  l[j][2]
                                  );
                  }
                  glEnd();
  	}
  	
  };
  }
  
  #endif