Changeset 682 for trunk/geant4/visualization/OpenGL
- Timestamp:
- Jan 11, 2008, 7:03:41 PM (17 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 57 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 64 #endif 65 66 67 68 69 #ifdef GEANT4_QT_DEBUG 70 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 77 #endif 78 79 80 #ifdef GEANT4_QT_DEBUG 81 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 109 110 #ifdef GEANT4_QT_DEBUG 111 112 #endif 113 114 115 116 117 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 120 121 122 123 124 #ifdef GEANT4_QT_DEBUG 125 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 135 136 137 138 139 140 141 142 143 144 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 149 144 G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets). 145 ProcessView (); 150 146 151 147 152 153 154 #ifdef GEANT4_QT_DEBUG 155 156 #endif 157 158 159 160 161 162 163 164 165 166 167 168 #ifdef GEANT4_QT_DEBUG 169 170 #endif 171 172 173 174 175 #ifdef GEANT4_QT_DEBUG 176 177 #endif 178 179 180 181 #ifdef GEANT4_QT_DEBUG 182 183 #endif 184 185 186 187 188 189 190 191 #ifdef GEANT4_QT_DEBUG 192 193 #endif 194 195 196 197 198 199 200 201 #ifdef GEANT4_QT_DEBUG 202 203 #endif 204 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 260 #ifdef GEANT4_QT_DEBUG 261 262 #endif 263 264 265 266 267 268 269 270 271 #ifdef GEANT4_QT_DEBUG 272 273 #endif 274 275 276 277 278 #ifdef GEANT4_QT_DEBUG 279 280 #endif 281 282 283 284 285 286 287 288 289 290 291 292 #ifdef GEANT4_QT_DEBUG 293 294 #endif 295 296 297 298 299 300 301 #ifdef GEANT4_QT_DEBUG 302 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 334 G4MouseMoveEvent(event->x(),event->y(),event->state()); 341 335 #else 342 336 G4MouseMoveEvent(event->x(),event->y(),event->buttons()); 343 337 #endif 344 338 }
Note: See TracChangeset
for help on using the changeset viewer.