Commit a9073ab59bbdfc104171dd7f6f3dae4675d941f0

Authored by Pavel Govyadinov
1 parent 5b6c317a

glnetwork is under stim/visualization/

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