Ignore:
Timestamp:
Feb 5, 2008, 4:46:54 PM (16 years ago)
Author:
garnier
Message:

correction du ticket #120

Location:
trunk/geant4/visualization/OpenGL
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/geant4/visualization/OpenGL/include/G4OpenGLQtViewer.hh

    r712 r713  
    8484  void G4MouseEvent(int, int, Qt::MouseButtons);
    8585#endif
    86   void G4MouseRotateEvent(int, int);
    87   void G4MouseMoveEvent(int, int, int);
     86  void G4MouseRotateEvent(G4double, G4double);
     87  void G4MouseMoveEvent(G4double, G4double, G4double);
    8888  void G4keyPressEvent (QKeyEvent * event);
    8989
     
    108108  QMenu *fContextMenu;
    109109#endif
    110   enum mouseActions {STYLE1,STYLE2,STYLE3};
    111   mouseActions fMouseAction; // 1: rotate 2:zoom 3:pick
     110  enum mouseActions {STYLE1,STYLE2,STYLE3,STYLE4};
     111  mouseActions fMouseAction; // 1: rotate 2:move 3:pick 4:shortcuts
    112112  QPoint fLastPos;
     113  /** delta of scene rotation. This delta is put in degree */
     114  G4double fDeltaRotation;
    113115  /** delta of scene translation. This delta is put in % of the scene view */
    114116  G4double fDeltaSceneTranslation;
     
    121123#if QT_VERSION < 0x040000
    122124  QPopupMenu *fMouseRotate;
     125  QPopupMenu *fMouseMove;
    123126  QPopupMenu *fMousePick;
    124127  QPopupMenu *fMouseShortcuts;
     
    129132#else
    130133  QAction *fMouseRotate;
     134  QAction *fMouseMove;
    131135  QAction *fMousePick;
    132136  QAction *fMouseShortcuts;
     
    139143private slots :
    140144  void actionMouseRotate();
     145  void actionMouseMove();
    141146  void actionMousePick();
    142147  void actionMouseShortcuts();
  • trunk/geant4/visualization/OpenGL/src/G4OpenGLQtViewer.cc

    r712 r713  
    287287  ,fContextMenu(0)
    288288  ,fMouseAction(STYLE1)
     289  ,fDeltaRotation(1)
    289290  ,fDeltaSceneTranslation(0.01)
    290291  ,fDeltaDepth(0.01)
     
    330331  // === Mouse menu ===
    331332
     333  mMouseAction->setCheckable(true);
     334
    332335  fMouseRotate = new QPopupMenu(mMouseAction);
    333336  mMouseAction->insertItem("&Rotate",fMouseRotate);
    334 
    335   mMouseAction->setCheckable(true);
    336337  fMouseRotate->setCheckable(true);
     338
     339  fMouseMove = new QPopupMenu(mMouseAction);
     340  mMouseAction->insertItem("&Move",fMouseMove);
     341  fMouseMove->setCheckable(true);
    337342
    338343  fMousePick = new QPopupMenu(mMouseAction);
     
    349354  fMouseRotate = mMouseAction->addAction("Rotate");
    350355  fMouseRotate->setCheckable(true);
     356
     357  fMouseMove = mMouseAction->addAction("Move");
     358  fMouseMove->setCheckable(true);
    351359
    352360  fMousePick = mMouseAction->addAction("Pick");
     
    366374                    SLOT(actionMouseRotate()));
    367375
     376  QObject ::connect(fMouseMove,
     377                    SIGNAL(activated(int)),
     378                    this,
     379                    SLOT(actionMouseMove()));
     380
    368381  QObject ::connect(fMousePick,
    369382                    SIGNAL(activated(int)),
     
    383396                    this,
    384397                    SLOT(actionMouseRotate()));
     398
     399  QObject ::connect(fMouseMove,
     400                    SIGNAL(triggered(bool)),
     401                    this,
     402                    SLOT(actionMouseMove()));
    385403
    386404  QObject ::connect(fMousePick,
     
    834852
    835853/**
     854   Slot activate when mouseAction->rotate menu is set
     855 */
     856void G4OpenGLQtViewer::actionMouseMove() {
     857  emit toggleMouseAction(STYLE2);
     858}
     859
     860
     861/**
    836862   Slot activate when mouseAction->zoom menu is set
    837863 */
     
    850876  printf("G4OpenGLQtViewer::actionMouseShortcuts \n");
    851877#endif
    852   emit toggleMouseAction(STYLE3);
     878  emit toggleMouseAction(STYLE4);
    853879}
    854880
     
    888914void G4OpenGLQtViewer::toggleMouseAction(mouseActions aAction) {
    889915 
     916  if ((aAction == STYLE1) || //initialize all
     917      (aAction == STYLE2) ||
     918      (aAction == STYLE3) ||
     919      (aAction == STYLE4))  {
     920#if QT_VERSION < 0x040000
     921    fMouseRotate->setItemChecked (0,false);
     922    fMouseMove->setItemChecked (0,false);
     923    fMousePick->setItemChecked (0,false);
     924    fMouseShortcuts->setItemChecked (0,false);
     925#else
     926    fMouseRotate->setChecked (false);
     927    fMouseMove->setChecked (false);
     928    fMousePick->setChecked (false);
     929    fMouseShortcuts->setChecked (false);
     930#endif
     931    fVP.SetPicking(false);
     932    fMouseAction = aAction;
     933  }
     934  // rotate
    890935  if (aAction == STYLE1) {  // rotate
    891936    G4cout << "Click and move mouse to rotate volume \n" << G4endl;
     
    898943#if QT_VERSION < 0x040000
    899944    fMouseRotate->setItemChecked (0,true);
    900     fMousePick->setItemChecked (0,false);
    901     fMouseShortcuts->setItemChecked (0,false);
    902945#else
    903946    fMouseRotate->setChecked (true);
    904     fMousePick->setChecked (false);
    905     fMouseShortcuts->setChecked (false);
    906 #endif
    907     fMouseAction = STYLE1;
    908     fVP.SetPicking(false);
    909   } else  if (aAction == STYLE2) { //pick
     947#endif
     948  } else  if (aAction == STYLE2) { //move
     949    G4cout << "Move camera point of view with mouse\n" << G4endl;
     950#if QT_VERSION < 0x040000
     951    fMouseMove->setItemChecked (0,true);
     952#else
     953    fMouseMove->setChecked (true);
     954#endif
     955  } else  if (aAction == STYLE3) { //pick
    910956    G4cout << "Click and pick \n" << G4endl;
    911957#if QT_VERSION < 0x040000
    912     fMouseRotate->setItemChecked (0,false);
    913958    fMousePick->setItemChecked (0,true);
    914959#else
    915     fMouseRotate->setChecked (false);
    916960    fMousePick->setChecked (true);
    917961#endif
    918962    fVP.SetPicking(true);
    919     fMouseAction = STYLE2;
    920   } else  if (aAction == STYLE3) {  // display shortcuts
    921 #if QT_VERSION < 0x040000
    922     fMouseRotate->setItemChecked (0,false);
    923     fMousePick->setItemChecked (0,false);
     963  } else  if (aAction == STYLE4) {  // display shortcuts
     964#if QT_VERSION < 0x040000
    924965    fMouseShortcuts->setItemChecked (0,true);
    925966#else
    926     fMouseRotate->setChecked (false);
    927     fMousePick->setChecked (false);
    928967    fMouseShortcuts->setChecked (true);
    929968#endif
    930     fMouseAction = STYLE3;
    931     fVP.SetPicking(false);
    932969
    933970    G4cout << "Click and move mouse to rotate volume \n" << G4endl;
     
    13761413#endif
    13771414{
     1415
    13781416  int dx = fLastPos.x() - pos_x;
    13791417  int dy = fLastPos.y() - pos_y;
     1418
     1419
    13801420  if (fMouseAction == STYLE1) {  // rotate
    13811421    if (mButtons & Qt::LeftButton) {
    13821422      G4MouseRotateEvent(dx,dy);
    13831423    }
     1424  } else if (fMouseAction == STYLE2) {  // move
     1425    if (mButtons & Qt::LeftButton) {
     1426      G4double coef = ((G4double)getSceneNearWidth())/((G4double)WinSize_x);
     1427      if (WinSize_y <WinSize_x) {
     1428        coef = ((G4double)getSceneNearWidth())/((G4double)WinSize_y);
     1429      }
     1430      fVP.IncrementPan(dx*coef,-dy*coef);
     1431      updateQWidget();
     1432    }
    13841433  }
    13851434  fLastPos = QPoint(pos_x, pos_y);
     
    13881437/**
    13891438   Move the scene of dx, dy, dz values.
    1390    Values are in
    1391    100 moves of 1 => move of 10cm of the scene
    13921439   @param dx delta mouse x position
    13931440   @param dy delta mouse y position
    13941441*/
    13951442
    1396 void G4OpenGLQtViewer::G4MouseMoveEvent(int dx, int dy, int dz)
     1443void G4OpenGLQtViewer::G4MouseMoveEvent(G4double dx,G4double dy, G4double dz)
    13971444{
    13981445  GLdouble coefTrans = getSceneNearWidth()*fDeltaSceneTranslation;
    13991446  GLdouble coefDepth = getSceneDepth()*fDeltaDepth;
    14001447
    1401   printf("Increment : %f %f\n",getSceneNearWidth(),getSceneDepth());
    1402   printf("Increment : %f %f %f \n",-dx*coefTrans,dy*coefTrans,dz*coefDepth);
    1403  fVP.IncrementPan(-dx*coefTrans,dy*coefTrans,dz*coefDepth);
     1448  fVP.IncrementPan(-dx*coefTrans,dy*coefTrans,dz*coefDepth);
    14041449 
    1405  updateQWidget();
     1450  updateQWidget();
    14061451}
    14071452
     
    14121457*/
    14131458
    1414 void G4OpenGLQtViewer::G4MouseRotateEvent(int dx, int dy)
     1459void G4OpenGLQtViewer::G4MouseRotateEvent(G4double dx, G4double dy)
    14151460{
     1461  dx = dx * fDeltaRotation;
     1462  dy = dy * fDeltaRotation;
     1463
    14161464  //phi spin stuff here
    14171465 
Note: See TracChangeset for help on using the changeset viewer.