void CameraAnimator::setCameraIteration( bool ci ) { if ( m_cameraIteration != ci ) { if ( ci ) { // re-use to see if we found an appropriate camera ci = false; // assure, there are at least two FrustumCameras in the scene m_cameraIterationIndex = 0; dp::sg::core::FrustumCameraWeakPtr fsp = findNextIterationCamera(); if( fsp ) { moveToCamera( fsp ); m_cameraIteration = true; ci = true; } } // if we are turning off camera iteration, or we didn't find a camera, then turn it off if( !ci ) { m_cameraIteration = false; setCameraMoveTo( false ); // also stop any running move-to } } }
void CameraAnimator::cancel() { // set everything to false setCameraOrbit( false ); setCameraMoveTo( false ); setCameraIteration( false ); }
void CameraAnimator::setCameraOrbit( bool co ) { if ( co ) { // stop move-to and iteration, when orbit starts setCameraMoveTo( false ); setCameraIteration( false ); } startStopTimer( m_cameraOrbit, co, true ); }
void CameraAnimator::timerEvent( QTimerEvent * te ) { if ( m_cameraIteration && ! m_cameraMoveTo ) { if ( ! m_cameraIterationTimer.isRunning() ) { m_cameraIterationTimer.restart(); } else { double currentTime = m_cameraIterationTimer.getTime(); if ( m_cameraIterationPauseDuration < currentTime ) { m_cameraIterationTimer.stop(); // move-to next camera dp::sg::core::FrustumCameraWeakPtr fsp = findNextIterationCamera(); if( fsp ) { moveToCamera( fsp ); } } } } else if ( m_cameraMoveTo ) { DP_ASSERT( m_cameraMoveTimer.isRunning() ); double currentTime = m_cameraMoveTimer.getTime(); double t; double realDuration = m_cameraMoveDuration * m_cameraMoveDurationFactor; if ( realDuration < currentTime ) { setCameraMoveTo( false ); t = 1.0; } else { t = currentTime / realDuration; t = 0.5 * ( sin( -dp::math::PI_HALF + t * dp::math::PI ) + 1.0 ); // smooth-in and -out using simple sine curve } moveCamera( t ); emit update(); } else if ( m_cameraOrbit ) { orbitCamera( m_cameraOrbitAxis, true, dp::math::degToRad(1.0f) ); emit update(); } }
void CameraAnimator::zoomAll() { m_cameraMoveDurationFactor = 0.0; initCameraZoomAll(); setCameraMoveTo( true ); }
void CameraAnimator::moveToLight( const dp::sg::core::LightSourceWeakPtr & light ) { m_cameraMoveDurationFactor = 0.0; initCameraMoveToLight( light ); setCameraMoveTo( true ); }
void CameraAnimator::moveToCamera( const dp::sg::core::FrustumCameraWeakPtr & cam ) { m_cameraMoveDurationFactor = 0.0; initCameraMove( cam ); setCameraMoveTo( true ); }
void CameraAnimator::moveToCamera( dp::sg::core::FrustumCameraSharedPtr const& cam ) { m_cameraMoveDurationFactor = 0.0; initCameraMove( cam ); setCameraMoveTo( true ); }