Cloned library of VTK-5.0.0 with extra build files for internal package management.
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

/*=========================================================================
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;
}