rock_widget_collection  0.1
RangeViewGL.cc
Go to the documentation of this file.
1 /*
2  * File: RangeViewGL.cc
3  * Author: Matthias Goldhoorn (matthias.goldhoorn@dfki.de)
4  *
5  */
6 
7 #include <stdexcept>
8 #include "RangeViewGL.h"
9 #include <QtCore/QtPlugin>
10 #include <QtOpenGL/QtOpenGL>
11 #include <math.h>
12 #include <stdio.h>
13 #include <iostream>
14 
15 #ifdef __APPLE__
16 #include <OpenGL/gl.h>
17 #include <GLUT/glut.h>
18 #else
19 #include <GL/gl.h>
20 #include <GL/glut.h>
21 #endif
22 
24  ImageViewOldGL(parent),
25  zoom( 45.0 )
26 
27 {
28  xRot =0;//180*16;
29  yRot = 0;
30  zRot = 0;
31  xShift = 0;
32  yShift = 0;
33  zShift = 0;
34  zoom_min = -6000.0;
35  zoom_max = 6000.0;
36 // repaintTimer.setSingleShot(false);
37 // repaintTimer.setInterval(100);
38 // connect(&repaintTimer,SIGNAL(timeout()),this,SLOT(repaintFunc()));
39 // repaintTimer.start();
40 
41 }
42 
43 
44 
45 void RangeViewGL::setData(const std::vector<Eigen::Vector3d> data){
46  mutex.lock();
47  this->data = data;
48  mutex.unlock();
49  updateGL();
50 }
51 
53 {
54  //glDeleteLists(object, 1);
55 }
56 
58 {
59  return QSize(50, 50);
60 }
61 
62 QSize RangeViewGL::sizeHint() const
63 {
64  return QSize(400, 400);
65 }
66 
67 
68 void RangeViewGL::keyPressEvent ( QKeyEvent * event ){
69  //printf("bla taste\n");
70  switch (event->key()) {
71  case Qt::Key_W:
72  return;
73  default:
74  return;
75 }
76 }
77 
78 
80  update();
81  updateGL();
82 }
83 
84 
86 {
87  normalizeAngle(&angle);
88  if (angle != xRot) {
89  xRot = angle;
90  emit xRotationChanged(angle);
91  }
92 }
93 
95 {
96  normalizeAngle(&angle);
97  if (angle != yRot) {
98  yRot = angle;
99  emit yRotationChanged(angle);
100  }
101 }
102 
104 {
105  normalizeAngle(&angle);
106  if (angle != zRot) {
107  zRot = angle;
108  emit zRotationChanged(angle);
109  }
110 }
111 
112 void RangeViewGL::setZoomMin(float value)
113 {
114  zoom_min = value;
115 }
116 
117 void RangeViewGL::setZoomMax(float value)
118 {
119  zoom_max = value;
120 }
121 
122 
124 {
125  xShift = value;
126  emit xPositionChanged(value);
127 }
129 {
130  yShift = value;
131  emit yPositionChanged(value);
132 }
134 {
135  zShift = value;
136  emit zPositionChanged(value);
137 }
138 
140 {
141  //qglClearColor(QColor(0.1,0.1,0.0));
142  //qglClearColor(purple.light());
143  //qglClearColor(white);
144  qglClearColor(QColor(0.0,0.0,0.0));
145  glShadeModel(GL_FLAT);
146  glEnable(GL_DEPTH_TEST);
147  glEnable(GL_CULL_FACE);
148 
149  groundPlane = glGenLists(1);
150  glNewList(groundPlane, GL_COMPILE);
151 
152  #if 1 // draw the grid
153 
154  glDisable( GL_LIGHTING );
155  glDisable( GL_COLOR_MATERIAL ) ;
156 
157  float size = 50.0f;
158  float interval = 1.0f;
159 
160 
161  glColor4f(0.5f,0.5f,1.0f,0.5f);
162  glBegin(GL_LINES);
163  float x = - size*0.5f;
164  while( x <= size*0.5f ) {
165  glVertex3f(-size/2.0f, x, 0.01f);
166  glVertex3f(size/2.0f, x, 0.01f);
167  glVertex3f(x, -size/2.0f, 0.01f);
168  glVertex3f(x, size/2.0f, 0.01f);
169  x += interval;
170  }
171  glEnd();
172 
173  // draw concentric circles
174  float r;
175  for(r=0;r<size/2;r+=interval) {
176  glBegin(GL_LINES);
177  for(x=0;x<(2*3.14152);x+=(2*3.14152)/(r*100)) {
178  glVertex3f(cos(x)*r, sin(x)*r, 0.01f);
179  }
180  glEnd();
181  }
182  glEndList();
183  #endif
184 }
185 
186 
187 
189  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
190  glLoadIdentity();
191  glTranslated(0, 0, -zoom);
192 
193  glTranslated(double(xShift)/100.0, double(yShift)/100.0, double(zShift)/100.0);
194  glRotated(xRot / 16.0, 1.0, 0.0, 0.0);
195  glRotated(yRot / 16.0, 0.0, 1.0, 0.0);
196  glRotated(zRot / 16.0, 0.0, 0.0, 1.0);
197 
198  double value=255.0;
199  QColor color(value,value,value);
200  QColor red(255.0,0,0);
201  qglColor(red);
202  glBegin(GL_POINTS);
203  glPointSize(5);
204  glVertex3f(0,0,0);
205  glPointSize(1);
206  qglColor(color);
207  for(int i=0;i<data.size();i++){
208  glVertex3f(data[i][0],data[i][1],data[i][2]);
209  }
210  glEnd();
211 
212 }
213 
214 
215 
216 void RangeViewGL::resizeGL(int width, int height)
217 {
218  glViewport(0, 0, width, height);
219  glMatrixMode(GL_PROJECTION);
220  glLoadIdentity();
221  gluPerspective( 45.0, (float)width/(float)height, 1.0, 1000.0 );
222  glMatrixMode(GL_MODELVIEW);
223  updateGL();
224 }
225 
226 void RangeViewGL::mousePressEvent(QMouseEvent *event)
227 {
228  lastPos = event->pos();
229  lastPosTrans = event->pos();
230  updateGL();
231 }
232 
233 void RangeViewGL::mouseMoveEvent(QMouseEvent *event)
234 {
235  //int dx = event->x() - lastPos.x();
236  //int dy = event->y() - lastPos.y();
237 
238  int dxt = event->x() - lastPosTrans.x();
239  int dyt = event->y() - lastPosTrans.y();
240 
241  if (event->buttons() & Qt::LeftButton) {
242  //setXRotation(xRot + 8 * dy);
243  //setZRotation(zRot + 8 * dx);
244  setxPosition(xShift + dxt);
245  setyPosition(yShift - dyt);
246  }else if (event->buttons() & Qt::RightButton) {
247  zoom += (dyt+dxt)/10.0;
248  zoom = std::max<float>( std::min<float>( zoom, zoom_max), zoom_min );
249  }
250 
251  lastPos = event->pos();
252  lastPosTrans = event->pos();
253 
254  //printf("Rot: %i,%i,%i, Pos, (%i,%i,%i), zoom: %f\n",xRot,yRot,zRot,xShift,yShift,zShift,zoom);
255  updateGL();
256 
257 }
258 
259 //Werte für die Anzeige setzen.
260 void RangeViewGL::setPosition(int xRot,int yRot, int zRot, int xMove, int yMove, int zMove, float zoom, int width, int height){
261  resize(width,height);
262  this->xRot = xRot;
263  this->yRot = yRot;
264  this->zRot = zRot;
265  this->xShift = xMove;
266  this->yShift = yMove;
267  this->zShift = zMove;
268  this->zoom = zoom;
269  updateGL();
270 }
271 
272 
273 void RangeViewGL::wheelEvent(QWheelEvent *event)
274 {
275  zoom -= (2.0*(float)event->delta()/120.0)*5;
276  zoom = std::max<float>( std::min<float>( zoom, zoom_max ), zoom_min);
277  event->accept();
278  updateGL();
279 }
280 
281 void RangeViewGL::normalizeAngle(int *angle)
282 {
283  while (*angle < 0)
284  *angle += 360 * 16;
285  while (*angle > 360 * 16)
286  *angle -= 360 * 16;
287 }
288 
289 
virtual ~RangeViewGL()
Definition: RangeViewGL.cc:52
void setZoomMax(float value)
Definition: RangeViewGL.cc:117
void setZRotation(int angle)
Definition: RangeViewGL.cc:103
QSize sizeHint() const
Definition: RangeViewGL.cc:62
void setData(const std::vector< Eigen::Vector3d > data)
Definition: RangeViewGL.cc:45
void xPositionChanged(int value)
void xRotationChanged(int angle)
void wheelEvent(QWheelEvent *)
Definition: RangeViewGL.cc:273
void setYRotation(int angle)
Definition: RangeViewGL.cc:94
void paintGL()
Definition: RangeViewGL.cc:188
void mouseMoveEvent(QMouseEvent *)
Definition: RangeViewGL.cc:233
void resizeGL(int, int)
Definition: RangeViewGL.cc:216
void initializeGL()
Definition: RangeViewGL.cc:139
void keyPressEvent(QKeyEvent *event)
Definition: RangeViewGL.cc:68
void setXRotation(int angle)
Definition: RangeViewGL.cc:85
void yRotationChanged(int angle)
void setxPosition(int value)
Definition: RangeViewGL.cc:123
void setzPosition(int value)
Definition: RangeViewGL.cc:133
void setPosition(int xRot, int yRot, int zRot, int xMove, int yMove, int zMove, float zoom, int width, int height)
Definition: RangeViewGL.cc:260
void yPositionChanged(int value)
void setyPosition(int value)
Definition: RangeViewGL.cc:128
void repaintFunc()
Definition: RangeViewGL.cc:79
void mousePressEvent(QMouseEvent *)
Definition: RangeViewGL.cc:226
RangeViewGL(ImageViewOld &parent)
Definition: RangeViewGL.cc:23
void setZoomMin(float value)
Definition: RangeViewGL.cc:112
QSize minimumSizeHint() const
Definition: RangeViewGL.cc:57
void zRotationChanged(int angle)
void zPositionChanged(int value)