Changeset 1039 for trunk/source


Ignore:
Timestamp:
May 12, 2009, 5:26:25 PM (17 years ago)
Author:
garnier
Message:

remise a jour

Location:
trunk/source/visualization/OpenGL
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/visualization/OpenGL/include/G4OpenGLViewer.hh

    r1038 r1039  
    5959  virtual ~G4OpenGLViewer ();
    6060  void SetView    ();
    61   // Set view and lights, resize
    62   void RepaintGLView();
    63   // Refresh the view if needed
    6461  void HaloingFirstPass ();
    6562  void HaloingSecondPass ();
     
    6865  void HLRThirdPass ();
    6966  void InitializeGLView ();
    70   void ResizeGLView(unsigned int, unsigned int);
    71   // Resize the view and repaint if necessary
     67  void ResizeGLView();
     68  void ResizeWindow(unsigned int, unsigned int);
    7269  void Pick(GLdouble x, GLdouble y);
    7370  virtual void CreateFontLists () {}
     
    7572//////////////////////////////Vectored PostScript production functions///
    7673  void printEPS();
    77   // print EPS file. Depending of fVectoredPs, it will print Vectored or not 
    78 
     74  // print EPS file. Depending of fVectoredPs, it will print Vectored or not
     75 
    7976  unsigned int getWinWidth();
     77  G4bool sizeHasChanged();
     78  // return true if size has change since last redraw
    8079  unsigned int getWinHeight();
    8180  GLdouble getSceneNearWidth();
     
    8786  G4int                             fPrintSizeX;
    8887  G4int                             fPrintSizeY;
    89   G4bool                            fNeedRepaint;
    90   // 0 : No need to repaint    1: Need Repaint
    9188
    9289  G4OpenGLSceneHandler& fOpenGLSceneHandler;
     
    109106
    110107private :
     108  unsigned int fWinSize_x, fWinSize_y;
    111109  G4float                           fPointSize;
     110  G4bool fSizeHasChanged;
     111  // size of the OpenGL frame
    112112  bool printGl2PS();
    113   void ResizeGLView();
    114113  GLubyte* grabPixels (int inColor,
    115114                       unsigned int width,
     
    120119  bool printVectoredEPS();
    121120  // print vectored EPS files
    122   unsigned int fWinSize_x, fWinSize_y;
    123   // size of the OpenGL frame
    124121};
    125122
  • trunk/source/visualization/OpenGL/src/G4OpenGLImmediateQtViewer.cc

    r1038 r1039  
    5656  setFocusPolicy(Qt::StrongFocus); // enable keybord events
    5757#endif
    58 
    59   fNeedRepaint = false;
     58  hasToRepaint =false;
    6059
    6160  if (fViewId < 0) return;  // In case error in base class instantiation.
     
    7473  CreateFontLists ();
    7574
    76 #ifdef G4DEBUG_VIS_OGL
    77   printf("G4OpenGLImmediateQtViewer::Initialise END\n");
    78 #endif
    7975  readyToPaint = true;
    80 #ifdef G4DEBUG_VIS_OGL
    81   printf("G4OpenGLImmediateQtViewer::Initialise END 2\n");
    82 #endif
    83 
    8476}
    8577
    8678void G4OpenGLImmediateQtViewer::initializeGL () {
    87 #ifdef G4DEBUG_VIS_OGL
    88   printf("G4OpenGLImmediateQtViewer::initializeGL\n");
    89 #endif
    9079
    9180  InitializeGLView ();
    92 #ifdef G4DEBUG_VIS_OGL
    93   printf("G4OpenGLImmediateQtViewer::initializeGL middle\n");
    94 #endif
    9581
    9682
     
    10692
    10793  if (fSceneHandler.GetScene() == 0) {
    108     fNeedRepaint = false;
     94    hasToRepaint =false;
    10995  } else {
    110     fNeedRepaint = true;
    111   }
    112 #ifdef G4DEBUG_VIS_OGL
    113   printf("G4OpenGLImmediateQtViewer::initializeGL END\n");
    114 #endif
     96    hasToRepaint =true;
     97  }
    11598
    11699}
     
    123106  printf("G4OpenGLImmediateQtViewer::DrawView  VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n");
    124107#endif
    125 
    126   // avoid problems at initialisation
    127   if (readyToPaint) {
    128     ComputeView();
    129   }
    130  
     108  // That's no the same logic as Stored Viewer, I don't know why...
     109  // see G4OpenGLStoredQtViewer::DrawView for more informations
     110
     111  updateQWidget();
    131112#ifdef G4DEBUG_VIS_OGL
    132113  printf("G4OpenGLImmediateQtViewer::DrawView  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
     
    138119
    139120#ifdef G4DEBUG_VIS_OGL
    140   printf("G4OpenGLImmediateQtViewer::ComputeView   VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n");
     121  printf("G4OpenGLImmediateQtViewer::ComputeView %d %d   VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n",getWinWidth(), getWinHeight());
    141122#endif
    142123  makeCurrent();
     
    169150   
    170151#ifdef G4DEBUG_VIS_OGL
    171   printf("G4OpenGLImmediateQtViewer::ComputeView  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
    172 #endif
    173   fNeedRepaint = false;
     152  printf("G4OpenGLImmediateQtViewer::ComputeView %d %d ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n",getWinWidth(), getWinHeight());
     153#endif
     154  hasToRepaint = true;
    174155}
    175156
     
    194175,int aHeight)
    195176
    196 #ifdef G4DEBUG_VIS_OGL
    197   printf("\n\nG4OpenGLImmediateQtViewer::resizeGL VVVVVV %d %d ??\n",aWidth,aHeight);
    198 #endif
    199   ResizeGLView(aWidth,aHeight);
    200 #ifdef G4DEBUG_VIS_OGL
    201   printf("\n\nG4OpenGLImmediateQtViewer::resizeGL END\n");
    202 #endif
     177  ResizeWindow(aWidth,aHeight);
     178  hasToRepaint = sizeHasChanged();
    203179}
    204180
     
    206182void G4OpenGLImmediateQtViewer::paintGL()
    207183{
    208    
    209184#ifdef G4DEBUG_VIS_OGL
    210185  printf("\n\nG4OpenGLImmediateQtViewer::paintGL ??\n");
    211186#endif
    212   if (fNeedRepaint) {
    213 #ifdef G4DEBUG_VIS_OGL
    214     printf("\n\nG4OpenGLImmediateQtViewer::Need ??\n");
    215 #endif
    216     if (readyToPaint) {
    217 #ifdef G4DEBUG_VIS_OGL
    218   printf("\n\nG4OpenGLImmediateQtViewer::ready ??\n");
    219 #endif
    220       RepaintGLView();
    221       fNeedRepaint = false;
     187  if (!readyToPaint) {
     188    readyToPaint= true;
     189    return;
     190  }
     191  // DO NOT RESIZE IF SIZE HAS NOT CHANGE
     192  if ( !hasToRepaint) {
     193    if (((getWinWidth() == (unsigned int)width())) &&(getWinHeight() == (unsigned int) height())) {
     194      return;
    222195    }
    223 #ifdef G4DEBUG_VIS_OGL
    224     else
    225       printf("\n\nG4OpenGLImmediateQtViewer::NOT ready ??\n");
    226 #endif
    227   }
    228 #ifdef G4DEBUG_VIS_OGL
    229   else
    230     printf("\n\nG4OpenGLImmediateQtViewer::NOT need ??\n");
    231 #endif
    232 
    233 #ifdef G4DEBUG_VIS_OGL
    234   printf("G4OpenGLImmediateQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ready\n\n\n");
     196  }
     197#ifdef G4DEBUG_VIS_OGL
     198  printf("G4OpenGLImmediateQtViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ready %d\n",readyToPaint);
     199#endif
     200
     201  SetView();
     202   
     203  ClearView (); //ok, put the background correct
     204  ComputeView();
     205
     206  hasToRepaint = false; // could be set to false by ComputeView
     207
     208#ifdef G4DEBUG_VIS_OGL
     209  printf("G4OpenGLImmediateQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ready %d\n\n\n",readyToPaint);
    235210#endif
    236211}
     
    277252
    278253void G4OpenGLImmediateQtViewer::updateQWidget() {
    279   fNeedRepaint = true;
     254  hasToRepaint= true;
    280255  updateGL();
    281   fNeedRepaint = false;
     256  hasToRepaint= false;
    282257}
    283258
  • trunk/source/visualization/OpenGL/src/G4OpenGLQtViewer.cc

    r1038 r1039  
    173173  GLWindow->setWindowTitle( name);
    174174#endif
     175  ResizeWindow(fVP.GetWindowSizeHintX(),fVP.GetWindowSizeHintY());
    175176
    176177  //useful for MACOSX, we have to compt the menuBar height
     
    182183    YPos = offset;
    183184  }
    184   GLWindow->resize(getWinWidth(),getWinHeight());
     185  GLWindow->resize(getWinWidth(), getWinHeight());
    185186  GLWindow->move(fVP.GetWindowAbsoluteLocationHintX(QApplication::desktop()->width()),YPos);
    186187  GLWindow->show();
  • trunk/source/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc

    r1038 r1039  
    5757  setFocusPolicy(Qt::StrongFocus); // enable keybord events
    5858#endif
    59   fNeedRepaint =false;
     59  hasToRepaint =false;
    6060
    6161  if (fViewId < 0) return;  // In case error in base class instantiation.
     
    7878 
    7979  readyToPaint = true;
    80 #ifdef G4DEBUG_VIS_OGL
    81   printf("G4OpenGLStoredQtViewer::Initialise END\n");
    82 #endif
    8380}
    8481
     
    9996
    10097  if (fSceneHandler.GetScene() == 0) {
    101     fNeedRepaint =false;
     98    hasToRepaint =false;
    10299  } else {
    103     fNeedRepaint =true;
     100    hasToRepaint =true;
    104101  }
    105102
     
    120117  // And we loose the redraw of things !
    121118 
    122   // avoid problems at initialisation
    123   if (readyToPaint) {
    124     ComputeView();
    125   }
    126 
     119  ComputeView();
    127120#ifdef G4DEBUG_VIS_OGL
    128121  printf("G4OpenGLStoredQtViewer::DrawView  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
     
    133126
    134127#ifdef G4DEBUG_VIS_OGL
    135   printf("G4OpenGLStoredQtViewer::ComputeView  VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n");
     128  printf("G4OpenGLStoredQtViewer::ComputeView %d %d   VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n",getWinWidth(), getWinHeight());
    136129#endif
    137130  makeCurrent();
     
    202195
    203196#ifdef G4DEBUG_VIS_OGL
    204   printf("G4OpenGLStoredQtViewer::ComputeView ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
    205 #endif
     197  printf("G4OpenGLStoredQtViewer::ComputeView %d %d ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n",getWinWidth(), getWinHeight());
     198#endif
     199  hasToRepaint =true;
    206200}
    207201
     
    211205*/
    212206void G4OpenGLStoredQtViewer::resizeGL(
    213  int aWidth
    214 ,int aHeight)
     207                                      int aWidth
     208                                      ,int aHeight)
    215209
    216210  // Set new size, it will be update when next Repaint()->SetView() called
    217   ResizeGLView(aWidth,aHeight);
    218   //  fNeedRepaint = true;
     211  ResizeWindow(aWidth,aHeight);
     212  hasToRepaint = sizeHasChanged();
    219213}
    220214
     
    229223    return;
    230224  }
    231   RepaintGLView();
    232 
     225  // DO NOT RESIZE IF SIZE HAS NOT CHANGE :
     226  //    WHEN CLICK ON THE FRAME FOR EXAMPLE
     227  //    EXECEPT WHEN MOUSE MOVE EVENT
     228  if ( !hasToRepaint) {
     229    if (((getWinWidth() == (unsigned int)width())) &&(getWinHeight() == (unsigned int) height())) {
     230      return;
     231    }
     232  }
     233#ifdef G4DEBUG_VIS_OGL
     234  printf("G4OpenGLStoredQtViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ready %d\n",readyToPaint);
     235#endif
     236
     237  SetView();
     238         
     239  ClearView (); //ok, put the background correct
     240  ComputeView();
     241     
     242  hasToRepaint =false;
     243     
    233244#ifdef G4DEBUG_VIS_OGL
    234245  printf("G4OpenGLStoredQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ready %d\n",readyToPaint);
     
    277288
    278289void G4OpenGLStoredQtViewer::updateQWidget() {
    279   fNeedRepaint= true;
     290  hasToRepaint= true;
    280291  updateGL();
    281   fNeedRepaint= false;
     292  hasToRepaint= false;
    282293}
    283294
  • trunk/source/visualization/OpenGL/src/G4OpenGLViewer.cc

    r1038 r1039  
    8585fDisplayLightFrontGreen(1.),
    8686fDisplayLightFrontBlue(0.),
    87 fPointSize (0)
     87fPointSize (0),
     88fSizeHasChanged(0)
    8889{
    8990  // Make changes to view parameters for OpenGL...
     
    135136
    136137
    137 void G4OpenGLViewer::ResizeGLView(unsigned int aWidth,unsigned int aHeight)
    138 {
     138void G4OpenGLViewer::ResizeWindow(unsigned int aWidth, unsigned int aHeight) {
    139139  if ((fWinSize_x != aWidth) || (fWinSize_y != aHeight)) {
    140140    fWinSize_x = aWidth;
    141141    fWinSize_y = aHeight;
    142     ResizeGLView();
    143   }
    144 }
    145 
    146 void G4OpenGLViewer::RepaintGLView()
    147 {
    148   // DO NOT REPAINT IF NO REFRESH IS NEED
    149 //   if ( !fNeedRepaint) {
    150 //     return;
    151 //   }
    152 #ifdef G4DEBUG_VIS_OGL
    153   printf("G4OpenGLViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV \n");
    154 #endif
    155 
    156   fNeedRepaint = true; // could be set to false by ComputeView
    157   SetView();
    158   ClearView ();
    159   DrawView();
    160 
    161   fNeedRepaint = false; // could be set to false by ComputeView
    162 
    163 #ifdef G4DEBUG_VIS_OGL
    164   printf("G4OpenGLViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
    165 #endif
    166 
     142    fSizeHasChanged = true;
     143  } else {
     144    fSizeHasChanged = false;
     145  }
    167146}
    168147
     
    222201#endif
    223202  glViewport(X, Y, side, side);
    224 
    225   RepaintGLView();
    226 
    227203  //    glViewport(0, 0, fWinSize_x,fWinSize_y); 
    228204 
    229205
    230 }
    231 
    232 
    233 unsigned int G4OpenGLViewer::getWinWidth () {
    234   return fWinSize_x;
    235 }
    236 
    237 unsigned int G4OpenGLViewer::getWinHeight () {
    238   return fWinSize_y;
    239206}
    240207
     
    285252 
    286253  // FIXME
    287   ResizeGLView(fWinSize_x,fWinSize_y);
     254  ResizeGLView();
    288255  //SHOULD SetWindowsSizeHint()...
    289256
     
    665632  }
    666633
    667 //   width=8192;
    668 //   height=8192;
     634  width=8192;
     635  height=8192;
    669636
    670637  if (!fGL2PSAction) return false;
     
    675642  int Y = fWinSize_y;
    676643
    677   ResizeGLView(width,height);
     644  fWinSize_x = width;
     645  fWinSize_y = height;
     646  ResizeGLView();
    678647  if (fGL2PSAction->enableFileWriting()) {
    679648
     
    687656  }
    688657
    689   ResizeGLView(X,Y);
     658  fWinSize_x = X;
     659  fWinSize_y = Y;
     660  ResizeGLView();
    690661
    691662  // Reset for next time (useful is size change)
     
    694665
    695666  return true;
     667}
     668
     669unsigned int G4OpenGLViewer::getWinWidth() {
     670  return fWinSize_x;
     671}
     672
     673unsigned int G4OpenGLViewer::getWinHeight() {
     674  return fWinSize_y;
     675}
     676
     677G4bool G4OpenGLViewer::sizeHasChanged() {
     678  return fSizeHasChanged;
    696679}
    697680
  • trunk/source/visualization/OpenGL/src/G4OpenGLXViewer.cc

    r1037 r1039  
    231231  size_hints = XAllocSizeHints();
    232232   
     233  ResizeWindow(fVP.GetWindowSizeHintX(),fVP.GetWindowSizeHintY());
     234
    233235  G4int x_origin = fVP.GetWindowAbsoluteLocationHintX(DisplayWidth(dpy, vi -> screen));
    234236
  • trunk/source/visualization/OpenGL/src/G4OpenGLXmViewer.cc

    r1037 r1039  
    146146  borcol = XBlackPixelOfScreen (XtScreen(shell));
    147147 
     148  ResizeWindow(fVP.GetWindowSizeHintX(),fVP.GetWindowSizeHintY());
     149
    148150  G4int x_origin = fVP.GetWindowAbsoluteLocationHintX(DisplayWidth(dpy, vi -> screen));
    149151
  • trunk/source/visualization/OpenGL/src/G4OpenGLXmWindowHandlingCallbacks.cc

    r1038 r1039  
    6262                 NULL);
    6363
    64   pView->ResizeGLView((G4int) width,(G4int) height);
    65   // will call  pView->RepaintGLView() if necessary;
     64  pView->ResizeWindow(width,height);
    6665
    6766  glXMakeCurrent (pView->dpy, XtWindow(pView->glxarea), pView->cx);
     
    7069  printf("G4OpenGLXmViewer::expose_callback\n");
    7170#endif
    72 
     71  pView->SetView ();
     72  pView->ClearView ();
     73  pView->DrawView ();
    7374}
    7475
Note: See TracChangeset for help on using the changeset viewer.