Changeset 682


Ignore:
Timestamp:
Jan 11, 2008, 7:03:41 PM (16 years ago)
Author:
garnier
Message:

modifs

File:
1 edited

Legend:

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

    r678 r682  
    3737
    3838#include "G4OpenGLStoredQtViewer.hh"
    39 #include "G4VisManager.hh"
    4039
    4140#include "G4ios.hh"
     
    4342//#include <qmouseevent.h>
    4443#include <qevent.h> // include <qcontextmenuevent.h>
    45 #include <qpainter.h>
    4644
    4745G4OpenGLStoredQtViewer::G4OpenGLStoredQtViewer
    4846(G4OpenGLStoredSceneHandler& sceneHandler,
    4947 const G4String&  name):
    50  G4VViewer (sceneHandler, sceneHandler.IncrementViewCount (), name),
    51  G4OpenGLViewer (sceneHandler),
    52  G4OpenGLQtViewer (sceneHandler),
    53  G4OpenGLStoredViewer (sceneHandler),
    54  QGLWidget(QGLFormat(QGL::SampleBuffers))             // FIXME : gerer le pb du parent !
    55  {
    56    nbPaint =0;
    57    hasToRepaint =false;
     48  G4VViewer (sceneHandler, sceneHandler.IncrementViewCount (), name),
     49  G4OpenGLViewer (sceneHandler),
     50  G4OpenGLQtViewer (sceneHandler),
     51  G4OpenGLStoredViewer (sceneHandler),
     52  QGLWidget(QGLFormat(QGL::SampleBuffers))             // FIXME : gerer le pb du parent !
     53{
     54  nbPaint =0;
     55  hasToRepaint =false;
    5856  if (fViewId < 0) return;  // In case error in base class instantiation.
    5957}
     
    6159G4OpenGLStoredQtViewer::~G4OpenGLStoredQtViewer() {
    6260#ifdef GEANT4_QT_DEBUG
    63    printf("GLWidget::~GLWidget \n");
    64 #endif
    65    makeCurrent();
    66    // this is connect to the Dialog for deleting it properly
    67    // when close event.
    68    //   ((QDialog*)window())->reject();
    69 #ifdef GEANT4_QT_DEBUG
    70    printf("GLWidget::~GLWidget END\n");
     61  printf("GLWidget::~GLWidget \n");
     62#endif
     63  makeCurrent();
     64  // this is connect to the Dialog for deleting it properly
     65  // when close event.
     66  //   ((QDialog*)window())->reject();
     67#ifdef GEANT4_QT_DEBUG
     68  printf("GLWidget::~GLWidget END\n");
    7169#endif
    7270}
     
    7472void G4OpenGLStoredQtViewer::Initialise() {
    7573#ifdef GEANT4_QT_DEBUG
    76    printf("GLWidget::Initialise \n");
    77 #endif
    78    readyToPaint = false;
    79    CreateGLQtContext ();
    80 #ifdef GEANT4_QT_DEBUG
    81    printf("G4OpenGLStoredQtViewer::Initialise () 2\n");
     74  printf("GLWidget::Initialise \n");
     75#endif
     76  readyToPaint = false;
     77  CreateGLQtContext ();
     78#ifdef GEANT4_QT_DEBUG
     79  printf("G4OpenGLStoredQtViewer::Initialise () 2\n");
    8280#endif
    8381  CreateMainWindow (this);
     
    8583  printf("G4OpenGLStoredQtViewer::Initialise () 3\n");
    8684#endif
    87   //  CreateFontLists ();  // FIXME Does nothing!
     85  CreateFontLists ();  // FIXME Does nothing!
    8886 
    8987#ifdef GEANT4_QT_DEBUG
     
    9997  ClearView (); //ok, put the background correct
    10098  FinishView();
    101 #ifdef GEANT4_QT_DEBUG
    102   printf("G4OpenGLStoredQtViewer::Initialise () 4\n");
    103 #endif
    10499}
    105100
    106101void G4OpenGLStoredQtViewer::initializeGL () {
    107102
    108    InitializeGLView ();
    109 
    110 #ifdef GEANT4_QT_DEBUG
    111    printf("G4OpenGLStoredQtViewer::InitialiseGL () 1\n");
    112 #endif
    113 
    114    // clear the buffers and window.
    115    ClearView ();
    116    //   printf("G4OpenGLStoredQtViewer::InitialiseGL () 2\n");
    117    FinishView ();
     103  InitializeGLView ();
     104
     105#ifdef GEANT4_QT_DEBUG
     106  printf("G4OpenGLStoredQtViewer::InitialiseGL () 1\n");
     107#endif
     108
     109  // clear the buffers and window.
     110  ClearView ();
     111  //   printf("G4OpenGLStoredQtViewer::InitialiseGL () 2\n");
     112  FinishView ();
    118113   
    119    glDepthFunc (GL_LEQUAL);
    120    glDepthMask (GL_TRUE);
    121 
    122    hasToRepaint =true;
    123 
    124 #ifdef GEANT4_QT_DEBUG
    125    printf("G4OpenGLStoredQtViewer::InitialiseGL  -------------------------------------------------------------------------------------\n");
     114  glDepthFunc (GL_LEQUAL);
     115  glDepthMask (GL_TRUE);
     116
     117  hasToRepaint =true;
     118
     119#ifdef GEANT4_QT_DEBUG
     120  printf("G4OpenGLStoredQtViewer::InitialiseGL  -------------------------------------------------------------------------------------\n");
    126121#endif
    127122}
     
    129124
    130125void G4OpenGLStoredQtViewer::DrawView () {
     126
    131127#ifdef GEANT4_QT_DEBUG
    132128  printf("G4OpenGLStoredQtViewer::DrawView %d %d   VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n",WinSize_x, WinSize_y);
    133129#endif
    134    G4ViewParameters::DrawingStyle style = GetViewParameters().GetDrawingStyle();
    135 
    136    //Make sure current viewer is attached and clean...
    137    //Qt version needed
    138    //   glViewport (0, 0, WinSize_x, WinSize_y);
    139 
    140    //See if things have changed from last time and remake if necessary...
    141    // The fNeedKernelVisit flag might have been set by the user in
    142    // /vis/viewer/rebuild, but if not, make decision and set flag only
    143    // if necessary...
    144    if (!fNeedKernelVisit)
    145 
    146    if (!fNeedKernelVisit) KernelVisitDecision ();
     130  G4ViewParameters::DrawingStyle style = GetViewParameters().GetDrawingStyle();
     131
     132  //Make sure current viewer is attached and clean...
     133  //Qt version needed
     134  //   glViewport (0, 0, WinSize_x, WinSize_y);
     135
     136  //See if things have changed from last time and remake if necessary...
     137  // The fNeedKernelVisit flag might have been set by the user in
     138  // /vis/viewer/rebuild, but if not, make decision and set flag only
     139  // if necessary...
     140  if (!fNeedKernelVisit)
     141
     142    if (!fNeedKernelVisit) KernelVisitDecision ();
    147143   
    148    G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets).
    149    ProcessView ();
     144  G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets).
     145  ProcessView ();
    150146   
    151147
    152    if(style!=G4ViewParameters::hlr &&
    153       haloing_enabled) {
    154 #ifdef GEANT4_QT_DEBUG
    155      printf("G4OpenGLStoredQtViewer::DrawView DANS LE IF\n");
    156 #endif
    157 
    158      HaloingFirstPass ();
    159      DrawDisplayLists ();
    160      glFlush ();
    161 
    162      HaloingSecondPass ();
    163 
    164      DrawDisplayLists ();
    165      FinishView ();
    166 
    167    } else {
    168 #ifdef GEANT4_QT_DEBUG
    169      printf("***************************  CASE 1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
    170 #endif
    171      
    172      // If kernel visit was needed, drawing and FinishView will already
    173      // have been done, so...
    174      if (!kernelVisitWasNeeded) {
    175 #ifdef GEANT4_QT_DEBUG
    176        printf("***************************  CASE 2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
    177 #endif
    178        DrawDisplayLists ();
    179        FinishView ();
    180      } else {
    181 #ifdef GEANT4_QT_DEBUG
    182        printf("***************************  CASE 3 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
    183 #endif
    184        // However, union cutaways are implemented in DrawDisplayLists, so make
    185        // an extra pass...
    186        if (fVP.IsCutaway() &&
    187            fVP.GetCutawayMode() == G4ViewParameters::cutawayUnion) {
    188          ClearView();
    189          DrawDisplayLists ();
    190          FinishView ();
    191 #ifdef GEANT4_QT_DEBUG
    192          printf("***************************  CASE 4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
    193 #endif
    194        } else { // ADD TO AVOID KernelVisit=1 and nothing to display
    195          DrawDisplayLists ();
    196          FinishView ();
    197        }
    198      }
    199    }
    200 
    201 #ifdef GEANT4_QT_DEBUG
    202    printf("G4OpenGLStoredQtViewer::DrawView %d %d ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n",WinSize_x, WinSize_y);
    203 #endif
    204    hasToRepaint =true;
     148  if(style!=G4ViewParameters::hlr &&
     149     haloing_enabled) {
     150#ifdef GEANT4_QT_DEBUG
     151    printf("G4OpenGLStoredQtViewer::DrawView DANS LE IF\n");
     152#endif
     153
     154    HaloingFirstPass ();
     155    DrawDisplayLists ();
     156    glFlush ();
     157
     158    HaloingSecondPass ();
     159
     160    DrawDisplayLists ();
     161    FinishView ();
     162
     163  } else {
     164#ifdef GEANT4_QT_DEBUG
     165    printf("***************************  CASE 1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
     166#endif
     167     
     168    // If kernel visit was needed, drawing and FinishView will already
     169    // have been done, so...
     170    if (!kernelVisitWasNeeded) {
     171#ifdef GEANT4_QT_DEBUG
     172      printf("***************************  CASE 2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
     173#endif
     174      DrawDisplayLists ();
     175      FinishView ();
     176    } else {
     177#ifdef GEANT4_QT_DEBUG
     178      printf("***************************  CASE 3 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
     179#endif
     180      // However, union cutaways are implemented in DrawDisplayLists, so make
     181      // an extra pass...
     182      if (fVP.IsCutaway() &&
     183          fVP.GetCutawayMode() == G4ViewParameters::cutawayUnion) {
     184        ClearView();
     185        DrawDisplayLists ();
     186        FinishView ();
     187#ifdef GEANT4_QT_DEBUG
     188        printf("***************************  CASE 4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
     189#endif
     190      } else { // ADD TO AVOID KernelVisit=1 and nothing to display
     191        DrawDisplayLists ();
     192        FinishView ();
     193      }
     194    }
     195  }
     196
     197#ifdef GEANT4_QT_DEBUG
     198  printf("G4OpenGLStoredQtViewer::DrawView %d %d ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n",WinSize_x, WinSize_y);
     199#endif
     200  hasToRepaint =true;
    205201}
    206202
     
    226222
    227223/**
    228  - Lors du resize de la fenetre, on doit non pas redessiner le detecteur, mais aussi les evenements
    229  */
     224   - Lors du resize de la fenetre, on doit non pas redessiner le detecteur, mais aussi les evenements
     225*/
    230226void G4OpenGLStoredQtViewer::resizeGL(
    231  int aWidth
    232 ,int aHeight)
     227                                      int aWidth
     228                                      ,int aHeight)
    233229
    234230  setupViewport(aWidth,aHeight);
    235231
    236 //   glViewport(0, 0, aWidth, aHeight);
    237 //   glMatrixMode(GL_PROJECTION);
    238 //   glMatrixMode(GL_MODELVIEW);
    239 
    240    if (((WinSize_x != (G4int)aWidth)) || (WinSize_y != (G4int) aHeight)) {
    241      hasToRepaint =true;
    242    }
    243    WinSize_x = (G4int) aWidth;
    244    WinSize_y = (G4int) aHeight;
    245 
     232  if (((WinSize_x != (G4int)aWidth)) || (WinSize_y != (G4int) aHeight)) {
     233    hasToRepaint =true;
     234  }
     235  WinSize_x = (G4int) aWidth;
     236  WinSize_y = (G4int) aHeight;
     237 
    246238#ifdef GEANT4_QT_DEBUG
    247239  printf("G4OpenGLStoredQtViewer::resizeGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %d %d=%d %d=%d\n",hasToRepaint,width(),aWidth,height(),aHeight);
     
    251243
    252244/**
    253 @see :
     245    @see :
    254246*/
    255247
    256248void G4OpenGLStoredQtViewer::paintGL()
    257  {
    258      
    259      if (!readyToPaint) {
    260 #ifdef GEANT4_QT_DEBUG
    261        printf("G4OpenGLStoredQtViewer::paintGL ============  Not ready %d\n",readyToPaint);
    262 #endif
    263        readyToPaint= true;
    264        return;
    265      }
    266      // DO NOT RESIZE IF SIZE HAS NOT CHANGE :
    267      //    WHEN CLICK ON THE FRAME FOR EXAMPLE
    268      //    EXECEPT WHEN MOUSE MOVE EVENT
    269      if ( !hasToRepaint) {
    270        if (((WinSize_x == (G4int)width())) &&(WinSize_y == (G4int) height())) {
    271 #ifdef GEANT4_QT_DEBUG
    272          printf("G4OpenGLStoredQtViewer::paintGL ============  Dont repaint\n");
    273 #endif
    274          return;
    275        }
    276      }
    277      nbPaint++;
    278 #ifdef GEANT4_QT_DEBUG
    279      printf("G4OpenGLStoredQtViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %d ready %d\n",nbPaint,readyToPaint);
    280 #endif
    281      WinSize_x = (G4int) width();
    282      WinSize_y = (G4int) height();
    283      
    284      setupViewport(width(),height());
    285      //     glViewport (0, 0, width(), height());
    286      //   glLoadIdentity();
    287      
    288      
    289      SetView();
    290      
    291      //   //  printf("before ClearView\n");
    292 #ifdef GEANT4_QT_DEBUG
    293      printf("    ClearView\n");
    294 #endif
    295      
    296      ClearView (); //ok, put the background correct
    297      DrawView();
    298      
    299      hasToRepaint =false;
    300      
    301 #ifdef GEANT4_QT_DEBUG
    302      printf("G4OpenGLStoredQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %d ready %d\n",nbPaint,readyToPaint);
    303 #endif
    304  }
     249{
     250     
     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
     266      return;
     267    }
     268  }
     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  setupViewport(width(),height());
     277  //     glViewport (0, 0, width(), height());
     278  //   glLoadIdentity();
     279     
     280     
     281  SetView();
     282     
     283  //   //  printf("before ClearView\n");
     284#ifdef GEANT4_QT_DEBUG
     285  printf("    ClearView\n");
     286#endif
     287     
     288  ClearView (); //ok, put the background correct
     289  DrawView();
     290     
     291  hasToRepaint =false;
     292     
     293#ifdef GEANT4_QT_DEBUG
     294  printf("G4OpenGLStoredQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %d ready %d\n",nbPaint,readyToPaint);
     295#endif
     296}
    305297
    306298void G4OpenGLStoredQtViewer::mousePressEvent(QMouseEvent *event)
    307299{
    308 #ifdef GEANT4_QT_DEBUG
    309   printf("G4OpenGLStoredQtViewer::mousePressEvent\n");
    310 #endif
    311   setMouseTracking(true);
    312   G4MousePressEvent(event->pos());
     300  if ((event->buttons() & Qt::LeftButton) && (event->modifiers() & Qt::NoModifier)) {
     301#ifdef GEANT4_QT_DEBUG
     302    printf("G4OpenGLStoredQtViewer::mousePressEvent\n");
     303#endif
     304    setMouseTracking(true);
     305    G4MousePressEvent(event->pos());
     306  }
    313307}
    314308
     
    322316  printf("G4OpenGLStoredQtViewer::mouseDoubleClickEvent\n");
    323317#endif
    324 //   setMouseTracking(true);
    325 //   glBufferImage = grabFrameBuffer().convertToFormat(QImage::Format_ARGB32);//_Premultiplied); 
     318  //   setMouseTracking(true);
     319  //   glBufferImage = grabFrameBuffer().convertToFormat(QImage::Format_ARGB32);//_Premultiplied); 
    326320}
    327321
     
    331325  printf("G4OpenGLStoredQtViewer::mouseReleaseEvent\n");
    332326#endif
    333 //   setMouseTracking(false);
     327  //   setMouseTracking(false);
    334328}
    335329
     
    338332
    339333#if QT_VERSION < 0x040000
    340     G4MouseMoveEvent(event->x(),event->y(),event->state());
     334  G4MouseMoveEvent(event->x(),event->y(),event->state());
    341335#else
    342     G4MouseMoveEvent(event->x(),event->y(),event->buttons());
     336  G4MouseMoveEvent(event->x(),event->y(),event->buttons());
    343337#endif
    344338}
Note: See TracChangeset for help on using the changeset viewer.