Changeset 720 for trunk/geant4/visualization/OpenGL
- Timestamp:
- Feb 11, 2008, 2:49:22 PM (17 years ago)
- Location:
- trunk/geant4/visualization/OpenGL
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/geant4/visualization/OpenGL/include/G4OpenGLQtViewer.hh
r718 r720 76 76 virtual void CreateMainWindow (QGLWidget*); 77 77 void manageContextMenuEvent(QContextMenuEvent *e); 78 void G4MousePressEvent(QPoint); 79 void G4MouseReleaseEvent(QPoint p); 78 #if QT_VERSION < 0x040000 79 void G4MousePressEvent(QPoint, Qt::ButtonState); 80 #else 81 void G4MousePressEvent(QPoint, Qt::MouseButtons); 82 #endif 80 83 void G4MouseDoubleClickEvent(QPoint p); 81 84 #if QT_VERSION < 0x040000 82 void G4Mouse Event(int, int, Qt::ButtonState);85 void G4MouseMoveEvent(int, int, Qt::ButtonState,bool mAutoMove = false); 83 86 #else 84 void G4Mouse Event(int, int, Qt::MouseButtons);87 void G4MouseMoveEvent(int, int, Qt::MouseButtons,bool mAutoMove = false); 85 88 #endif 86 void G4MouseRotateEvent(G4double, G4double);87 void G4MouseMoveEvent(G4double, G4double, G4double);88 89 void G4keyPressEvent (QKeyEvent * event); 90 void rotateScene(G4double, G4double); 91 void moveScene(G4double, G4double, G4double,bool); 89 92 90 93 … … 94 97 QGLWidget* fWindow; 95 98 QDialog* GLWindow; 99 bool hasPendingEvents(); 96 100 97 101 private: … … 111 115 mouseActions fMouseAction; // 1: rotate 2:move 3:pick 4:shortcuts 112 116 QPoint fLastPos; 117 /** delta of move event */ 118 QPoint fDeltaPos; 113 119 /** delta of scene rotation. This delta is put in degree */ 114 120 G4double fDeltaRotation; … … 121 127 /** To ensure key event are keep one by one */ 122 128 bool holdKeyEvent; 129 bool fAutoMove; 123 130 QAction *fRotateAction; 124 131 QAction *fMoveAction; -
trunk/geant4/visualization/OpenGL/src/G4OpenGLQtViewer.cc
r718 r720 66 66 #endif 67 67 68 #include <qapplication.h> 68 69 #include <qmessagebox.h> 69 70 #include <qfiledialog.h> … … 292 293 ,fDeltaZoom(0.1) 293 294 ,holdKeyEvent(false) 295 ,fAutoMove(false) 294 296 { 295 297 #ifdef GEANT4_QT_DEBUG … … 985 987 } else if (aAction == STYLE4) { // display shortcuts 986 988 #if QT_VERSION < 0x040000 987 fShortcutsAction->setOn (true);988 #else 989 fShortcutsAction->setChecked (true);989 // fShortcutsAction->setOn (true); 990 #else 991 // fShortcutsAction->setChecked (true); 990 992 #endif 991 993 … … 1414 1416 @param p mouse click point 1415 1417 */ 1416 void G4OpenGLQtViewer::G4MousePressEvent(QPoint p) 1418 #if QT_VERSION < 0x040000 1419 void G4OpenGLQtViewer::G4MousePressEvent(QPoint p,Qt::ButtonState mButtons) 1420 #else 1421 void G4OpenGLQtViewer::G4MousePressEvent(QPoint p,Qt::MouseButtons mButtons) 1422 #endif 1417 1423 { 1424 fAutoMove = false; // stop automove 1418 1425 fLastPos = p; 1419 1426 if (fMouseAction == STYLE2){ // pick … … 1427 1434 @param pos_y mouse y position 1428 1435 @param mButtons mouse button active 1429 */ 1430 1431 #if QT_VERSION < 0x040000 1432 void G4OpenGLQtViewer::G4MouseEvent(int pos_x, int pos_y,Qt::ButtonState mButtons) 1433 #else 1434 void G4OpenGLQtViewer::G4MouseEvent(int pos_x, int pos_y,Qt::MouseButtons mButtons) 1436 @param mAutoMove true: apply this move till another evnt came, false :one time move 1437 */ 1438 1439 #if QT_VERSION < 0x040000 1440 void G4OpenGLQtViewer::G4MouseMoveEvent(int pos_x, int pos_y,Qt::ButtonState mButtons,bool mAutoMove) 1441 #else 1442 void G4OpenGLQtViewer::G4MouseMoveEvent(int pos_x, int pos_y,Qt::MouseButtons mButtons,bool mAutoMove) 1435 1443 #endif 1436 1444 { 1437 1438 int dx = fLastPos.x() - pos_x; 1439 int dy = fLastPos.y() - pos_y; 1440 1445 fAutoMove = mAutoMove; 1446 #ifdef GEANT4_QT_DEBUG 1447 printf(" mouse move event %d %d\n",pos_x,pos_y); 1448 #endif 1449 1450 if (!fAutoMove) { // keep old delta if automove 1451 fDeltaPos = QPoint(fLastPos.x() - pos_x, fLastPos.y() - pos_y); 1452 } 1453 1454 if ((fDeltaPos.x() == 0) && (fDeltaPos.y() == 0)) { 1455 fAutoMove = false; 1456 } 1441 1457 1442 1458 if (fMouseAction == STYLE1) { // rotate 1443 1459 if (mButtons & Qt::LeftButton) { 1444 G4MouseRotateEvent(dx,dy); 1460 if (fAutoMove) { 1461 while (fAutoMove) { 1462 rotateScene(fDeltaPos.x(),fDeltaPos.y()); 1463 #ifdef GEANT4_QT_DEBUG 1464 printf(" Processiongevent %d %d\n",fDeltaPos.x(),fDeltaPos.y()); 1465 #endif 1466 ((QApplication*)G4Qt::getInstance ())->processEvents(); 1467 } 1468 } else { 1469 rotateScene(fDeltaPos.x(),fDeltaPos.y()); 1470 } 1445 1471 } 1446 1472 } else if (fMouseAction == STYLE2) { // move 1447 1473 if (mButtons & Qt::LeftButton) { 1448 G4double coef = ((G4double)getSceneNearWidth())/((G4double)WinSize_x); 1449 if (WinSize_y <WinSize_x) { 1450 coef = ((G4double)getSceneNearWidth())/((G4double)WinSize_y); 1474 if (fAutoMove) { 1475 while (fAutoMove) { 1476 moveScene(-fDeltaPos.x(),-fDeltaPos.y(),0,true); 1477 } 1478 } else { 1479 moveScene(-fDeltaPos.x(),-fDeltaPos.y(),0,true); 1451 1480 } 1452 fVP.IncrementPan(dx*coef,-dy*coef);1453 updateQWidget();1454 1481 } 1455 1482 } 1456 1483 fLastPos = QPoint(pos_x, pos_y); 1457 } 1484 #ifdef GEANT4_QT_DEBUG 1485 if (mButtons & Qt::LeftButton) { 1486 printf(" end of mouse move event %d %d delta:%d %d\n",pos_x,pos_y,fDeltaPos.x(),fDeltaPos.y()); 1487 } else { 1488 printf(" end of mouse move event %d %d delta:%d %d --------------NO BUTTON\n",pos_x,pos_y,fDeltaPos.x(),fDeltaPos.y()); 1489 } 1490 #endif 1491 } 1492 1458 1493 1459 1494 /** … … 1461 1496 @param dx delta mouse x position 1462 1497 @param dy delta mouse y position 1463 */ 1464 1465 void G4OpenGLQtViewer::G4MouseMoveEvent(G4double dx,G4double dy, G4double dz) 1498 @param mouseMove : true if even comes froma mouse move, false if even comes from key action 1499 */ 1500 1501 void G4OpenGLQtViewer::moveScene(G4double dx,G4double dy, G4double dz,bool mouseMove) 1466 1502 { 1467 GLdouble coefTrans = getSceneNearWidth()*fDeltaSceneTranslation; 1468 GLdouble coefDepth = getSceneDepth()*fDeltaDepth; 1469 1503 G4double coefTrans = 0; 1504 GLdouble coefDepth = 0; 1505 if(mouseMove) { 1506 coefTrans = ((G4double)getSceneNearWidth())/((G4double)WinSize_x); 1507 if (WinSize_y <WinSize_x) { 1508 coefTrans = ((G4double)getSceneNearWidth())/((G4double)WinSize_y); 1509 } 1510 } else { 1511 coefTrans = getSceneNearWidth()*fDeltaSceneTranslation; 1512 coefDepth = getSceneDepth()*fDeltaDepth; 1513 } 1470 1514 fVP.IncrementPan(-dx*coefTrans,dy*coefTrans,dz*coefDepth); 1471 1515 … … 1479 1523 */ 1480 1524 1481 void G4OpenGLQtViewer:: G4MouseRotateEvent(G4double dx, G4double dy)1525 void G4OpenGLQtViewer::rotateScene(G4double dx, G4double dy) 1482 1526 { 1483 1527 dx = dx * fDeltaRotation; … … 1827 1871 1828 1872 1873 1829 1874 void G4OpenGLQtViewer::G4keyPressEvent (QKeyEvent * event) 1830 1875 { … … 1840 1885 #endif 1841 1886 1842 G4MouseMoveEvent(0,0,1);1887 moveScene(0,0,1,false); 1843 1888 } 1844 1889 #if QT_VERSION < 0x040000 … … 1847 1892 else if ((event->key() == Qt::Key_Up) && (event->modifiers() & Qt::AltModifier)) { // go forward 1848 1893 #endif 1849 G4MouseMoveEvent(0,0,-1);1894 moveScene(0,0,-1,false); 1850 1895 } 1851 1896 #if QT_VERSION < 0x040000 … … 1854 1899 if ((event->key() == Qt::Key_Down) && (event->modifiers() & Qt::ShiftModifier)) { // rotate phi 1855 1900 #endif 1856 G4MouseRotateEvent(0,-1);1901 rotateScene(0,-1); 1857 1902 } 1858 1903 #if QT_VERSION < 0x040000 … … 1861 1906 else if ((event->key() == Qt::Key_Up) && (event->modifiers() & Qt::ShiftModifier)) { // rotate phi 1862 1907 #endif 1863 G4MouseRotateEvent(0,1);1908 rotateScene(0,1); 1864 1909 } 1865 1910 #if QT_VERSION < 0x040000 … … 1868 1913 if ((event->key() == Qt::Key_Left) && (event->modifiers() & Qt::ShiftModifier)) { // rotate theta 1869 1914 #endif 1870 G4MouseRotateEvent(1,0);1915 rotateScene(1,0); 1871 1916 } 1872 1917 #if QT_VERSION < 0x040000 … … 1875 1920 else if ((event->key() == Qt::Key_Right) && (event->modifiers() & Qt::ShiftModifier)) { // rotate theta 1876 1921 #endif 1877 G4MouseRotateEvent(-1,0);1922 rotateScene(-1,0); 1878 1923 } 1879 1924 if (event->key() == Qt::Key_Escape) { // escaped from full screen … … 1903 1948 #endif 1904 1949 if (event->key() == Qt::Key_Down) { // go down 1905 G4MouseMoveEvent(0,1,0);1950 moveScene(0,-1,0,false); 1906 1951 } 1907 1952 else if (event->key() == Qt::Key_Up) { // go up 1908 G4MouseMoveEvent(0,-1,0);1953 moveScene(0,1,0,false); 1909 1954 } 1910 1955 if (event->key() == Qt::Key_Left) { // go left 1911 G4MouseMoveEvent(-1,0,0);1956 moveScene(-1,0,0,false); 1912 1957 } 1913 1958 else if (event->key() == Qt::Key_Right) { // go right 1914 G4MouseMoveEvent(1,0,0);1959 moveScene(1,0,0,false); 1915 1960 } 1916 1961 } 1917 1962 holdKeyEvent = false; 1918 1963 } 1964 1965 1966 bool G4OpenGLQtViewer::hasPendingEvents () { 1967 return ((QApplication*)G4Qt::getInstance ())->hasPendingEvents (); 1968 } 1969 1919 1970 1920 1971 /* -
trunk/geant4/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc
r709 r720 319 319 #endif 320 320 setMouseTracking(true); 321 G4MousePressEvent(event->pos() );321 G4MousePressEvent(event->pos(),Qt::LeftButton); 322 322 } 323 323 } … … 337 337 printf("G4OpenGLStoredQtViewer::mouseDoubleClickEvent\n"); 338 338 #endif 339 //setMouseTracking(true);339 setMouseTracking(true); 340 340 // glBufferImage = grabFrameBuffer().convertToFormat(QImage::Format_ARGB32);//_Premultiplied); 341 341 } … … 346 346 printf("G4OpenGLStoredQtViewer::mouseReleaseEvent\n"); 347 347 #endif 348 //setMouseTracking(false);348 setMouseTracking(false); 349 349 } 350 350 351 351 void G4OpenGLStoredQtViewer::mouseMoveEvent(QMouseEvent *event) 352 352 { 353 353 354 354 #if QT_VERSION < 0x040000 355 G4Mouse Event(event->x(),event->y(),event->state());355 G4MouseMoveEvent(event->x(),event->y(),event->state()); 356 356 #else 357 G4MouseEvent(event->x(),event->y(),event->buttons()); 357 G4MouseMoveEvent(event->x(),event->y(),event->buttons()); 358 #endif 359 #ifdef GEANT4_QT_DEBUG 360 if (hasPendingEvents ()) 361 G4MouseMoveEvent(event->x(),event->y(),event->buttons(),true); 358 362 #endif 359 363 }
Note: See TracChangeset
for help on using the changeset viewer.