Changeset 803 for trunk


Ignore:
Timestamp:
May 20, 2008, 7:10:00 PM (16 years ago)
Author:
garnier
Message:

r844@wl-72126: garnier | 2008-05-20 19:09:54 +0200
retour a la case depart

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

Legend:

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

    r801 r803  
    107107  void G4keyPressEvent (QKeyEvent * event);
    108108  void rotateQtScene(float, float);
    109   void rotateSceneInventor(float,float,float);
    110   void rotateSceneTest(float,float,float);
    111   void rotateSceneTest2(float,float,float);
    112109  void rotateQtCamera(float, float);
    113110  void moveScene(float, float, float,bool);
  • trunk/geant4/visualization/OpenGL/src/G4OpenGLQtViewer.cc

    r802 r803  
    16681668  fHoldRotateEvent = true;
    16691669
    1670   rotateSceneTest2(dx,dy,fDeltaRotation);
    1671   //  rotateScene(dx,0,fDeltaRotation);
    1672   //  rotateScene(0,dy,fDeltaRotation);
     1670  rotateScene(dx,0,fDeltaRotation);
     1671  rotateScene(0,dy,fDeltaRotation);
    16731672
    16741673  updateQWidget();
     
    16881687  fHoldRotateEvent = true;
    16891688
    1690   rotateSceneTest2(dx,dy,fDeltaRotation);
    1691   //  rotateScene(dx,dy,fDeltaRotation);
     1689  rotateScene(dx,dy,fDeltaRotation);
    16921690  updateQWidget();
    16931691 
     
    16961694
    16971695
    1698 void G4OpenGLQtViewer::rotateSceneTest2(float dx, float dy,float deltaRot)
    1699 {
    1700   fDeltaRotationAngleX = dx;
    1701   fDeltaRotationAngleY = dy;
    1702   //  rotateScene(dx,dy,fDeltaRotation);
    1703 
    1704   const G4Point3D targetPoint
    1705     = fSceneHandler.GetScene()->GetStandardTargetPoint()
    1706     + fVP.GetCurrentTargetPoint ();
    1707   G4double radius = fSceneHandler.GetScene()->GetExtent().GetExtentRadius();
    1708   if(radius<=0.) radius = 1.;
    1709   const G4double cameraDistance = fVP.GetCameraDistance (radius);
    1710   const G4Point3D cameraPosition =
    1711     targetPoint + cameraDistance * fVP.GetViewpointDirection().unit();
    1712   G4Vector3D up = fVP.GetUpVector ().unit ();
    1713   G4Vector3D new_dx ;
    1714   G4Vector3D new_cameraPosition ;
    1715   G4Vector3D new_up ;
    1716   G4Vector3D delta ;
    1717   G4double new_cameraDistance;
    1718   G4Vector3D deltaCp;
    1719   G4Vector3D deltaUp;
    1720 
    1721   new_dx[2] = (cameraPosition[0]*up[1]-cameraPosition[1]*up[0]);
    1722   new_dx[0] = (cameraPosition[1]*up[2]-cameraPosition[2]*up[1]);
    1723   new_dx[1] = (cameraPosition[2]*up[0]-cameraPosition[0]*up[2]);
    1724 
    1725   delta = -new_dx*dx*deltaRot/45 - up*cameraDistance*dy*deltaRot/45; // 1 unit equal 45 degrees
    1726   new_cameraPosition = cameraPosition + delta;
    1727 
    1728   new_cameraDistance = std::sqrt(new_cameraPosition[0]*new_cameraPosition[0]+new_cameraPosition[1]*new_cameraPosition[1]+new_cameraPosition[2]*new_cameraPosition[2]); 
    1729   deltaCp = cameraDistance*(cameraPosition/new_cameraDistance)-cameraPosition;
    1730   new_cameraPosition = new_cameraPosition + deltaCp;
    1731   delta += deltaCp;
    1732 
    1733   /* *********************** */
    1734   G4Vector3D new_UpX;
    1735   new_UpX[2] = (-up[0]*cameraPosition[1]+up[1]*cameraPosition[0])/(cameraDistance*cameraDistance);
    1736   new_UpX[0] = (-up[1]*cameraPosition[2]+up[2]*cameraPosition[1])/(cameraDistance*cameraDistance);
    1737   new_UpX[1] = (-up[2]*cameraPosition[0]+up[0]*cameraPosition[2])/(cameraDistance*cameraDistance);
    1738   G4Vector3D deltaX;
    1739   G4Vector3D deltaUpX;
    1740   deltaX = -new_UpX*dx*deltaRot/45 - (-cameraPosition/cameraDistance)*cameraDistance*dy*deltaRot/45;
    1741   new_up = up+deltaX;
    1742 
    1743   float new_upDist;
    1744   new_upDist = std::sqrt(new_up[0]*new_up[0]+new_up[1]*new_up[1]+new_up[2]*new_up[2]); 
    1745   deltaUpX = (up/new_upDist)-up;
    1746   new_up += deltaUpX;
    1747 
    1748 
    1749   //  new_up = up[0]+
    1750 
    1751   //  new_up[1] = up[1]*((new_cameraPosition[1])/cameraDistance)/cameraPosition[0];
    1752   //  new_up[1] = up[1]*((new_cameraPosition[1])/cameraDistance)/cameraPosition[0];
    1753   //  new_up[2] = up[2]-delta[1]/cameraDistance ;
    1754   //  new_up[2] = new_cameraPosition[0]*(-delta[1])-new_cameraPosition[1]*(-delta[0]);
    1755   //  new_up[0] = new_cameraPosition[1]*(-delta[2])-new_cameraPosition[2]*(-delta[1]);
    1756   //  new_up[1] = new_cameraPosition[2]*(-delta[0])-new_cameraPosition[0]*(-delta[2]);
    1757 
    1758 
    1759 #ifdef GEANT4_QT_DEBUG
    1760   printf(" Cp %f %f %f\tup:%f %f %f \tdx: %f %f %f\tTp %f %f %f\t\n",
    1761          cameraPosition[0],cameraPosition[1],cameraPosition[2],up[0],up[1],up[2],new_dx[0],new_dx[1],new_dx[2],targetPoint[0],targetPoint[1],targetPoint[2]);
    1762   printf(" Np %f %f %f\tnew_up: %f %f %f\tdelta: %f %f %f\tCd: %f\n",
    1763          new_cameraPosition[0],new_cameraPosition[1],new_cameraPosition[2],new_up[0],new_up[1],new_up[2],delta[0],delta[1],delta[2],cameraDistance);
    1764   printf(" DCp: %f %f %f\tNewUpX:%f %f %f\t deltaX:%f %f %f newUpDist:%f\n",deltaCp[0],deltaCp[1],deltaCp[2],new_UpX[0],new_UpX[1],new_UpX[2],deltaX[0],deltaX[1],deltaX[2],new_upDist);
    1765 #endif
    1766 
    1767   fVP.SetUpVector(new_up);
    1768   fVP.SetViewAndLights (new_cameraPosition);
    1769 }
    1770 
    1771 void G4OpenGLQtViewer::rotateSceneTest(float dx, float dy,float delta)
    1772 {
    1773   fDeltaRotationAngleX = dx;
    1774   fDeltaRotationAngleY = dy;
    1775 
    1776   float cox = std::cos ((fRotationAngleX*M_PI)/180);
    1777   float coy = std::cos ((fRotationAngleY*M_PI)/180);
    1778   float coz = 1;
    1779   float six = std::sin ((fRotationAngleX*M_PI)/180);
    1780   float siy = std::sin ((fRotationAngleY*M_PI)/180);
    1781   float siz = 0;
    1782 
    1783   float dx2 = coy*(siz*dy+coz*dx);
    1784   float dy2 = six*(siy*(siz*dy+coz*dx))+cox*(coz*dy-siz*dx);
    1785   float dz2 = cox*(siy*(siz*dy+coz*dx))-six*(coz*dy-siz*dx);
    1786  
    1787 #ifdef GEANT4_QT_DEBUG
    1788   printf("G4OpenGLQtViewer::MouseMove %f,%f Rot:%f,%f new : %f %f %f\n",dx,dy,fRotationAngleX,fRotationAngleY,dx2,dy2,dz2);
    1789 #endif
    1790 
    1791   fDeltaRotationAngleX = dx2;
    1792   fDeltaRotationAngleY = dy2;
    1793   fDeltaRotationAngleZ = dz2;
    1794 
    1795 }
    1796 
    1797 void G4OpenGLQtViewer::rotateSceneInventor(float dx, float dy,float delta)
    1798 {
    1799   // __________________________
    1800   // From Inventor
    1801   // --------------------------
    1802   //SoGuiExaminerViewerP::rotateCamera(SoCamera * cam,
    1803   //                                   const SbVec3f & aroundaxis,
    1804   //                                   const float delta)
    1805 
    1806   // position of camera
    1807   /*
    1808   const G4Point3D targetPoint
    1809     = fSceneHandler.GetScene()->GetStandardTargetPoint()
    1810     + fVP.GetCurrentTargetPoint ();
    1811   G4double radius = fSceneHandler.GetScene()->GetExtent().GetExtentRadius();
    1812   if(radius<=0.) radius = 1.;
    1813   const G4double cameraDistance = fVP.GetCameraDistance (radius);
    1814   const G4Point3D cameraPosition =
    1815     targetPoint + cameraDistance * fVP.GetViewpointDirection().unit();
    1816 
    1817   //
    1818 
    1819   G4Point3D currentdir = fVP.GetViewpointDirection().unit();
    1820 
    1821   const G4Point3D focalpoint = cameraPosition +
    1822     cameraDistance * currentdir;
    1823 
    1824   // set new orientation
    1825   float rotation[4];
    1826   float quatRotationX[4];
    1827 
    1828   // from SbRotation::setValue(axis,radians)
    1829   this->quatRotationX[3] = (float)cos(radians/2);
    1830   const float sineval = (float)sin(radians/2);
    1831   G4Point3D a = axis;
    1832   // we test for a null vector above
    1833   (void) a.normalize();
    1834   this->quatRotationX[0] = a[0] * sineval;
    1835   this->quatRotationX[1] = a[1] * sineval;
    1836   this->quatRotationX[2] = a[2] * sineval;
    1837  
    1838   // from SbRotation operator *
    1839 currentdir
    1840   float currentdir[0], currentdir[1], currentdir[2], currentdir[3];
    1841   q.getValue(currentdir[0], currentdir[1], currentdir[2], currentdir[3]);
    1842 
    1843   this->setValue(currentdir[3]*quatRotationX[0] + currentdir[0]*quatRotationX[3] + currentdir[1]*quatRotationX[2] - currentdir[2]*quatRotationX[1],
    1844                  currentdir[3]*quatRotationX[1] - currentdir[0]*quatRotationX[2] + currentdir[1]*quatRotationX[3] + currentdir[2]*quatRotationX[0],
    1845                  currentdir[3]*quatRotationX[2] + currentdir[0]*quatRotationX[1] - currentdir[1]*quatRotationX[0] + currentdir[2]*quatRotationX[3],
    1846                  currentdir[3]*quatRotationX[3] - currentdir[0]*quatRotationX[0] - currentdir[1]*quatRotationX[1] - currentdir[2]*quatRotationX[2]);
    1847 
    1848 
    1849   //  cam->orientation = SbRotation(aroundaxis, delta) * currentorientation;
    1850 
    1851   SbVec3f newdir;
    1852   cam->orientation.getValue().multVec(DEFAULTDIRECTION, newdir);
    1853   cam->position = focalpoint - cam->focalDistance.getValue() * newdir;
    1854 
    1855   // __________________________
    1856   // END From Inventor
    1857   // --------------------------
    1858   */
    1859 }
    1860 
    1861 /*
    1862 float[4] G4OpenGLQtViewer::makeRotationMatrix(const G4Point3D axis, const float radians)
    1863 {
    1864   float res[4];
    1865   // From <http://www.automation.hut.fi/~jaro/thesis/hyper/node9.html>.
    1866 
    1867   res[3] = (float)cos(radians/2);
    1868 
    1869   const float sineval = (float)sin(radians/2);
    1870   SbVec3f a = axis;
    1871   // we test for a null vector above
    1872   (void) a.normalize();
    1873   res[0] = a[0] * sineval;
    1874   res[1] = a[1] * sineval;
    1875   res[2] = a[2] * sineval;
    1876 
    1877 }
    1878   */
     1696
    18791697
    18801698/** This is the benning of a rescale function. It does nothing for the moment
Note: See TracChangeset for help on using the changeset viewer.