You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
4.2 KiB
180 lines
4.2 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkExporter.cxx,v $
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm 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 "vtkExporter.h"
|
|
|
|
#include "vtkRenderWindow.h"
|
|
|
|
vtkCxxRevisionMacro(vtkExporter, "$Revision: 1.19 $");
|
|
|
|
vtkCxxSetObjectMacro(vtkExporter,RenderWindow,vtkRenderWindow);
|
|
|
|
|
|
// Construct with no start and end write methods or arguments.
|
|
vtkExporter::vtkExporter()
|
|
{
|
|
this->RenderWindow = NULL;
|
|
this->StartWrite = NULL;
|
|
this->StartWriteArgDelete = NULL;
|
|
this->StartWriteArg = NULL;
|
|
this->EndWrite = NULL;
|
|
this->EndWriteArgDelete = NULL;
|
|
this->EndWriteArg = NULL;
|
|
}
|
|
|
|
vtkExporter::~vtkExporter()
|
|
{
|
|
this->SetRenderWindow(NULL);
|
|
|
|
if ((this->StartWriteArg)&&(this->StartWriteArgDelete))
|
|
{
|
|
(*this->StartWriteArgDelete)(this->StartWriteArg);
|
|
}
|
|
if ((this->EndWriteArg)&&(this->EndWriteArgDelete))
|
|
{
|
|
(*this->EndWriteArgDelete)(this->EndWriteArg);
|
|
}
|
|
}
|
|
|
|
|
|
// Write data to output. Method executes subclasses WriteData() method, as
|
|
// well as StartWrite() and EndWrite() methods.
|
|
void vtkExporter::Write()
|
|
{
|
|
// make sure input is available
|
|
if ( !this->RenderWindow )
|
|
{
|
|
vtkErrorMacro(<< "No render window provided!");
|
|
return;
|
|
}
|
|
|
|
if ( this->StartWrite )
|
|
{
|
|
(*this->StartWrite)(this->StartWriteArg);
|
|
}
|
|
this->WriteData();
|
|
if ( this->EndWrite )
|
|
{
|
|
(*this->EndWrite)(this->EndWriteArg);
|
|
}
|
|
}
|
|
|
|
// Convenient alias for Write() method.
|
|
void vtkExporter::Update()
|
|
{
|
|
this->Write();
|
|
}
|
|
|
|
// Specify a function to be called before data is written.
|
|
// Function will be called with argument provided.
|
|
void vtkExporter::SetStartWrite(void (*f)(void *), void *arg)
|
|
{
|
|
if ( f != this->StartWrite )
|
|
{
|
|
// delete the current arg if there is one and a delete meth
|
|
if ((this->StartWriteArg)&&(this->StartWriteArgDelete))
|
|
{
|
|
(*this->StartWriteArgDelete)(this->StartWriteArg);
|
|
}
|
|
this->StartWrite = f;
|
|
this->StartWriteArg = arg;
|
|
this->Modified();
|
|
}
|
|
}
|
|
|
|
|
|
// Set the arg delete method. This is used to free user memory.
|
|
void vtkExporter::SetStartWriteArgDelete(void (*f)(void *))
|
|
{
|
|
if ( f != this->StartWriteArgDelete)
|
|
{
|
|
this->StartWriteArgDelete = f;
|
|
this->Modified();
|
|
}
|
|
}
|
|
|
|
// Set the arg delete method. This is used to free user memory.
|
|
void vtkExporter::SetEndWriteArgDelete(void (*f)(void *))
|
|
{
|
|
if ( f != this->EndWriteArgDelete)
|
|
{
|
|
this->EndWriteArgDelete = f;
|
|
this->Modified();
|
|
}
|
|
}
|
|
|
|
// Specify a function to be called after data is written.
|
|
// Function will be called with argument provided.
|
|
void vtkExporter::SetEndWrite(void (*f)(void *), void *arg)
|
|
{
|
|
if ( f != this->EndWrite )
|
|
{
|
|
// delete the current arg if there is one and a delete meth
|
|
if ((this->EndWriteArg)&&(this->EndWriteArgDelete))
|
|
{
|
|
(*this->EndWriteArgDelete)(this->EndWriteArg);
|
|
}
|
|
this->EndWrite = f;
|
|
this->EndWriteArg = arg;
|
|
this->Modified();
|
|
}
|
|
}
|
|
|
|
void vtkExporter::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os,indent);
|
|
|
|
if ( this->RenderWindow )
|
|
{
|
|
os << indent << "Render Window: (" << (void *)this->RenderWindow << ")\n";
|
|
}
|
|
else
|
|
{
|
|
os << indent << "Render Window: (none)\n";
|
|
}
|
|
|
|
if ( this->StartWrite )
|
|
{
|
|
os << indent << "Start Write: (" << (void *)this->StartWrite << ")\n";
|
|
}
|
|
else
|
|
{
|
|
os << indent << "Start Write: (none)\n";
|
|
}
|
|
|
|
if ( this->EndWrite )
|
|
{
|
|
os << indent << "End Write: (" << (void *)this->EndWrite << ")\n";
|
|
}
|
|
else
|
|
{
|
|
os << indent << "End Write: (none)\n";
|
|
}
|
|
}
|
|
|
|
unsigned long int vtkExporter::GetMTime()
|
|
{
|
|
unsigned long mTime=this-> vtkObject::GetMTime();
|
|
unsigned long time;
|
|
|
|
if ( this->RenderWindow != NULL )
|
|
{
|
|
time = this->RenderWindow->GetMTime();
|
|
mTime = ( time > mTime ? time : mTime );
|
|
}
|
|
return mTime;
|
|
}
|
|
|
|
|
|
|
|
|