Commit b3a386414300fd29dd08e3e76d0bd5fe48805eee

Authored by David Mayerich
1 parent 649a5e34

added the ability to quickly render networks in OpenGL, renamed the bounding box class

stim/biomodels/network.h
@@ -301,6 +301,11 @@ public: @@ -301,6 +301,11 @@ public:
301 return R; //return the resulting network 301 return R; //return the resulting network
302 } 302 }
303 303
  304 + /// Returns the number of magnitude values stored in each edge. This should be uniform across the network.
  305 + unsigned nmags(){
  306 + return E[0].nmags();
  307 + }
  308 +
304 309
305 }; //end stim::network class 310 }; //end stim::network class
306 }; //end stim namespace 311 }; //end stim namespace
stim/visualization/aabb.h renamed to stim/visualization/aaboundingbox.h
@@ -6,14 +6,14 @@ namespace stim{ @@ -6,14 +6,14 @@ namespace stim{
6 6
7 /// This class describes a structure for an axis-aligned bounding box 7 /// This class describes a structure for an axis-aligned bounding box
8 template< typename T > 8 template< typename T >
9 -class aabb{ 9 +class aaboundingbox{
10 10
11 public: 11 public:
12 bool set; //has the bounding box been set to include any points? 12 bool set; //has the bounding box been set to include any points?
13 stim::vec<T> A; //minimum point in the bounding box 13 stim::vec<T> A; //minimum point in the bounding box
14 stim::vec<T> B; //maximum point in the bounding box 14 stim::vec<T> B; //maximum point in the bounding box
15 15
16 - aabb(){ //constructor generates an empty bounding box 16 + aaboundingbox(){ //constructor generates an empty bounding box
17 set = false; 17 set = false;
18 } 18 }
19 19
stim/visualization/cylinder.h
@@ -187,6 +187,11 @@ class cylinder @@ -187,6 +187,11 @@ class cylinder
187 mags[p][m] = val; 187 mags[p][m] = val;
188 } 188 }
189 189
  190 + /// Returns the number of magnitude values at each point
  191 + unsigned nmags(){
  192 + return mags[0].size();
  193 + }
  194 +
190 195
191 196
192 ///returns the position of the point with a given pvalue and theta on the surface 197 ///returns the position of the point with a given pvalue and theta on the surface
stim/visualization/gl_aabb.h renamed to stim/visualization/gl_aaboundingbox.h
1 #ifndef STIM_GL_AABB 1 #ifndef STIM_GL_AABB
2 #define STIM_GL_AABB 2 #define STIM_GL_AABB
3 3
4 -#include "aabb.h"  
5 -#include "GL/gl.h" 4 +#include <stim/visualization/aaboundingbox.h>
  5 +#include <GL/gl.h>
6 6
7 namespace stim{ 7 namespace stim{
8 8
9 template <typename T> 9 template <typename T>
10 -class gl_aabb : public aabb<T>{ 10 +class gl_aaboundingbox : public aaboundingbox<T>{
11 11
12 public: 12 public:
13 13
14 //default constructor 14 //default constructor
15 - gl_aabb() : stim::aabb<T>(){} 15 + gl_aaboundingbox() : stim::aaboundingbox<T>(){}
16 16
17 //constructor takes an AABB 17 //constructor takes an AABB
18 - gl_aabb(stim::aabb<T> b) : stim::aabb<T>(b){} 18 + gl_aaboundingbox(stim::aaboundingbox<T> b) : stim::aaboundingbox<T>(b){}
19 19
20 20
21 /// Specifies vertices of the bounding box using CW winding. Use GL_LINE_LOOP for wireframe or GL_QUADS for a solid. 21 /// Specifies vertices of the bounding box using CW winding. Use GL_LINE_LOOP for wireframe or GL_QUADS for a solid.
stim/visualization/gl_network.h
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 #define STIM_GL_NETWORK 2 #define STIM_GL_NETWORK
3 3
4 #include <stim/biomodels/network.h> 4 #include <stim/biomodels/network.h>
5 -#include "aabb.h" 5 +#include <stim/visualization/aaboundingbox.h>
6 6
7 namespace stim{ 7 namespace stim{
8 8
@@ -29,9 +29,9 @@ public: @@ -29,9 +29,9 @@ public:
29 29
30 /// Fills the parameters with the minimum and maximum spatial positions in the network, 30 /// Fills the parameters with the minimum and maximum spatial positions in the network,
31 /// specifying a bounding box for the network geometry 31 /// specifying a bounding box for the network geometry
32 - aabb<T> boundingbox(){ 32 + aaboundingbox<T> boundingbox(){
33 33
34 - aabb<T> bb; //create a bounding box 34 + aaboundingbox<T> bb; //create a bounding box
35 35
36 //loop through every edge 36 //loop through every edge
37 for(unsigned e = 0; e < E.size(); e++){ 37 for(unsigned e = 0; e < E.size(); e++){
@@ -44,16 +44,18 @@ public: @@ -44,16 +44,18 @@ public:
44 } 44 }
45 45
46 /// Render the network centerline as a series of line strips. 46 /// Render the network centerline as a series of line strips.
47 - void glCenterline(){ 47 +
  48 + /// @param m specifies the magnitude value used as the vertex weight (radius, error, etc.)
  49 + void glCenterline(unsigned m = 0){
48 50
49 if(!glIsList(dlist)){ //if dlist isn't a display list, create it 51 if(!glIsList(dlist)){ //if dlist isn't a display list, create it
50 dlist = glGenLists(1); //generate a display list 52 dlist = glGenLists(1); //generate a display list
51 glNewList(dlist, GL_COMPILE); //start a new display list 53 glNewList(dlist, GL_COMPILE); //start a new display list
52 for(unsigned e = 0; e < E.size(); e++){ //for each edge in the network 54 for(unsigned e = 0; e < E.size(); e++){ //for each edge in the network
53 glBegin(GL_LINE_STRIP); 55 glBegin(GL_LINE_STRIP);
54 - for(unsigned p = 0; p < E[e].size(); p++){ //for each point on that edge  
55 - glVertex3f(E[e][p][0], E[e][p][1], E[e][p][2]);  
56 - glTexCoord1f(E[e].ri(p)); 56 + for(unsigned p = 0; p < E[e].size(); p++){ //for each point on that edge
  57 + glVertex3f(E[e][p][0], E[e][p][1], E[e][p][2]); //set the vertex position based on the current point
  58 + glTexCoord1f(E[e].ri(p, m)); //set the texture coordinate based on the specified magnitude index
57 } 59 }
58 glEnd(); 60 glEnd();
59 } 61 }