mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
ParaView-5.0.1: Added the source-tree to ThirdParty-dev and patched as described in the README file
Resolves bug-report http://bugs.openfoam.org/view.php?id=2098
This commit is contained in:
199
ParaView-5.0.1/ParaViewCore/Animation/vtkAnimationPlayer.cxx
Normal file
199
ParaView-5.0.1/ParaViewCore/Animation/vtkAnimationPlayer.cxx
Normal file
@ -0,0 +1,199 @@
|
||||
/*=========================================================================
|
||||
|
||||
Program: ParaView
|
||||
Module: vtkAnimationPlayer.cxx
|
||||
|
||||
Copyright (c) Kitware, Inc.
|
||||
All rights reserved.
|
||||
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
|
||||
|
||||
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
#include "vtkAnimationPlayer.h"
|
||||
|
||||
#include "vtkSMAnimationScene.h"
|
||||
#include "vtkCommand.h"
|
||||
#include "vtkObjectFactory.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkAnimationPlayer::vtkAnimationPlayer()
|
||||
{
|
||||
this->AnimationScene = 0;
|
||||
this->InPlay = false;
|
||||
this->CurrentTime = 0;
|
||||
this->StopPlay = false;
|
||||
this->Loop = false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkAnimationPlayer::~vtkAnimationPlayer()
|
||||
{
|
||||
this->SetAnimationScene(0);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkAnimationPlayer::SetAnimationScene(vtkSMAnimationScene* scene)
|
||||
{
|
||||
if (this->AnimationScene != scene)
|
||||
{
|
||||
this->AnimationScene = scene;
|
||||
this->Modified();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkSMAnimationScene* vtkAnimationPlayer::GetAnimationScene()
|
||||
{
|
||||
return this->AnimationScene;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkAnimationPlayer::Play()
|
||||
{
|
||||
if (!this->AnimationScene)
|
||||
{
|
||||
vtkErrorMacro("No animation scene to play.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this->InPlay)
|
||||
{
|
||||
vtkErrorMacro("Cannot play while playing.");
|
||||
return;
|
||||
}
|
||||
|
||||
this->InvokeEvent(vtkCommand::StartEvent);
|
||||
|
||||
double starttime = this->AnimationScene->GetStartTime();
|
||||
double endtime = this->AnimationScene->GetEndTime();
|
||||
this->CurrentTime = this->AnimationScene->GetSceneTime();
|
||||
double playbackWindow[2];
|
||||
this->AnimationScene->GetPlaybackTimeWindow(playbackWindow);
|
||||
if(playbackWindow[0] > playbackWindow[1])
|
||||
{
|
||||
playbackWindow[0] = this->AnimationScene->GetStartTime();
|
||||
playbackWindow[1] = endtime;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->CurrentTime = playbackWindow[0];
|
||||
}
|
||||
|
||||
// clamp current time to range
|
||||
this->CurrentTime = (this->CurrentTime < starttime ||
|
||||
this->CurrentTime >= endtime)? starttime : this->CurrentTime;
|
||||
|
||||
this->InPlay = true;
|
||||
this->StopPlay = false;
|
||||
|
||||
do
|
||||
{
|
||||
this->StartLoop(starttime, endtime, playbackWindow);
|
||||
this->AnimationScene->Initialize();
|
||||
double deltatime = 0.0;
|
||||
while (!this->StopPlay && this->CurrentTime <= playbackWindow[1])
|
||||
{
|
||||
this->AnimationScene->Tick(this->CurrentTime, deltatime, this->CurrentTime);
|
||||
double progress = (this->CurrentTime-playbackWindow[0])/(playbackWindow[1]-playbackWindow[0]);
|
||||
this->InvokeEvent(vtkCommand::ProgressEvent, &progress);
|
||||
|
||||
double nexttime = this->GetNextTime(this->CurrentTime);
|
||||
deltatime = nexttime - this->CurrentTime;
|
||||
this->CurrentTime = nexttime;
|
||||
}
|
||||
|
||||
// Finalize will get called when Tick() is called with time>=endtime on the
|
||||
// cue. However,no harm is calling this method again since it has any effect
|
||||
// only the first time it gets called.
|
||||
// TODO: not sure what's the right thing here.
|
||||
// this->AnimationScene->Finalize();
|
||||
|
||||
this->CurrentTime = starttime;
|
||||
this->EndLoop();
|
||||
// loop when this->Loop is true.
|
||||
} while (this->Loop && !this->StopPlay);
|
||||
|
||||
this->InPlay = false;
|
||||
this->StopPlay = false;
|
||||
|
||||
this->InvokeEvent(vtkCommand::EndEvent);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkAnimationPlayer::Stop()
|
||||
{
|
||||
if (this->InPlay)
|
||||
{
|
||||
this->StopPlay = true;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkAnimationPlayer::GoToFirst()
|
||||
{
|
||||
this->Stop();
|
||||
if (this->AnimationScene)
|
||||
{
|
||||
this->AnimationScene->SetSceneTime(
|
||||
this->AnimationScene->GetStartTime());
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkAnimationPlayer::GoToLast()
|
||||
{
|
||||
this->Stop();
|
||||
if (this->AnimationScene)
|
||||
{
|
||||
this->AnimationScene->SetSceneTime(
|
||||
this->AnimationScene->GetEndTime());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkAnimationPlayer::GoToNext()
|
||||
{
|
||||
this->Stop();
|
||||
double starttime = this->AnimationScene->GetStartTime();
|
||||
double endtime = this->AnimationScene->GetEndTime();
|
||||
double time = this->GoToNext(starttime, endtime,
|
||||
this->AnimationScene->GetSceneTime());
|
||||
|
||||
if (time >= starttime && time < endtime)
|
||||
{
|
||||
this->AnimationScene->SetSceneTime(time);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->AnimationScene->SetSceneTime(endtime);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkAnimationPlayer::GoToPrevious()
|
||||
{
|
||||
this->Stop();
|
||||
double starttime = this->AnimationScene->GetStartTime();
|
||||
double endtime = this->AnimationScene->GetEndTime();
|
||||
double time = this->GoToPrevious(starttime, endtime,
|
||||
this->AnimationScene->GetSceneTime());
|
||||
|
||||
if (time >= starttime && time < endtime)
|
||||
{
|
||||
this->AnimationScene->SetSceneTime(time);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->AnimationScene->SetSceneTime(starttime);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkAnimationPlayer::PrintSelf(ostream& os, vtkIndent indent)
|
||||
{
|
||||
this->Superclass::PrintSelf(os, indent);
|
||||
}
|
||||
Reference in New Issue
Block a user