- Timestamp:
- Jan 9, 2008, 12:07:04 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/geant4/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc
r652 r673 43 43 //#include <qmouseevent.h> 44 44 #include <qevent.h> // include <qcontextmenuevent.h> 45 #include <qpainter.h> 45 46 46 47 G4OpenGLStoredQtViewer::G4OpenGLStoredQtViewer … … 53 54 QGLWidget() // FIXME : gerer le pb du parent ! 54 55 { 56 zoomAction = false; 55 57 nbPaint =0; 56 58 hasToRepaint =false; … … 230 232 ,int aHeight) 231 233 { 232 glViewport(0, 0, aWidth, aHeight); 233 glMatrixMode(GL_PROJECTION); 234 glMatrixMode(GL_MODELVIEW); 234 setupViewport(aWidth,aHeight); 235 236 // glViewport(0, 0, aWidth, aHeight); 237 // glMatrixMode(GL_PROJECTION); 238 // glMatrixMode(GL_MODELVIEW); 235 239 236 240 if (((WinSize_x != (G4int)aWidth)) || (WinSize_y != (G4int) aHeight)) { … … 246 250 247 251 252 /** 253 @see : 254 */ 248 255 249 256 void G4OpenGLStoredQtViewer::paintGL() 250 257 { 251 if (!readyToPaint) { 252 #ifdef GEANT4_QT_DEBUG 253 printf("G4OpenGLStoredQtViewer::paintGL ============ Not ready %d\n",readyToPaint); 254 #endif 255 readyToPaint= true; 256 return; 257 } 258 // DO NOT RESIZE IF SIZE HAS NOT CHANGE : 259 // WHEN CLICK ON THE FRAME FOR EXAMPLE 260 // EXECEPT WHEN MOUSE MOVE EVENT 261 if ( !hasToRepaint) { 262 if (((WinSize_x == (G4int)width())) &&(WinSize_y == (G4int) height())) { 263 #ifdef GEANT4_QT_DEBUG 264 printf("G4OpenGLStoredQtViewer::paintGL ============ Dont repaint\n"); 265 #endif 258 if (zoomAction) { 259 QPainter painter; 260 painter.begin(this); 261 // painter.setRenderHint(QPainter::Antialiasing); 262 QColor bg = QColor(glBufferImage.pixel(0,0)); 263 printf("%d+%d+%d+%d %d+%d+%d+%d",bg.red(),bg.green(),bg.blue(),bg.alpha(),qAlpha(glBufferImage.pixel(0,0)),qRed(glBufferImage.pixel(0,0)),qGreen(glBufferImage.pixel(0,0)),qBlue(glBufferImage.pixel(0,0))); 264 painter.setBackground(QBrush(bg)); 265 // painter.drawRect(10,10,50,80); 266 // QImage test = grabFrameBuffer().copy(); 267 // painter.drawImage(0, 0,test); 268 for (int ay=0;ay<glBufferImage.height();ay++) { 269 for (int ax=0;ax<glBufferImage.width();ax++) { 270 if(QColor(glBufferImage.pixel(ax,ay)) != bg) { 271 // painter.setPen(QColor(glBufferImage.pixel(ax,ay))); 272 // painter.drawPoint(ax,glBufferImage.height()-ay); 273 } else { 274 printf("o"); 275 } 276 // printf("%d+%d+%d+%d ",QColor(glBufferImage.pixel(ax,ay)).red(),QColor(glBufferImage.pixel(ax,ay)).green(),QColor(glBufferImage.pixel(ax,ay)).blue(),QColor(glBufferImage.pixel(ax,ay)).alpha()); 277 // if (glBufferImage.pixel(ax,ay) == 255) { 278 // test.setPixel(ax,ay,1); 279 // } else { 280 // test.setPixel(ax,ay,0); 281 // } 282 } 283 // printf("\n"); 284 } 285 // for (int ay=0;ay<test.height();ay++) { 286 // for (int ax=0;ax<test.width();ax++) { 287 // if (test.pixel(ax,ay) == 1) { 288 // printf("."); 289 // } else if (!test.pixel(ax,ay)) { 290 // printf("X"); 291 // } else { 292 // printf("%d",test.pixel(ax,ay)); 293 // } 294 // } 295 // printf("\n"); 296 // } 297 298 // painter.drawImage(0, 0, glBufferImage); 299 // painter.drawImage(0, 0, test,0,0,-1,-1,Qt::ColorOnly); 300 301 printf("paint event zoom \n"); 302 // painter.drawRect(beginZoom.x(),beginZoom.y(),endZoom.x()-beginZoom.x(),endZoom.y()-beginZoom.y()); 303 painter.end(); 304 } else { 305 306 if (!readyToPaint) { 307 #ifdef GEANT4_QT_DEBUG 308 printf("G4OpenGLStoredQtViewer::paintGL ============ Not ready %d\n",readyToPaint); 309 #endif 310 readyToPaint= true; 266 311 return; 267 312 } 313 // DO NOT RESIZE IF SIZE HAS NOT CHANGE : 314 // WHEN CLICK ON THE FRAME FOR EXAMPLE 315 // EXECEPT WHEN MOUSE MOVE EVENT 316 if ( !hasToRepaint) { 317 if (((WinSize_x == (G4int)width())) &&(WinSize_y == (G4int) height())) { 318 #ifdef GEANT4_QT_DEBUG 319 printf("G4OpenGLStoredQtViewer::paintGL ============ Dont repaint\n"); 320 #endif 321 return; 322 } 323 } 324 nbPaint++; 325 #ifdef GEANT4_QT_DEBUG 326 printf("G4OpenGLStoredQtViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %d ready %d\n",nbPaint,readyToPaint); 327 #endif 328 WinSize_x = (G4int) width(); 329 WinSize_y = (G4int) height(); 330 331 setupViewport(width(),height()); 332 // glViewport (0, 0, width(), height()); 333 // glLoadIdentity(); 334 335 336 SetView(); 337 338 // // printf("before ClearView\n"); 339 #ifdef GEANT4_QT_DEBUG 340 printf(" ClearView\n"); 341 #endif 342 343 ClearView (); //ok, put the background correct 344 DrawView(); 345 346 hasToRepaint =false; 347 348 #ifdef GEANT4_QT_DEBUG 349 printf("G4OpenGLStoredQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %d ready %d\n",nbPaint,readyToPaint); 350 #endif 268 351 } 269 nbPaint++;270 #ifdef GEANT4_QT_DEBUG271 printf("G4OpenGLStoredQtViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %d ready %d\n",nbPaint,readyToPaint);272 #endif273 WinSize_x = (G4int) width();274 WinSize_y = (G4int) height();275 276 glViewport (0, 0, width(), height());277 // glLoadIdentity();278 279 280 SetView();281 282 // // printf("before ClearView\n");283 #ifdef GEANT4_QT_DEBUG284 printf(" ClearView\n");285 #endif286 287 ClearView (); //ok, put the background correct288 DrawView();289 290 hasToRepaint =false;291 292 #ifdef GEANT4_QT_DEBUG293 printf("G4OpenGLStoredQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %d ready %d\n",nbPaint,readyToPaint);294 #endif295 352 } 296 353 … … 300 357 printf("G4OpenGLStoredQtViewer::mousePressEvent\n"); 301 358 #endif 359 setMouseTracking(true); 302 360 G4MousePressEvent(event->pos()); 303 361 } 304 362 363 void G4OpenGLStoredQtViewer::mouseDoubleClickEvent(QMouseEvent *event) 364 { 365 #ifdef GEANT4_QT_DEBUG 366 printf("G4OpenGLStoredQtViewer::mouseDoubleClickEvent\n"); 367 #endif 368 setMouseTracking(true); 369 zoomAction=true; 370 makeCurrent(); 371 glBufferImage = QImage( width(), height(), QImage::Format_ARGB32_Premultiplied ); 372 glReadPixels( 0, 0, width(), height(), GL_RGBA, GL_UNSIGNED_BYTE, glBufferImage.bits() ); 373 // glBufferImage = grabFrameBuffer(false).convertToFormat(QImage::Format_RGB16); //QImage::Format_ARGB32_Premultiplied 374 375 #ifdef GEANT4_QT_DEBUG 376 // for (int ay=0;ay<glBufferImage.height();ay++) { 377 // for (int ax=0;ax<glBufferImage.width();ax++) { 378 // if (glBufferImage.pixel(ax,ay) == 255) { 379 // printf("."); 380 // } else if (!glBufferImage.pixel(ax,ay)) { 381 // printf("X"); 382 // } else { 383 // printf("%d",glBufferImage.pixel(ax,ay)); 384 // } 385 // } 386 // printf("\n"); 387 // } 388 #endif 389 beginZoom.setX(event->x()); 390 beginZoom.setY(event->y()); 391 } 392 393 void G4OpenGLStoredQtViewer::mouseReleaseEvent(QMouseEvent *event) 394 { 395 #ifdef GEANT4_QT_DEBUG 396 printf("G4OpenGLStoredQtViewer::mouseReleaseEvent\n"); 397 #endif 398 setMouseTracking(false); 399 zoomAction =false; 400 } 401 305 402 void G4OpenGLStoredQtViewer::mouseMoveEvent(QMouseEvent *event) 306 403 { 404 // special case of mouse zoom action, it should draw a rect on 405 // the openGL buffer, so it could only be done in this class 406 // and sould be reimplemented in G4OpenGLImmediateQtViewer 407 if (!zoomAction) { 307 408 #if QT_VERSION < 0x040000 308 G4MouseMoveEvent(event->x(),event->y(),event->state());409 G4MouseMoveEvent(event->x(),event->y(),event->state()); 309 410 #else 310 G4MouseMoveEvent(event->x(),event->y(),event->buttons()); 311 #endif 411 G4MouseMoveEvent(event->x(),event->y(),event->buttons()); 412 #endif 413 } else { 414 #ifdef GEANT4_QT_DEBUG 415 printf("G4OpenGLStoredQtViewer::mouseMoveEvent zoom\n"); 416 #endif 417 endZoom.setX(event->x()); 418 endZoom.setY(event->y()); 419 updateGL(); 420 } 312 421 // DrawView(); 313 422 } … … 328 437 } 329 438 330 #endif 439 440 #endif
Note: See TracChangeset
for help on using the changeset viewer.