198
226
glLineWidth(lineSize);
199
227
glBegin(GL_LINES);
228
glVertex3fv(origin.getValueArr());
201
230
if(arrowSize < sqrt(std::numeric_limits<float>::epsilon()) || !drawArrow)
203
glVertex3f(origin[0],origin[1],origin[2]);
204
232
glVertex3f(vector[0]+origin[0],vector[1]+origin[1],vector[2]+origin[2]);
207
234
//restore the old line size
208
235
glLineWidth(oldLineWidth);
216
glVertex3f(origin[0],origin[1],origin[2]);
219
glVertex3f(vector[0]+origin[0],vector[1]+origin[1],vector[2]+origin[2]);
221
//restore the old line size
222
glLineWidth(oldLineWidth);
239
glVertex3f(vector[0]+origin[0],vector[1]+origin[1],vector[2]+origin[2]);
241
//restore the old line size
242
glLineWidth(oldLineWidth);
319
338
//Now, having the needed coords, we can draw the cone
320
339
glBegin(GL_TRIANGLE_FAN);
321
glNormal3f(axis[0],axis[1],axis[2]);
340
glNormal3fv(axis.getValueArr());
322
341
glVertex3f(0,0,0);
323
342
for(unsigned int ui=0; ui<NUM_CONE_SEGMENTS; ui++)
328
glNormal3f(n[0],n[1],n[2]);
329
glVertex3f(ptArray[ui][0],ptArray[ui][1],ptArray[ui][2]);
347
glNormal3fv(n.getValueArr());
348
glVertex3fv(ptArray[ui].getValueArr());
407
426
glColor4f(r,g,b,a);
408
427
glBegin(GL_TRIANGLES);
409
glVertex3f((vertices[0])[0],
410
(vertices[0])[1], (vertices[0])[2]);
411
glVertex3f((vertices[1])[0],
412
(vertices[1])[1], (vertices[1])[2]);
413
glVertex3f((vertices[2])[0],
414
(vertices[2])[1], (vertices[2])[2]);
428
for(size_t ui=0;ui<3;ui++)
429
glVertex3fv(vertices[ui].getValueArr());
433
void DrawQuad::getBoundingBox(BoundCube &b) const
435
b.setBounds(vertices,4);
438
void DrawQuad::draw() const
443
void DrawQuad::setVertices(const Point3D *v)
445
for(size_t ui=0;ui<4;ui++)
449
Point3D DrawQuad::getOrigin() const
451
return Point3D::centroid(vertices,4);
454
void DrawQuad::recomputeParams(const vector<Point3D> &vecs,
455
const vector<float> &scalars, unsigned int mode)
459
case DRAW_QUAD_BIND_ORIGIN:
461
ASSERT(vecs.size() ==1 && scalars.size() ==0);
463
Point3D curOrig=getOrigin();
465
Point3D delta = vecs[0]-curOrig;
467
for(size_t ui=0;ui<4;ui++)
478
DrawTexturedQuad::DrawTexturedQuad() :textureData(0), textureId((unsigned int)-1)
482
DrawTexturedQuad::~DrawTexturedQuad()
485
delete[] textureData;
487
texPool->closeTexture(textureId);
490
void DrawTexturedQuad::draw() const
492
ASSERT(glIsTexture(textureId));
494
glEnable(GL_TEXTURE_2D);
495
glBindTexture(GL_TEXTURE_2D,textureId);
496
glPushAttrib(GL_CULL_FACE);
497
glDisable(GL_CULL_FACE);
500
glBindTexture(GL_TEXTURE_2D,textureId);
502
glColor4f(1.0f,1.0f,1.0f,1.0f);
503
const float COORD_SEQ_X[]={ 0,0,1,1};
504
const float COORD_SEQ_Y[]={ 0,1,1,0};
506
for(size_t ui=0;ui<4;ui++)
508
glTexCoord2f(COORD_SEQ_X[ui],COORD_SEQ_Y[ui]);
509
glVertex3fv(vertices[ui].getValueArr());
514
glDisable(GL_TEXTURE_2D);
518
// - resize destination for texture
519
// - set texture by pixels
521
void DrawTexturedQuad::resize(size_t numX, size_t numY,
522
unsigned int nChannels)
524
//reallocate texture as required
527
if( numX*numY*nChannels != nX*nY*channels)
529
delete[] textureData;
530
textureData = new unsigned char[numX*numY*nChannels];
534
textureData = new unsigned char[numX*numY*nChannels];
542
void DrawTexturedQuad::rebindTexture()
547
texPool->genTexID(textureId);
549
//Construc the texture
550
glBindTexture(GL_TEXTURE_2D,textureId);
551
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
552
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
553
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
554
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
555
ASSERT(channels == 3);
557
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,nX,nY,
558
0,GL_RGB,GL_UNSIGNED_BYTE,textureData);
564
void DrawTexturedQuad::setData(size_t x, size_t y, unsigned char *entry)
567
ASSERT(channels == 3);
569
for(size_t ui=0;ui<channels;ui++)
570
textureData[(y*nX + x)*channels + ui] = entry[ui];
1404
1554
b.setInvalid();
1557
DrawAnimatedOverlay::DrawAnimatedOverlay()
1560
delayBeforeShow=0.0f;
1565
DrawAnimatedOverlay::~DrawAnimatedOverlay()
1569
void DrawAnimatedOverlay::resetTime()
1571
gettimeofday(&animStartTime,NULL);
1574
bool DrawAnimatedOverlay::setTexture(const vector<string> &texFiles,
1577
repeatInterval=replayTime;
1579
textureOK=texPool->openTexture3D(texFiles, textureId);
1583
void DrawAnimatedOverlay::setSize(float newLen)
1589
void DrawAnimatedOverlay::draw() const
1595
float alphaVal=1.0f;
1598
gettimeofday(&t,NULL);
1599
float animDeltaTime=(float)(t.tv_sec - animStartTime.tv_sec) +
1600
(t.tv_usec-animStartTime.tv_usec)/1.0e6;
1602
//Skip if we wish to show later
1603
if(animDeltaTime < delayBeforeShow)
1607
if(fadeIn > 0.0f && (delayBeforeShow + fadeIn > animDeltaTime) )
1608
alphaVal= (animDeltaTime - delayBeforeShow )/(fadeIn) ;
1610
texCoordZ=fmod(animDeltaTime,repeatInterval);
1611
texCoordZ/=repeatInterval;
1613
ASSERT(glIsTexture(textureId));
1615
glMatrixMode(GL_PROJECTION);
1618
gluOrtho2D(0, winX, winY, 0);
1620
glMatrixMode(GL_MODELVIEW);
1624
glEnable(GL_TEXTURE_3D);
1625
glBindTexture(GL_TEXTURE_3D,textureId);
1626
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MULT);
1628
// Draw overlay quad
1629
glColor4f(1.0f,1.0f,1.0f,alphaVal);
1631
glTexCoord3f(0.0f,0.0f,texCoordZ);
1632
glVertex3f(position[0]-length/2.0,position[1]-length/2.0,0.0);
1633
glTexCoord3f(0.0f,1.0f,texCoordZ);
1634
glVertex3f(position[0]-length/2.0,position[1]+length/2.0,0.0);
1635
glTexCoord3f(1.0f,1.0f,texCoordZ);
1636
glVertex3f(position[0]+length/2.0,position[1]+length/2.0,0.0);
1637
glTexCoord3f(1.0f,0.0f,texCoordZ);
1638
glVertex3f(position[0]+length/2.0,position[1]-length/2.0,0.0);
1641
glDisable(GL_TEXTURE_3D);
1643
glPopMatrix(); //Pop modelview matrix
1645
glMatrixMode(GL_PROJECTION);
1648
glMatrixMode(GL_MODELVIEW);
1651
void DrawAnimatedOverlay::getBoundingBox(BoundCube &b) const
1408
1656
DrawColourBarOverlay::DrawColourBarOverlay()