Changeset 797
- Timestamp:
- May 13, 2008, 6:30:22 PM (18 years ago)
- Location:
- trunk/geant4/visualization/OpenGL
- Files:
-
- 3 edited
-
include/G4OpenGLQtViewer.hh (modified) (3 diffs)
-
src/G4OpenGLQtViewer.cc (modified) (9 diffs)
-
src/G4OpenGLStoredQtViewer.cc (modified) (8 diffs)
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 //phi spin stuff here1649 1650 vp = fVP.GetViewpointDirection ().unit ();1651 up = fVP.GetUpVector ().unit ();1652 1653 yprime = (up.cross(vp)).unit();1654 zprime = (vp.cross(yprime)).unit();1655 1656 if (fVP.GetLightsMoveWithCamera()) {1657 delta_alpha = dy * fDeltaRotation;1658 delta_theta = -dx * fDeltaRotation;1659 } else {1660 delta_alpha = -dy * fDeltaRotation;1661 delta_theta = dx * fDeltaRotation;1662 }1663 1664 delta_alpha *= deg;1665 delta_theta *= deg;1666 1667 new_vp = std::cos(delta_alpha) * vp + std::sin(delta_alpha) * zprime;1668 1669 // to avoid z rotation flipping1670 // to allow more than 360° rotation1671 if (fVP.GetLightsMoveWithCamera()) {1672 new_up = (new_vp.cross(yprime)).unit();1673 if (new_vp.z()*vp.z() <0) {1674 new_up.set(new_up.x(),-new_up.y(),new_up.z());1675 }1676 } else {1677 new_up = up;1678 if (new_vp.z()*vp.z() <0) {1679 new_up.set(new_up.x(),-new_up.y(),new_up.z());1680 }1681 }1682 fVP.SetUpVector(new_up);1683 ////////////////1684 // Rotates by fixed azimuthal angle delta_theta.1685 1686 cosalpha = new_up.dot (new_vp.unit());1687 sinalpha = std::sqrt (1. - std::pow (cosalpha, 2));1688 yprime = (new_up.cross (new_vp.unit())).unit ();1689 xprime = yprime.cross (new_up);1690 // Projection of vp on plane perpendicular to up...1691 a1 = sinalpha * xprime;1692 // Required new projection...1693 a2 = sinalpha * (std::cos (delta_theta) * xprime + std::sin (delta_theta) * yprime);1694 // Required Increment vector...1695 delta = a2 - a1;1696 // So new viewpoint is...1697 viewPoint = new_vp.unit() + delta;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.
