You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/3rd/VTK7.1/source/VTK-7.1.1/IO/Legacy/vtkGenericDataObjectWriter.cxx

181 lines
5.4 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkGenericDataObjectWriter.cxx
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 "vtkGenericDataObjectWriter.h"
#include "vtkCompositeDataSet.h"
#include "vtkCompositeDataWriter.h"
#include "vtkDataObject.h"
#include "vtkErrorCode.h"
#include "vtkGraph.h"
#include "vtkGraphWriter.h"
#include "vtkImageData.h"
#include "vtkInformation.h"
#include "vtkObjectFactory.h"
#include "vtkPolyData.h"
#include "vtkPolyDataWriter.h"
#include "vtkRectilinearGrid.h"
#include "vtkRectilinearGridWriter.h"
#include "vtkStructuredGrid.h"
#include "vtkStructuredGridWriter.h"
#include "vtkStructuredPoints.h"
#include "vtkStructuredPointsWriter.h"
#include "vtkTable.h"
#include "vtkTableWriter.h"
#include "vtkTree.h"
#include "vtkTreeWriter.h"
#include "vtkUnstructuredGrid.h"
#include "vtkUnstructuredGridWriter.h"
vtkStandardNewMacro(vtkGenericDataObjectWriter);
template<typename WriterT>
vtkDataWriter* CreateWriter(vtkAlgorithmOutput* input)
{
WriterT* const writer = WriterT::New();
writer->SetInputConnection(input);
return writer;
}
vtkGenericDataObjectWriter::vtkGenericDataObjectWriter()
{
}
vtkGenericDataObjectWriter::~vtkGenericDataObjectWriter()
{
}
void vtkGenericDataObjectWriter::WriteData()
{
vtkDebugMacro(<<"Writing vtk data object ...");
vtkDataWriter* writer = 0;
vtkAlgorithmOutput* input = this->GetInputConnection(0, 0);
switch(this->GetInput()->GetDataObjectType())
{
case VTK_COMPOSITE_DATA_SET:
vtkErrorMacro(<< "Cannot write composite data set");
return;
case VTK_DATA_OBJECT:
vtkErrorMacro(<< "Cannot write data object");
return;
case VTK_DATA_SET:
vtkErrorMacro(<< "Cannot write data set");
return;
case VTK_GENERIC_DATA_SET:
vtkErrorMacro(<< "Cannot write generic data set");
return;
case VTK_DIRECTED_GRAPH:
case VTK_UNDIRECTED_GRAPH:
case VTK_MOLECULE:
writer = CreateWriter<vtkGraphWriter>(input);
break;
case VTK_HIERARCHICAL_DATA_SET:
vtkErrorMacro(<< "Cannot write hierarchical data set");
return;
case VTK_HYPER_OCTREE:
vtkErrorMacro(<< "Cannot write hyper octree");
return;
case VTK_IMAGE_DATA:
writer = CreateWriter<vtkStructuredPointsWriter>(input);
break;
case VTK_MULTIBLOCK_DATA_SET:
case VTK_HIERARCHICAL_BOX_DATA_SET:
case VTK_MULTIPIECE_DATA_SET:
case VTK_OVERLAPPING_AMR:
case VTK_NON_OVERLAPPING_AMR:
writer = CreateWriter<vtkCompositeDataWriter>(input);
break;
case VTK_MULTIGROUP_DATA_SET:
vtkErrorMacro(<< "Cannot write multigroup data set");
return;
case VTK_PIECEWISE_FUNCTION:
vtkErrorMacro(<< "Cannot write piecewise function");
return;
case VTK_POINT_SET:
vtkErrorMacro(<< "Cannot write point set");
return;
case VTK_POLY_DATA:
writer = CreateWriter<vtkPolyDataWriter>(input);
break;
case VTK_RECTILINEAR_GRID:
writer = CreateWriter<vtkRectilinearGridWriter>(input);
break;
case VTK_STRUCTURED_GRID:
writer = CreateWriter<vtkStructuredGridWriter>(input);
break;
case VTK_STRUCTURED_POINTS:
writer = CreateWriter<vtkStructuredPointsWriter>(input);
break;
case VTK_TABLE:
writer = CreateWriter<vtkTableWriter>(input);
break;
case VTK_TREE:
writer = CreateWriter<vtkTreeWriter>(input);
break;
case VTK_TEMPORAL_DATA_SET:
vtkErrorMacro(<< "Cannot write temporal data set");
return;
case VTK_UNIFORM_GRID:
vtkErrorMacro(<< "Cannot write uniform grid");
return;
case VTK_UNSTRUCTURED_GRID:
writer = CreateWriter<vtkUnstructuredGridWriter>(input);
break;
}
if(!writer)
{
vtkErrorMacro(<< "null data object writer");
return;
}
writer->SetFileName(this->FileName);
writer->SetScalarsName(this->ScalarsName);
writer->SetVectorsName(this->VectorsName);
writer->SetNormalsName(this->NormalsName);
writer->SetTensorsName(this->TensorsName);
writer->SetTCoordsName(this->TCoordsName);
writer->SetHeader(this->Header);
writer->SetLookupTableName(this->LookupTableName);
writer->SetFieldDataName(this->FieldDataName);
writer->SetFileType(this->FileType);
writer->SetDebug(this->Debug);
writer->SetWriteToOutputString(this->WriteToOutputString);
writer->Write();
if (writer->GetErrorCode() == vtkErrorCode::OutOfDiskSpaceError)
{
this->SetErrorCode(vtkErrorCode::OutOfDiskSpaceError);
}
if (this->WriteToOutputString)
{
delete [] this->OutputString;
this->OutputStringLength = writer->GetOutputStringLength();
this->OutputString = writer->RegisterAndGetOutputString();
}
writer->Delete();
}
int vtkGenericDataObjectWriter::FillInputPortInformation(int, vtkInformation *info)
{
info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkDataObject");
return 1;
}
void vtkGenericDataObjectWriter::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os,indent);
}