Ignore:
Timestamp:
Jan 9, 2008, 12:07:04 PM (16 years ago)
Author:
garnier
Message:

debut de correction du ticket #105

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/geant4/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc

    r652 r673  
    4343//#include <qmouseevent.h>
    4444#include <qevent.h> // include <qcontextmenuevent.h>
     45#include <qpainter.h>
    4546
    4647G4OpenGLStoredQtViewer::G4OpenGLStoredQtViewer
     
    5354 QGLWidget()                      // FIXME : gerer le pb du parent !
    5455 {
     56   zoomAction = false;
    5557   nbPaint =0;
    5658   hasToRepaint =false;
     
    230232,int aHeight)
    231233
    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);
    235239
    236240   if (((WinSize_x != (G4int)aWidth)) || (WinSize_y != (G4int) aHeight)) {
     
    246250
    247251
     252/**
     253@see :
     254*/
    248255
    249256void G4OpenGLStoredQtViewer::paintGL()
    250257 {
    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;
    266311       return;
    267312     }
     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
    268351   }
    269    nbPaint++;
    270 #ifdef GEANT4_QT_DEBUG
    271    printf("G4OpenGLStoredQtViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %d ready %d\n",nbPaint,readyToPaint);
    272 #endif
    273    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_DEBUG
    284    printf("    ClearView\n");
    285 #endif
    286    
    287    ClearView (); //ok, put the background correct
    288    DrawView();
    289 
    290    hasToRepaint =false;
    291 
    292 #ifdef GEANT4_QT_DEBUG
    293    printf("G4OpenGLStoredQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %d ready %d\n",nbPaint,readyToPaint);
    294 #endif
    295352 }
    296353
     
    300357  printf("G4OpenGLStoredQtViewer::mousePressEvent\n");
    301358#endif
     359  setMouseTracking(true);
    302360  G4MousePressEvent(event->pos());
    303361}
    304362
     363void 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
     393void 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
    305402void G4OpenGLStoredQtViewer::mouseMoveEvent(QMouseEvent *event)
    306403{
     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) {
    307408#if QT_VERSION < 0x040000
    308   G4MouseMoveEvent(event->x(),event->y(),event->state());
     409    G4MouseMoveEvent(event->x(),event->y(),event->state());
    309410#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  }
    312421  //  DrawView();
    313422}
     
    328437}
    329438
    330 #endif
     439
     440#endif
Note: See TracChangeset for help on using the changeset viewer.