Changeset 682 for trunk/geant4
- Timestamp:
- Jan 11, 2008, 7:03:41 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/geant4/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc
r678 r682 37 37 38 38 #include "G4OpenGLStoredQtViewer.hh" 39 #include "G4VisManager.hh"40 39 41 40 #include "G4ios.hh" … … 43 42 //#include <qmouseevent.h> 44 43 #include <qevent.h> // include <qcontextmenuevent.h> 45 #include <qpainter.h>46 44 47 45 G4OpenGLStoredQtViewer::G4OpenGLStoredQtViewer 48 46 (G4OpenGLStoredSceneHandler& sceneHandler, 49 47 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; 58 56 if (fViewId < 0) return; // In case error in base class instantiation. 59 57 } … … 61 59 G4OpenGLStoredQtViewer::~G4OpenGLStoredQtViewer() { 62 60 #ifdef GEANT4_QT_DEBUG 63 printf("GLWidget::~GLWidget \n");64 #endif 65 makeCurrent();66 // this is connect to the Dialog for deleting it properly67 // 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"); 71 69 #endif 72 70 } … … 74 72 void G4OpenGLStoredQtViewer::Initialise() { 75 73 #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"); 82 80 #endif 83 81 CreateMainWindow (this); … … 85 83 printf("G4OpenGLStoredQtViewer::Initialise () 3\n"); 86 84 #endif 87 //CreateFontLists (); // FIXME Does nothing!85 CreateFontLists (); // FIXME Does nothing! 88 86 89 87 #ifdef GEANT4_QT_DEBUG … … 99 97 ClearView (); //ok, put the background correct 100 98 FinishView(); 101 #ifdef GEANT4_QT_DEBUG102 printf("G4OpenGLStoredQtViewer::Initialise () 4\n");103 #endif104 99 } 105 100 106 101 void G4OpenGLStoredQtViewer::initializeGL () { 107 102 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 (); 118 113 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"); 126 121 #endif 127 122 } … … 129 124 130 125 void G4OpenGLStoredQtViewer::DrawView () { 126 131 127 #ifdef GEANT4_QT_DEBUG 132 128 printf("G4OpenGLStoredQtViewer::DrawView %d %d VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n",WinSize_x, WinSize_y); 133 129 #endif 134 G4ViewParameters::DrawingStyle style = GetViewParameters().GetDrawingStyle();135 136 //Make sure current viewer is attached and clean...137 //Qt version needed138 // 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 in142 // /vis/viewer/rebuild, but if not, make decision and set flag only143 // 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 (); 147 143 148 G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets).149 ProcessView ();144 G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets). 145 ProcessView (); 150 146 151 147 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 already173 // 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 make185 // 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 display195 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; 205 201 } 206 202 … … 226 222 227 223 /** 228 - Lors du resize de la fenetre, on doit non pas redessiner le detecteur, mais aussi les evenements229 */224 - Lors du resize de la fenetre, on doit non pas redessiner le detecteur, mais aussi les evenements 225 */ 230 226 void G4OpenGLStoredQtViewer::resizeGL( 231 int aWidth232 ,int aHeight)227 int aWidth 228 ,int aHeight) 233 229 { 234 230 setupViewport(aWidth,aHeight); 235 231 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 246 238 #ifdef GEANT4_QT_DEBUG 247 239 printf("G4OpenGLStoredQtViewer::resizeGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %d %d=%d %d=%d\n",hasToRepaint,width(),aWidth,height(),aHeight); … … 251 243 252 244 /** 253 @see :245 @see : 254 246 */ 255 247 256 248 void 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 EXAMPLE268 // EXECEPT WHEN MOUSE MOVE EVENT269 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 correct297 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 } 305 297 306 298 void G4OpenGLStoredQtViewer::mousePressEvent(QMouseEvent *event) 307 299 { 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 } 313 307 } 314 308 … … 322 316 printf("G4OpenGLStoredQtViewer::mouseDoubleClickEvent\n"); 323 317 #endif 324 // setMouseTracking(true);325 // glBufferImage = grabFrameBuffer().convertToFormat(QImage::Format_ARGB32);//_Premultiplied);318 // setMouseTracking(true); 319 // glBufferImage = grabFrameBuffer().convertToFormat(QImage::Format_ARGB32);//_Premultiplied); 326 320 } 327 321 … … 331 325 printf("G4OpenGLStoredQtViewer::mouseReleaseEvent\n"); 332 326 #endif 333 // setMouseTracking(false);327 // setMouseTracking(false); 334 328 } 335 329 … … 338 332 339 333 #if QT_VERSION < 0x040000 340 G4MouseMoveEvent(event->x(),event->y(),event->state());334 G4MouseMoveEvent(event->x(),event->y(),event->state()); 341 335 #else 342 G4MouseMoveEvent(event->x(),event->y(),event->buttons());336 G4MouseMoveEvent(event->x(),event->y(),event->buttons()); 343 337 #endif 344 338 }
Note:
See TracChangeset
for help on using the changeset viewer.
