Changeset 797 for trunk/geant4
- Timestamp:
- May 13, 2008, 6:30:22 PM (16 years ago)
- Location:
- trunk/geant4/visualization/OpenGL
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/geant4/visualization/OpenGL/include/G4OpenGLQtViewer.hh
r754 r797 58 58 class QKeyEvent; 59 59 class QProcess; 60 class QTime; 60 61 61 62 class G4OpenGLSceneHandler; … … 92 93 void manageContextMenuEvent(QContextMenuEvent *e); 93 94 #if QT_VERSION < 0x040000 94 void G4MousePressEvent(QPoint, Qt::ButtonState); 95 #else 96 void G4MousePressEvent(QPoint, Qt::MouseButtons); 97 #endif 95 void G4MousePressEvent(QPoint); 96 #else 97 void G4MousePressEvent(QPoint); 98 #endif 99 void G4MouseReleaseEvent(); 98 100 void G4MouseDoubleClickEvent(QPoint p); 99 101 #if QT_VERSION < 0x040000 100 void G4MouseMoveEvent(int, int, Qt::ButtonState ,bool mAutoMove = false);101 #else 102 void G4MouseMoveEvent(int, int, Qt::MouseButtons ,bool mAutoMove = false);102 void G4MouseMoveEvent(int, int, Qt::ButtonState); 103 #else 104 void G4MouseMoveEvent(int, int, Qt::MouseButtons); 103 105 #endif 104 106 void G4keyPressEvent (QKeyEvent * event); 105 void rotateScene( G4double, G4double,bool mAutoRotate=false);106 void moveScene( G4double, G4double, G4double,bool,bool mAutoMove=false);107 void rotateScene(int, int); 108 void moveScene(int, int, int,bool); 107 109 108 110 … … 183 185 RECORDING_STEP fRecordingStep; 184 186 QProcess *fProcess; 187 QTime *fLastEventTime; 188 int fSpinningDelay; 185 189 186 190 private slots : -
trunk/geant4/visualization/OpenGL/src/G4OpenGLQtViewer.cc
r790 r797 36 36 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER 37 37 38 //#define GEANT4_QT_DEBUG38 #define GEANT4_QT_DEBUG 39 39 40 40 #include "G4OpenGLQtViewer.hh" … … 77 77 #include <qdialog.h> 78 78 #include <qevent.h> //include <qcontextmenuevent.h> 79 79 #include <qdatetime.h> 80 80 81 81 ////////////////////////////////////////////////////////////////////////////// … … 316 316 initMovieParameters(); 317 317 318 fLastEventTime = new QTime(); 319 318 320 #ifdef GEANT4_QT_DEBUG 319 321 printf("G4OpenGLQtViewer::G4OpenGLQtViewer END\n"); … … 1507 1509 */ 1508 1510 #if QT_VERSION < 0x040000 1509 void G4OpenGLQtViewer::G4MousePressEvent(QPoint p ,Qt::ButtonState mButtons)1510 #else 1511 void G4OpenGLQtViewer::G4MousePressEvent(QPoint p ,Qt::MouseButtons mButtons)1511 void G4OpenGLQtViewer::G4MousePressEvent(QPoint p) 1512 #else 1513 void G4OpenGLQtViewer::G4MousePressEvent(QPoint p) 1512 1514 #endif 1513 1515 { 1514 1516 fAutoMove = false; // stop automove 1515 1517 fLastPos = p; 1518 fLastEventTime->start(); 1516 1519 if (fMouseAction == STYLE2){ // pick 1517 1520 Pick(p.x(),p.y()); 1521 } 1522 } 1523 1524 /** 1525 */ 1526 void G4OpenGLQtViewer::G4MouseReleaseEvent() 1527 { 1528 fSpinningDelay = fLastEventTime->elapsed(); 1529 #ifdef GEANT4_QT_DEBUG 1530 printf("G4OpenGLQtViewer::G4MouseReleaseEvent delay %d\n",fSpinningDelay); 1531 #endif 1532 if ((fDeltaPosX == 0) && (fDeltaPosY == 0)) { 1533 return; 1534 } 1535 if (fSpinningDelay < 100 ) { 1536 fAutoMove = true; 1537 1538 QTime lastMoveTime; 1539 lastMoveTime.start(); 1540 // try to addapt speed move/rotate looking to drawing speed 1541 int cycles = 4; 1542 while (fAutoMove) { 1543 if ( lastMoveTime.elapsed() > (100 / (cycles/2))) { 1544 if (fMouseAction == STYLE1) { // rotate 1545 rotateScene(fDeltaPosX,fDeltaPosY); 1546 } else if (fMouseAction == STYLE2) { // move 1547 moveScene(-fDeltaPosX,-fDeltaPosY,0,true); 1548 } 1549 lastMoveTime.start(); 1550 cycles = 1 ; 1551 } 1552 ((QApplication*)G4Qt::getInstance ())->processEvents(); 1553 cycles ++ ; 1554 } 1555 fDeltaPosX = 0; 1556 fDeltaPosY = 0; 1557 1518 1558 } 1519 1559 } … … 1528 1568 1529 1569 #if QT_VERSION < 0x040000 1530 void G4OpenGLQtViewer::G4MouseMoveEvent(int pos_x, int pos_y,Qt::ButtonState mButtons ,bool mAutoMove)1531 #else 1532 void G4OpenGLQtViewer::G4MouseMoveEvent(int pos_x, int pos_y,Qt::MouseButtons mButtons ,bool mAutoMove)1570 void G4OpenGLQtViewer::G4MouseMoveEvent(int pos_x, int pos_y,Qt::ButtonState mButtons) 1571 #else 1572 void G4OpenGLQtViewer::G4MouseMoveEvent(int pos_x, int pos_y,Qt::MouseButtons mButtons) 1533 1573 #endif 1534 1574 { 1535 fAutoMove = mAutoMove; 1536 1537 if (!fAutoMove) { // keep old delta if automove 1538 fDeltaPosX = fLastPos.x() - pos_x; 1539 fDeltaPosY = fLastPos.y() - pos_y; 1540 } 1541 1542 if ((fDeltaPosX == 0) && (fDeltaPosY == 0)) { 1543 fAutoMove = false; 1544 } 1545 1575 1576 if (fAutoMove) { 1577 return; 1578 } 1579 1580 fDeltaPosX = fLastPos.x() - pos_x; 1581 fDeltaPosY = fLastPos.y() - pos_y; 1582 1546 1583 if (fMouseAction == STYLE1) { // rotate 1547 1584 if (mButtons & Qt::LeftButton) { 1548 rotateScene(fDeltaPosX,fDeltaPosY ,fAutoMove);1585 rotateScene(fDeltaPosX,fDeltaPosY); 1549 1586 } 1550 1587 } else if (fMouseAction == STYLE2) { // move 1551 1588 if (mButtons & Qt::LeftButton) { 1552 if (fAutoMove) { 1553 while (fAutoMove) { 1554 moveScene(-fDeltaPosX,-fDeltaPosY,0,true,true); 1555 ((QApplication*)G4Qt::getInstance ())->processEvents(); 1556 } 1557 } else { 1558 moveScene(-fDeltaPosX,-fDeltaPosY,0,true,false); 1559 } 1589 moveScene(-fDeltaPosX,-fDeltaPosY,0,true); 1560 1590 } 1561 1591 } 1562 1592 fLastPos = QPoint(pos_x, pos_y); 1593 fLastEventTime->start(); 1563 1594 } 1564 1595 … … 1571 1602 */ 1572 1603 1573 void G4OpenGLQtViewer::moveScene( G4double dx,G4double dy, G4double dz,bool mouseMove,bool mAutoMove)1604 void G4OpenGLQtViewer::moveScene(int dx,int dy, int dz,bool mouseMove) 1574 1605 { 1575 1606 if (fHoldMoveEvent) … … 1577 1608 fHoldMoveEvent = true; 1578 1609 1579 if( mAutoMove == false) {1580 fAutoMove = true;1581 }1582 1610 G4double coefTrans = 0; 1583 1611 GLdouble coefDepth = 0; 1584 while (fAutoMove) { 1585 if( mAutoMove == false) { 1586 fAutoMove = false; 1587 } 1588 if(mouseMove) { 1589 coefTrans = ((G4double)getSceneNearWidth())/((G4double)WinSize_x); 1590 if (WinSize_y <WinSize_x) { 1591 coefTrans = ((G4double)getSceneNearWidth())/((G4double)WinSize_y); 1592 } 1593 } else { 1594 coefTrans = getSceneNearWidth()*fDeltaSceneTranslation; 1595 coefDepth = getSceneDepth()*fDeltaDepth; 1596 } 1597 fVP.IncrementPan(-dx*coefTrans,dy*coefTrans,dz*coefDepth); 1598 1599 updateQWidget(); 1600 if (fAutoMove) 1601 ((QApplication*)G4Qt::getInstance ())->processEvents(); 1602 } 1603 1612 if(mouseMove) { 1613 coefTrans = ((G4double)getSceneNearWidth())/((G4double)WinSize_x); 1614 if (WinSize_y <WinSize_x) { 1615 coefTrans = ((G4double)getSceneNearWidth())/((G4double)WinSize_y); 1616 } 1617 } else { 1618 coefTrans = getSceneNearWidth()*fDeltaSceneTranslation; 1619 coefDepth = getSceneDepth()*fDeltaDepth; 1620 } 1621 fVP.IncrementPan(-dx*coefTrans,dy*coefTrans,dz*coefDepth); 1622 1623 updateQWidget(); 1624 if (fAutoMove) 1625 ((QApplication*)G4Qt::getInstance ())->processEvents(); 1626 1604 1627 fHoldMoveEvent = false; 1605 1628 } … … 1611 1634 */ 1612 1635 1613 void G4OpenGLQtViewer::rotateScene( G4double dx, G4double dy,bool mAutoRotate)1636 void G4OpenGLQtViewer::rotateScene(int dx, int dy) 1614 1637 { 1638 #ifdef GEANT4_QT_DEBUG 1639 printf("G4OpenGLQtViewer::rotateScene %d %d\n",dx,dy); 1640 #endif 1641 1615 1642 if (fHoldRotateEvent) 1616 1643 return; 1617 1644 fHoldRotateEvent = true; 1618 1645 1619 if( mAutoRotate == false) {1620 fAutoMove = true;1621 }1622 1646 G4Vector3D vp; 1623 1647 G4Vector3D up; … … 1641 1665 G4Vector3D viewPoint; 1642 1666 1643 while (fAutoMove) {1644 if( mAutoRotate == false) {1645 fAutoMove = false;1646 }1647 1667 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1668 //phi spin stuff here 1669 1670 vp = fVP.GetViewpointDirection ().unit (); 1671 up = fVP.GetUpVector ().unit (); 1672 1673 yprime = (up.cross(vp)).unit(); 1674 zprime = (vp.cross(yprime)).unit(); 1675 1676 if (fVP.GetLightsMoveWithCamera()) { 1677 delta_alpha = dy * fDeltaRotation; 1678 delta_theta = -dx * fDeltaRotation; 1679 } else { 1680 delta_alpha = -dy * fDeltaRotation; 1681 delta_theta = dx * fDeltaRotation; 1682 } 1683 1684 delta_alpha *= deg; 1685 delta_theta *= deg; 1686 1687 new_vp = std::cos(delta_alpha) * vp + std::sin(delta_alpha) * zprime; 1688 1689 // to avoid z rotation flipping 1690 // to allow more than 360° rotation 1691 if (fVP.GetLightsMoveWithCamera()) { 1692 new_up = (new_vp.cross(yprime)).unit(); 1693 if (new_vp.z()*vp.z() <0) { 1694 new_up.set(new_up.x(),-new_up.y(),new_up.z()); 1695 } 1696 } else { 1697 new_up = up; 1698 if (new_vp.z()*vp.z() <0) { 1699 new_up.set(new_up.x(),-new_up.y(),new_up.z()); 1700 } 1701 } 1702 fVP.SetUpVector(new_up); 1703 //////////////// 1704 // Rotates by fixed azimuthal angle delta_theta. 1705 1706 cosalpha = new_up.dot (new_vp.unit()); 1707 sinalpha = std::sqrt (1. - std::pow (cosalpha, 2)); 1708 yprime = (new_up.cross (new_vp.unit())).unit (); 1709 xprime = yprime.cross (new_up); 1710 // Projection of vp on plane perpendicular to up... 1711 a1 = sinalpha * xprime; 1712 // Required new projection... 1713 a2 = sinalpha * (std::cos (delta_theta) * xprime + std::sin (delta_theta) * yprime); 1714 // Required Increment vector... 1715 delta = a2 - a1; 1716 // So new viewpoint is... 1717 viewPoint = new_vp.unit() + delta; 1718 1699 1719 #ifdef GEANT4_QT_DEBUG 1700 // printf("vp Vector : %f %f %f delta_alpha:%f delta_theta:%f cosalpha:%f sinalpha:%f\n",viewPoint.x(),viewPoint.y(),viewPoint.z(),delta_alpha,delta_theta,cosalpha,sinalpha); 1701 // printf("up : %f %f %f\n",up.x(),up.y(),up.z()); 1702 // printf("new up : %f %f %f\n",new_up.x(),new_up.y(),new_up.z()); 1703 // printf("vp : %f %f %f\n",vp.x(),vp.y(),vp.z()); 1704 // printf("new_vp : %f %f %f\n",new_vp.x(),new_vp.y(),new_vp.z()); 1705 #endif 1706 fVP.SetViewAndLights (viewPoint); 1707 updateQWidget(); 1708 1709 if (fAutoMove) 1710 ((QApplication*)G4Qt::getInstance ())->processEvents(); 1711 } 1720 // printf("vp Vector : %f %f %f delta_alpha:%f delta_theta:%f cosalpha:%f sinalpha:%f\n",viewPoint.x(),viewPoint.y(),viewPoint.z(),delta_alpha,delta_theta,cosalpha,sinalpha); 1721 // printf("up : %f %f %f\n",up.x(),up.y(),up.z()); 1722 // printf("new up : %f %f %f\n",new_up.x(),new_up.y(),new_up.z()); 1723 // printf("vp : %f %f %f\n",vp.x(),vp.y(),vp.z()); 1724 // printf("new_vp : %f %f %f\n",new_vp.x(),new_vp.y(),new_vp.z()); 1725 #endif 1726 fVP.SetViewAndLights (viewPoint); 1727 updateQWidget(); 1712 1728 1713 1729 fHoldRotateEvent = false; 1730 #ifdef GEANT4_QT_DEBUG 1731 printf("G4OpenGLQtViewer::Rotate END\n"); 1732 #endif 1714 1733 } 1715 1734 -
trunk/geant4/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc
r790 r797 34 34 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER 35 35 36 //#define GEANT4_QT_DEBUG36 #define GEANT4_QT_DEBUG 37 37 38 38 #include "G4OpenGLStoredQtViewer.hh" … … 158 158 159 159 } else { 160 #ifdef GEANT4_QT_DEBUG161 printf("*************************** CASE 1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");162 #endif163 160 164 161 // If kernel visit was needed, drawing and FinishView will already … … 166 163 if (!kernelVisitWasNeeded) { 167 164 #ifdef GEANT4_QT_DEBUG 168 printf("************************** * CASE 2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");165 printf("************************** G4OpenGLStoredQtViewer::DrawView Don't need kernel Visit \n"); 169 166 #endif 170 167 DrawDisplayLists (); … … 172 169 } else { 173 170 #ifdef GEANT4_QT_DEBUG 174 printf("************************** * CASE 3 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");171 printf("************************** G4OpenGLStoredQtViewer::DrawView need kernel Visit \n"); 175 172 #endif 176 173 // However, union cutaways are implemented in DrawDisplayLists, so make … … 208 205 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// 209 206 { 210 #ifdef GEANT4_QT_DEBUG211 printf("G4OpenGLStoredQtViewer::FinishView VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n");212 #endif213 214 207 glFlush (); 215 208 swapBuffers (); 216 #ifdef GEANT4_QT_DEBUG217 printf("G4OpenGLStoredQtViewer::FinishView ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");218 #endif219 220 209 } 221 210 … … 314 303 #endif 315 304 setMouseTracking(true); 316 G4MousePressEvent(event->pos() ,Qt::LeftButton);305 G4MousePressEvent(event->pos()); 317 306 } 318 307 } … … 338 327 void G4OpenGLStoredQtViewer::mouseReleaseEvent(QMouseEvent *event) 339 328 { 340 #ifdef GEANT4_QT_DEBUG 341 printf("G4OpenGLStoredQtViewer::mouseReleaseEvent\n"); 329 G4MouseReleaseEvent(); 330 #ifdef GEANT4_QT_DEBUG 331 printf("G4OpenGLStoredQtViewer::mouseReleaseEvent ================\n"); 342 332 #endif 343 333 setMouseTracking(false); … … 352 342 G4MouseMoveEvent(event->x(),event->y(),event->buttons()); 353 343 #endif 354 if (hasPendingEvents ())355 #if QT_VERSION < 0x040000356 G4MouseMoveEvent(event->x(),event->y(),event->state());357 #else358 G4MouseMoveEvent(event->x(),event->y(),event->buttons());359 #endif360 344 } 361 345
Note: See TracChangeset
for help on using the changeset viewer.