Commit 1657f19c05c1e5d59e1bc2d415ded0bd93e3ae22

Authored by Pavel Govyadinov
1 parent 518258d3

fixed selective visualization that only shows the fibers near the last line clik…

…ed. Should make segmentation much easier, changes to the glObj class
Showing 1 changed file with 51 additions and 11 deletions   Show diff stats
stim/visualization/glObj.h
... ... @@ -43,11 +43,8 @@ private:
43 43 }
44 44  
45 45 void
46   - Create(GLenum mode, bool blend = false, float opacity = 1.0, stim::vec3<float> point = stim::vec<float>(-10000.0, -10000.0, -10000.0))
  46 + Create(GLenum mode, bool blend = false, float opacity = 1.0)
47 47 {
48   -// GLuint selectBuf[2048];
49   -// GLint hits;
50   -// glSelectBuffer(2048, selectBuf);
51 48  
52 49 if(blend)
53 50 {
... ... @@ -57,7 +54,6 @@ private:
57 54 int len = (int) stim::obj<T>::numL();
58 55 std::vector< stim::vec<float> > line;
59 56 glNewList(dList, GL_COMPILE);
60   - // glColor3f(0.0, 1.0, 0.0);
61 57 glLineWidth(3.5);
62 58 for(int i = 0; i < len; i++){
63 59 line = stim::obj<T>::getL_V(i);
... ... @@ -66,14 +62,13 @@ private:
66 62 glLoadName(i);
67 63 }
68 64 if(blend == false)
  65 + {
69 66 glColor3f(0.0, 1.0, 0.05);
70   -
71   - else if(blend && point[0] < -9999.9)
  67 + }
  68 + else
72 69 {
73 70 glColor4f(50.0/256.0,205.0/256.0, 50.0/256.0, opacity); ///Dark Green.
74   - } else {
75   -// ???????
76   - }
  71 + }
77 72 //glColor3ub(rand()%255, rand()%255, rand()%255);
78 73 glBegin(GL_LINE_STRIP);
79 74 for(int j = 0; j < line.size(); j++){
... ... @@ -91,6 +86,51 @@ private:
91 86 CHECK_OPENGL_ERROR
92 87 }
93 88  
  89 + ///Method for drawing selectively opaque things.
  90 + void
  91 + Create(GLenum mode, stim::vec3<float> point)
  92 + {
  93 + float l, opacity;
  94 + glEnable(GL_BLEND);
  95 + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  96 + int len = (int) stim::obj<T>::numL();
  97 + std::vector< stim::vec<float> > line;
  98 + glNewList(dList, GL_COMPILE);
  99 + glLineWidth(3.5);
  100 + for(int i = 0; i < len; i++){
  101 + line = stim::obj<T>::getL_V(i);
  102 + if(mode == GL_SELECT)
  103 + {
  104 + glLoadName(i);
  105 + }
  106 +
  107 + glBegin(GL_LINE_STRIP);
  108 + for(int j = 0; j < line.size(); j++){
  109 +
  110 + l = sqrt(pow((point[0] - line[j][0]),2) + pow((point[1] - line[j][1]),2) + pow((point[2] - line[j][2]),2));
  111 + if(l < 10)
  112 + {
  113 + opacity = 1.0;
  114 + } else if( l > 40) {
  115 + opacity = 0.0;
  116 + } else {
  117 + opacity = l*(-1.0/30.0) + 4.0/3.0;
  118 + }
  119 +
  120 + glColor4f(50.0/256.0,205.0/256.0, 50.0/256.0, opacity); ///Dark Green.
  121 + glVertex3f(
  122 + line[j][0],
  123 + line[j][1],
  124 + line[j][2]
  125 + );
  126 + }
  127 + glEnd();
  128 + }
  129 + glDisable(GL_BLEND);
  130 + glEndList();
  131 + CHECK_OPENGL_ERROR
  132 + }
  133 +
94 134 public:
95 135 glObj()
96 136 {
... ... @@ -111,7 +151,7 @@ public:
111 151 {
112 152 // glPopMatrix();
113 153 init();
114   - Create(mode, true, 1.0, point);
  154 + Create(mode, point);
115 155 // glPushMatrix();
116 156 }
117 157  
... ...