9 #include <QtCore/QtPlugin>
10 #include <QtOpenGL/QtOpenGL>
16 #include <OpenGL/gl.h>
17 #include <GLUT/glut.h>
26 maximumBearings(maximumBearings)
59 glNewList(
wallDist[i], GL_COMPILE );
91 glNewList(
wallDist[i], GL_COMPILE );
111 fprintf(stderr,
"Cannot Set bearing is out of range\n");
115 printf(
"deleteing lists new Size is: %i\n",(
int)data.size());
148 for(
int j=0;j<end;j++){
150 if(i < 0 || i > 6399){
151 fprintf(stderr,
"Error in glwidet, please check value make no sense, prevent crash, not displaying data for index %i (%s:%i)\n",i,__FILE__,__LINE__);
156 for(
unsigned int k=0; k<data.size(); k+=3){
159 if(value>255)value=255;
160 colors[k+0 + i*data.size()*3] = value;
161 colors[k+1 + i*data.size()*3 ] = value;
162 colors[k+2 + i*data.size()*3 ] = value;
165 for(
unsigned int k=0; k<data.size(); k+=3){
172 glNewList(
wallDist[i], GL_COMPILE );
178 glEnableClientState(GL_COLOR_ARRAY);
179 glEnableClientState(GL_VERTEX_ARRAY);
180 glColorPointer(3,GL_UNSIGNED_BYTE,0,(
void*)
colors);
181 glVertexPointer(3,GL_FLOAT,0,(
void*)
vertecies);
183 double rotate = (double)i/6399.0*360.0;
184 glRotated( rotate , 0.0, 0.0, 1.0);
188 fprintf(stderr,
"CRITIACAL ERROR\n");
191 volatile GLuint *baseIndex = &
indices[i*(data.size())];
195 glDrawElements(GL_POINTS, data.size(), GL_UNSIGNED_INT, (
void*)baseIndex);
212 checkGL((
const char*)
"after Draw");
214 glDisableClientState(GL_COLOR_ARRAY);
215 glDisableClientState(GL_VERTEX_ARRAY);
237 glBegin(GL_LINE_STRIP);
245 prevalues +=
max((data[k-p] - data[(
int)
max((k/2-p),0)]),0);
246 aftervalues +=
max((data[k+p] - data[(k/2+p)]),0);
248 double value= (((prevalues - aftervalues)*data[k])) *
factor;
250 if(value>255)value=255.0;
252 if(value > p_max && k >10){
256 QColor color(value,value,value);
273 glBegin(GL_LINE_STRIP);
277 glVertex3f(point,0,0);
304 return QSize(50, 50);
309 return QSize(400, 400);
367 qglClearColor(QColor(0.0,0.0,0.0));
368 glShadeModel(GL_FLAT);
370 glEnable(GL_DEPTH_TEST);
375 glDepthFunc(GL_LEQUAL);
402 glDisable( GL_LIGHTING );
403 glDisable( GL_COLOR_MATERIAL ) ;
406 float interval = 1.0f;
409 glColor4f(0.5f,0.5f,1.0f,0.5f);
411 float x = - size*0.5f;
412 while( x <= size*0.5f ) {
413 glVertex3f(-size/2.0f, x, 0.01f);
414 glVertex3f(size/2.0f, x, 0.01f);
415 glVertex3f(x, -size/2.0f, 0.01f);
416 glVertex3f(x, size/2.0f, 0.01f);
423 for(r=0;r<size/2;r+=interval) {
425 for(x=0;x<(2*3.14152);x+=(2*3.14152)/(r*100)) {
426 glVertex3f(cos(x)*r, sin(x)*r, 0.01f);
436 glBegin(GL_LINE_LOOP);
437 for(
int i=0; i < 360; i++)
439 glVertex2f(cos(i/180.0*M_PI)*xradius,sin(i/180.0*M_PI)*yradius);
450 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
452 glTranslated(0, 0, -
zoom);
458 glRotated(
xRot / 16.0, 1.0, 0.0, 0.0);
459 glRotated(
yRot / 16.0, 0.0, 1.0, 0.0);
460 glRotated(
zRot / 16.0, 0.0, 0.0, 1.0);
463 QColor color(
"yellow");
514 for(
int j=0;j<end-2;j++){
515 int i = (begin+j)%6400;
516 if(i < 0 || i > 6399){
517 fprintf(stderr,
"Error in glwidet, please check value make no sense, prevent crash, not displaying data for index %i (%s:%i)\n",i,__FILE__,__LINE__);
524 glDeleteLists(
wallDist[bearing], 1);
527 wallDist[bearing] = glGenLists( 1 );
529 glNewList(
wallDist[bearing], GL_COMPILE );
533 double rotate = (double)bearing/6399.0*360.0;
534 glRotated( rotate, 0.0, 0.0, 1.0);
537 QColor color(
"yellow");
540 qglColor(QColor(
"green"));
541 glVertex3f(dist2*currentScale,0,-0.1);
551 glViewport(0, 0, width, height);
552 glMatrixMode(GL_PROJECTION);
554 gluPerspective( 45.0, (
float)width/(
float)height, 1.0, 1000.0 );
555 glMatrixMode(GL_MODELVIEW);
573 if (event->buttons() & Qt::LeftButton) {
578 }
else if (event->buttons() & Qt::RightButton) {
579 zoom += (dyt+dxt)*0.05;
593 resize(width,height);
607 switch (event->key()) {
618 printf(
"Gain %f\n",
factor);
623 printf(
"Gain %f\n",
factor);
650 zoom -= (2.0*(float)event->delta()/120.0)*5;
666 glTranslated(-posX, -posY, 0);
667 glRotated( rotate, 0.0, 0.0, 1.0);
668 glBegin(GL_LINE_LOOP);
669 glVertex3d(-sizeX,sizeY,0);
670 glVertex3d(sizeX,sizeY,0);
671 glVertex3d(sizeX,-sizeY,0);
672 glVertex3d(-sizeX,-sizeY,0);
682 glNewList(
avalon, GL_COMPILE );
688 glBegin(GL_LINE_LOOP);
689 glVertex3d(-1,0.2,0);
691 glVertex3d(1,-0.2,0);
692 glVertex3d(-1,-0.2,0);
704 while (*angle > 360 * 16)
710 GLenum err = glGetError();
714 case GL_INVALID_ENUM:
715 printf(
"%s: Invalid enum\n",msg);
717 case GL_INVALID_VALUE:
718 printf(
"%s: invalid value\n",msg);
720 case GL_INVALID_OPERATION:
721 printf(
"%s: invalid operation\n",msg);
723 case GL_STACK_OVERFLOW:
724 printf(
"%s: stack overflow\n",msg);
726 case GL_STACK_UNDERFLOW:
727 printf(
"%s: stack underflow\n",msg);
729 case GL_OUT_OF_MEMORY:
730 printf(
"%s: OpenGL Put of memoty\n",msg);
732 case GL_TABLE_TOO_LARGE:
733 printf(
"%s: GL Table too large\n",msg);
void wheelEvent(QWheelEvent *event)
void setWallDist(int bearing, int dist, int dist2)
void mouseMoveEvent(QMouseEvent *event)
void resizeGL(int width, int height)
void mousePressEvent(QMouseEvent *event)
void zRotationChanged(int angle)
void setyPosition(int value)
void xRotationChanged(int angle)
void reset(double currentScale)
const unsigned int maximumBearings
void setxPosition(int value)
void yRotationChanged(int angle)
void drawEllipse(float xradius, float yradius)
void setGroundTrue(double sizeX, double sizeY, double posX, double posY, double rot)
void setXRotation(int angle)
void setZoomMax(float value)
void setOrientation(const double orientation)
void zPositionChanged(int value)
void setYRotation(int angle)
void keyPressEvent(QKeyEvent *event)
void setZoomMin(float value)
double max(double a, double b)
volatile GLuint * indices
void xPositionChanged(int value)
void checkGL(const char *)
SonarViewGL(ImageViewOld &parent, unsigned int maximumBearings=6400)
void setData(const std::vector< uint8_t > data, int bearing)
volatile GLfloat * vertecies
void yPositionChanged(int value)
void setPosition(int xRot, int yRot, int zRot, int xMove, int yMove, int zMove, float zoom, int width, int height)
void normalizeAngle(int *angle)
void setzPosition(int value)
QSize minimumSizeHint() const
volatile GLubyte * colors
void setZRotation(int angle)