Commit 1bdf7c1ed2283171b8f2bcd3426e66fc33b7aa01

Authored by Pavel Govyadinov
1 parent a9073ab5

extended the glnetwork.h class to use cylinders and render a cylinder network as…

… well as a line network, note that the includes need to be fixed once the network.h class is complete
Showing 1 changed file with 75 additions and 5 deletions   Show diff stats
stim/visualization/glnetwork.h
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 #include <GL/glew.h> 4 #include <GL/glew.h>
5 #include <GL/glut.h> 5 #include <GL/glut.h>
6 #include "network.h" 6 #include "network.h"
  7 +#include <stim/visualization/cylinder.h>
7 #include <stim/math/vector.h> 8 #include <stim/math/vector.h>
8 #include <list> 9 #include <list>
9 #include <ANN/ANN.h> 10 #include <ANN/ANN.h>
@@ -18,23 +19,39 @@ class glnetwork : public virtual network&lt;T&gt; @@ -18,23 +19,39 @@ class glnetwork : public virtual network&lt;T&gt;
18 private: 19 private:
19 using stim::network<T>::E; 20 using stim::network<T>::E;
20 21
21 - GLuint dList; 22 + GLuint dList; ///displaylist for the lines.
  23 + GLuint cList; ///displaylist for the cylinders.
22 24
23 void init() 25 void init()
24 { 26 {
  27 + ///clear lists if there is data in them.
  28 + ///adding points may create errors or uncessary duplicate points.
25 if(glIsList(dList)) 29 if(glIsList(dList))
26 glDeleteLists(dList, 1); 30 glDeleteLists(dList, 1);
27 - dList = glGenLists(1); 31 + if(glIsList(cList))
  32 + glDeleteLists(cList, 1);
  33 + dList = glGenLists(1); ///create the lists
  34 + cList = glGenLists(1);
  35 +
  36 + ///set up the Line list.
28 glListBase(dList); 37 glListBase(dList);
29 glMatrixMode(GL_PROJECTION); 38 glMatrixMode(GL_PROJECTION);
30 glLoadIdentity; 39 glLoadIdentity;
31 glMatrixMode(GL_MODELVIEW); 40 glMatrixMode(GL_MODELVIEW);
32 glLoadIdentity; 41 glLoadIdentity;
  42 +
  43 + ///set up the cylinder List.
  44 + glListBase(cList);
  45 + glMatrixMode(GL_PROJECTION);
  46 + glLoadIdentity;
  47 + glMatrixMode(GL_MODELVIEW);
  48 + glLoadIdentity;
33 } 49 }
34 50
35 void 51 void
36 - Create(GLenum mode) 52 + Create(GLenum mode, int sides = 8)
37 { 53 {
  54 + glListBase(dList);
38 glNewList(dList, GL_COMPILE); 55 glNewList(dList, GL_COMPILE);
39 glLineWidth(3.5); 56 glLineWidth(3.5);
40 for(int i = 0; i < E.size(); i++) 57 for(int i = 0; i < E.size(); i++)
@@ -59,22 +76,68 @@ private: @@ -59,22 +76,68 @@ private:
59 glEnd(); 76 glEnd();
60 } 77 }
61 glEndList(); 78 glEndList();
  79 +
  80 + glListBase(cList);
  81 + glNewList(cList, GL_COMPILE);
  82 +
  83 + for(int i = 0; i < E.size(); i++)
  84 + {
  85 + if(mode == GL_SELECT)
  86 + {
  87 + glLoadName(i);
  88 + }
  89 + glColor3f(1.0, 1.0, 0.0);
  90 + std::vector<stim::vec<T> > line = getEdgeCenterLine(i);
  91 + std::vector<stim::vec<T> > linemag = getEdgeCenterLineMag(i);
  92 + stim::cylinder<T> cyl(line, linemag);
  93 + std::vector<std::vector<stim::vec<T > > > p = cyl.getPoints(sides);
  94 + for(int i = 0; i < p.size()-1; i++)
  95 + {
  96 + for(int j = 0; j < p[0].size()-1; j++)
  97 + {
  98 + glColor4f(1.0, 1.0, 0.0, 0.5);
  99 + glEnable(GL_BLEND);
  100 + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  101 + glBegin(GL_QUADS);
  102 + glVertex3f(p[i][j][0], p[i][j][1], p[i][j][2]);
  103 + glVertex3f(p[i][j+1][0], p[i][j+1][1], p[i][j+1][2]);
  104 + glVertex3f(p[i+1][j+1][0], p[i+1][j+1][1], p[i+1][j+1][2] );
  105 + glVertex3f(p[i+1][j][0], p[i+1][j][1], p[i+1][j][2]);
  106 + glEnd();
  107 + glDisable(GL_BLEND);
  108 +
  109 + glColor4f(1.0, 0.0, 1.0, 1.0);
  110 + glBegin(GL_LINES);
  111 + glVertex3f(p[i][j][0], p[i][j][1], p[i][j][2]);
  112 + glVertex3f(p[i][j+1][0], p[i][j+1][1], p[i][j+1][2]);
  113 + glVertex3f(p[i+1][j][0], p[i+1][j][1], p[i+1][j][2]);
  114 + glVertex3f(p[i+1][j+1][0], p[i+1][j+1][1], p[i+1][j+1][2] );
  115 + glEnd();
  116 + }
  117 +
  118 + }
  119 +
  120 +
  121 +
  122 + }
  123 + glEndList();
62 // CHECK_OPENGL_ERROR 124 // CHECK_OPENGL_ERROR
63 } 125 }
64 126
65 public: 127 public:
66 using stim::network<T>::sizeE; 128 using stim::network<T>::sizeE;
67 using stim::network<T>::getEdgeCenterLine; 129 using stim::network<T>::getEdgeCenterLine;
  130 + using stim::network<T>::getEdgeCenterLineMag;
68 glnetwork() 131 glnetwork()
69 { 132 {
70 133
71 } 134 }
72 135
73 void 136 void
74 - createFromSelf(GLenum mode = GL_RENDER) 137 + createFromSelf(GLenum mode = GL_RENDER, int sides = 8)
75 { 138 {
76 init(); 139 init();
77 - Create(mode); 140 + Create(mode, sides);
78 } 141 }
79 142
80 void 143 void
@@ -85,6 +148,13 @@ public: @@ -85,6 +148,13 @@ public:
85 } 148 }
86 149
87 void 150 void
  151 + RenderCylinders()
  152 + {
  153 + glCallList(cList);
  154 +// CHECK_OPENGL_ERROR
  155 + }
  156 +
  157 + void
88 RenderLine(std::vector<stim::vec<T> > l) 158 RenderLine(std::vector<stim::vec<T> > l)
89 { 159 {
90 glColor3f(0.5, 1.0, 0.5); 160 glColor3f(0.5, 1.0, 0.5);