Changeset 720 for trunk


Ignore:
Timestamp:
Feb 11, 2008, 2:49:22 PM (16 years ago)
Author:
garnier
Message:

ajout de rotation et deplacement automatiques

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

Legend:

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

    r718 r720  
    7676  virtual void CreateMainWindow (QGLWidget*);
    7777  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
    8083  void G4MouseDoubleClickEvent(QPoint p);
    8184#if QT_VERSION < 0x040000
    82   void G4MouseEvent(int, int, Qt::ButtonState);
     85  void G4MouseMoveEvent(int, int, Qt::ButtonState,bool mAutoMove = false);
    8386#else
    84   void G4MouseEvent(int, int, Qt::MouseButtons);
     87  void G4MouseMoveEvent(int, int, Qt::MouseButtons,bool mAutoMove = false);
    8588#endif
    86   void G4MouseRotateEvent(G4double, G4double);
    87   void G4MouseMoveEvent(G4double, G4double, G4double);
    8889  void G4keyPressEvent (QKeyEvent * event);
     90  void rotateScene(G4double, G4double);
     91  void moveScene(G4double, G4double, G4double,bool);
    8992
    9093
     
    9497  QGLWidget* fWindow;
    9598  QDialog* GLWindow;
     99  bool hasPendingEvents();
    96100
    97101private:
     
    111115  mouseActions fMouseAction; // 1: rotate 2:move 3:pick 4:shortcuts
    112116  QPoint fLastPos;
     117  /** delta of move event */
     118  QPoint fDeltaPos;
    113119  /** delta of scene rotation. This delta is put in degree */
    114120  G4double fDeltaRotation;
     
    121127  /** To ensure key event are keep one by one */
    122128  bool holdKeyEvent;
     129  bool fAutoMove;
    123130  QAction *fRotateAction;
    124131  QAction *fMoveAction;
  • trunk/geant4/visualization/OpenGL/src/G4OpenGLQtViewer.cc

    r718 r720  
    6666#endif
    6767
     68#include <qapplication.h>
    6869#include <qmessagebox.h>
    6970#include <qfiledialog.h>
     
    292293  ,fDeltaZoom(0.1)
    293294  ,holdKeyEvent(false)
     295  ,fAutoMove(false)
    294296{
    295297#ifdef GEANT4_QT_DEBUG
     
    985987  } else  if (aAction == STYLE4) {  // display shortcuts
    986988#if QT_VERSION < 0x040000
    987     fShortcutsAction->setOn (true);
    988 #else
    989     fShortcutsAction->setChecked (true);
     989    //    fShortcutsAction->setOn (true);
     990#else
     991    //    fShortcutsAction->setChecked (true);
    990992#endif
    991993
     
    14141416   @param p mouse click point
    14151417*/
    1416 void G4OpenGLQtViewer::G4MousePressEvent(QPoint p)
     1418#if QT_VERSION < 0x040000
     1419void G4OpenGLQtViewer::G4MousePressEvent(QPoint p,Qt::ButtonState mButtons)
     1420#else
     1421void G4OpenGLQtViewer::G4MousePressEvent(QPoint p,Qt::MouseButtons mButtons)
     1422#endif
    14171423{
     1424  fAutoMove = false; // stop automove
    14181425  fLastPos = p;
    14191426  if (fMouseAction == STYLE2){  // pick
     
    14271434   @param pos_y mouse y position
    14281435   @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
     1440void 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)
    14351443#endif
    14361444{
    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  }
    14411457
    14421458  if (fMouseAction == STYLE1) {  // rotate
    14431459    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      }
    14451471    }
    14461472  } else if (fMouseAction == STYLE2) {  // move
    14471473    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);
    14511480      }
    1452       fVP.IncrementPan(dx*coef,-dy*coef);
    1453       updateQWidget();
    14541481    }
    14551482  }
    14561483  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
    14581493
    14591494/**
     
    14611496   @param dx delta mouse x position
    14621497   @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
     1501void G4OpenGLQtViewer::moveScene(G4double dx,G4double dy, G4double dz,bool mouseMove)
    14661502{
    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  }
    14701514  fVP.IncrementPan(-dx*coefTrans,dy*coefTrans,dz*coefDepth);
    14711515 
     
    14791523*/
    14801524
    1481 void G4OpenGLQtViewer::G4MouseRotateEvent(G4double dx, G4double dy)
     1525void G4OpenGLQtViewer::rotateScene(G4double dx, G4double dy)
    14821526{
    14831527  dx = dx * fDeltaRotation;
     
    18271871
    18281872
     1873
    18291874void G4OpenGLQtViewer::G4keyPressEvent (QKeyEvent * event)
    18301875{
     
    18401885#endif
    18411886   
    1842     G4MouseMoveEvent(0,0,1);
     1887    moveScene(0,0,1,false);
    18431888  }
    18441889#if QT_VERSION < 0x040000
     
    18471892  else if ((event->key() == Qt::Key_Up) && (event->modifiers() & Qt::AltModifier)) { // go forward
    18481893#endif
    1849     G4MouseMoveEvent(0,0,-1);
     1894    moveScene(0,0,-1,false);
    18501895  }
    18511896#if QT_VERSION < 0x040000
     
    18541899  if ((event->key() == Qt::Key_Down) && (event->modifiers() & Qt::ShiftModifier)) { // rotate phi
    18551900#endif
    1856     G4MouseRotateEvent(0,-1);
     1901    rotateScene(0,-1);
    18571902  }
    18581903#if QT_VERSION < 0x040000
     
    18611906  else if ((event->key() == Qt::Key_Up) && (event->modifiers() & Qt::ShiftModifier)) { // rotate phi
    18621907#endif
    1863     G4MouseRotateEvent(0,1);
     1908    rotateScene(0,1);
    18641909  }
    18651910#if QT_VERSION < 0x040000
     
    18681913  if ((event->key() == Qt::Key_Left) && (event->modifiers() & Qt::ShiftModifier)) { // rotate theta
    18691914#endif
    1870     G4MouseRotateEvent(1,0);
     1915    rotateScene(1,0);
    18711916  }
    18721917#if QT_VERSION < 0x040000
     
    18751920  else if ((event->key() == Qt::Key_Right) && (event->modifiers() & Qt::ShiftModifier)) { // rotate theta
    18761921#endif
    1877     G4MouseRotateEvent(-1,0);
     1922    rotateScene(-1,0);
    18781923  }
    18791924  if (event->key() == Qt::Key_Escape) { // escaped from full screen
     
    19031948#endif
    19041949    if (event->key() == Qt::Key_Down) { // go down
    1905       G4MouseMoveEvent(0,1,0);
     1950      moveScene(0,-1,0,false);
    19061951    }
    19071952    else if (event->key() == Qt::Key_Up) {  // go up
    1908       G4MouseMoveEvent(0,-1,0);
     1953      moveScene(0,1,0,false);
    19091954    }
    19101955    if (event->key() == Qt::Key_Left) { // go left
    1911       G4MouseMoveEvent(-1,0,0);
     1956      moveScene(-1,0,0,false);
    19121957    }
    19131958    else if (event->key() == Qt::Key_Right) { // go right
    1914       G4MouseMoveEvent(1,0,0);
     1959      moveScene(1,0,0,false);
    19151960    }
    19161961  }
    19171962  holdKeyEvent = false;
    19181963}
     1964
     1965
     1966bool G4OpenGLQtViewer::hasPendingEvents () {
     1967  return ((QApplication*)G4Qt::getInstance ())->hasPendingEvents ();
     1968}
     1969
    19191970
    19201971/*
  • trunk/geant4/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc

    r709 r720  
    319319#endif
    320320    setMouseTracking(true);
    321     G4MousePressEvent(event->pos());
     321    G4MousePressEvent(event->pos(),Qt::LeftButton);
    322322  }
    323323}
     
    337337  printf("G4OpenGLStoredQtViewer::mouseDoubleClickEvent\n");
    338338#endif
    339   //   setMouseTracking(true);
     339  setMouseTracking(true);
    340340  //   glBufferImage = grabFrameBuffer().convertToFormat(QImage::Format_ARGB32);//_Premultiplied); 
    341341}
     
    346346  printf("G4OpenGLStoredQtViewer::mouseReleaseEvent\n");
    347347#endif
    348   //   setMouseTracking(false);
     348  setMouseTracking(false);
    349349}
    350350
    351351void G4OpenGLStoredQtViewer::mouseMoveEvent(QMouseEvent *event)
    352352{
    353 
     353 
    354354#if QT_VERSION < 0x040000
    355   G4MouseEvent(event->x(),event->y(),event->state());
     355  G4MouseMoveEvent(event->x(),event->y(),event->state());
    356356#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);
    358362#endif
    359363}
Note: See TracChangeset for help on using the changeset viewer.