mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
177 lines
5.1 KiB
C++
177 lines
5.1 KiB
C++
/*=========================================================================
|
|
|
|
Program: ParaView
|
|
Module: vtkSMAnimationSceneWriter.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 "vtkSMAnimationSceneWriter.h"
|
|
|
|
#include "vtkAnimationCue.h"
|
|
#include "vtkCommand.h"
|
|
#include "vtkObjectFactory.h"
|
|
#include "vtkSMAnimationScene.h"
|
|
#include "vtkSMProxy.h"
|
|
#include "vtkSMSession.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
vtkSMAnimationSceneWriter::vtkSMAnimationSceneWriter()
|
|
{
|
|
this->AnimationScene = 0;
|
|
this->Saving = false;
|
|
this->ObserverID = 0;
|
|
this->FileName = 0;
|
|
this->SaveFailed = false;
|
|
this->StartFileCount = 0;
|
|
|
|
this->PlaybackTimeWindow[0] = 1.0;
|
|
this->PlaybackTimeWindow[1] = -1.0;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
vtkSMAnimationSceneWriter::~vtkSMAnimationSceneWriter()
|
|
{
|
|
this->SetAnimationScene((vtkSMAnimationScene*)NULL);
|
|
this->SetFileName(0);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void vtkSMAnimationSceneWriter::SetAnimationScene(vtkSMProxy* proxy)
|
|
{
|
|
// Store the corresponding session
|
|
this->SetSession(proxy->GetSession());
|
|
|
|
this->SetAnimationScene(proxy?
|
|
vtkSMAnimationScene::SafeDownCast(
|
|
proxy->GetClientSideObject()) : NULL);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void vtkSMAnimationSceneWriter::SetAnimationScene(vtkSMAnimationScene* scene)
|
|
{
|
|
if (this->AnimationScene && this->ObserverID)
|
|
{
|
|
this->AnimationScene->RemoveObserver(this->ObserverID);
|
|
}
|
|
|
|
vtkSetObjectBodyMacro(AnimationScene, vtkSMAnimationScene, scene);
|
|
|
|
if (this->AnimationScene)
|
|
{
|
|
this->ObserverID = this->AnimationScene->AddObserver(
|
|
vtkCommand::AnimationCueTickEvent,
|
|
this, &vtkSMAnimationSceneWriter::ExecuteEvent);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void vtkSMAnimationSceneWriter::ExecuteEvent(vtkObject* vtkNotUsed(caller),
|
|
unsigned long eventid, void* calldata)
|
|
{
|
|
if (!this->Saving)
|
|
{
|
|
// ignore all events if we aren't currently saving the animation.
|
|
return;
|
|
}
|
|
|
|
if (eventid == vtkCommand::AnimationCueTickEvent)
|
|
{
|
|
vtkAnimationCue::AnimationCueInfo *cueInfo = reinterpret_cast<
|
|
vtkAnimationCue::AnimationCueInfo*>(calldata);
|
|
if (!this->SaveFrame(cueInfo->AnimationTime))
|
|
{
|
|
// Save failed, abort.
|
|
this->AnimationScene->Stop();
|
|
this->SaveFailed = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool vtkSMAnimationSceneWriter::Save()
|
|
{
|
|
if (this->Saving)
|
|
{
|
|
vtkErrorMacro("Already saving an animation. "
|
|
<< "Wait till that is done before calling Save again.");
|
|
return false;
|
|
}
|
|
|
|
if (!this->AnimationScene)
|
|
{
|
|
vtkErrorMacro("Cannot save, no AnimationScene.");
|
|
return false;
|
|
}
|
|
|
|
if (!this->FileName)
|
|
{
|
|
vtkErrorMacro("FileName not set.");
|
|
return false;
|
|
}
|
|
|
|
// Take the animation scene to the beginning.
|
|
this->AnimationScene->GoToFirst();
|
|
|
|
/*
|
|
int play_mode = this->AnimationScene->GetPlayMode();
|
|
|
|
// If play mode is real time, we switch it to sequence.
|
|
// We are assuming that the frame rate has been set correctly
|
|
// on the scene, even in real time mode.
|
|
if (play_mode == vtkAnimationScene::PLAYMODE_REALTIME)
|
|
{
|
|
this->AnimationScene->SetPlayMode(vtkAnimationScene::PLAYMODE_SEQUENCE);
|
|
}
|
|
*/
|
|
|
|
// Disable looping.
|
|
int loop = this->AnimationScene->GetLoop();
|
|
this->AnimationScene->SetLoop(0);
|
|
|
|
bool status = this->SaveInitialize(this->StartFileCount);
|
|
bool cachingFlag = this->AnimationScene->GetForceDisableCaching();
|
|
this->AnimationScene->SetForceDisableCaching(true);
|
|
|
|
if (status)
|
|
{
|
|
this->Saving = true;
|
|
this->SaveFailed = false;
|
|
|
|
this->AnimationScene->SetPlaybackTimeWindow(this->GetPlaybackTimeWindow());
|
|
this->AnimationScene->Play();
|
|
this->AnimationScene->SetPlaybackTimeWindow(1.0, -1.0);// Reset to full range
|
|
this->Saving = false;
|
|
}
|
|
|
|
status = this->SaveFinalize() && status;
|
|
|
|
/*
|
|
if (play_mode == vtkAnimationScene::PLAYMODE_REALTIME)
|
|
{
|
|
this->AnimationScene->SetPlayMode(play_mode);
|
|
}
|
|
*/
|
|
|
|
// Restore scene parameters, if changed.
|
|
this->AnimationScene->SetLoop(loop);
|
|
this->AnimationScene->SetForceDisableCaching(cachingFlag);
|
|
|
|
return status && (!this->SaveFailed);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void vtkSMAnimationSceneWriter::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os, indent);
|
|
os << indent << "AnimationScene: " << this->AnimationScene << endl;
|
|
os << indent << "FileName: " <<
|
|
(this->FileName? this->FileName : "(null)") << endl;
|
|
}
|