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.
339 lines
9.7 KiB
339 lines
9.7 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkDataSetToDataObjectFilter.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 "vtkDataSetToDataObjectFilter.h"
|
|
|
|
#include "vtkCellArray.h"
|
|
#include "vtkCellData.h"
|
|
#include "vtkFieldData.h"
|
|
#include "vtkFloatArray.h"
|
|
#include "vtkInformation.h"
|
|
#include "vtkInformationVector.h"
|
|
#include "vtkObjectFactory.h"
|
|
#include "vtkPointData.h"
|
|
#include "vtkPolyData.h"
|
|
#include "vtkRectilinearGrid.h"
|
|
#include "vtkStreamingDemandDrivenPipeline.h"
|
|
#include "vtkStructuredGrid.h"
|
|
#include "vtkStructuredPoints.h"
|
|
#include "vtkUnstructuredGrid.h"
|
|
|
|
vtkCxxRevisionMacro(vtkDataSetToDataObjectFilter, "$Revision: 1.34 $");
|
|
vtkStandardNewMacro(vtkDataSetToDataObjectFilter);
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Instantiate object.
|
|
vtkDataSetToDataObjectFilter::vtkDataSetToDataObjectFilter()
|
|
{
|
|
this->Geometry = 1;
|
|
this->Topology = 1;
|
|
this->PointData = 1;
|
|
this->CellData = 1;
|
|
this->FieldData = 1;
|
|
}
|
|
|
|
vtkDataSetToDataObjectFilter::~vtkDataSetToDataObjectFilter()
|
|
{
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int vtkDataSetToDataObjectFilter::RequestData(
|
|
vtkInformation *,
|
|
vtkInformationVector **inputVector,
|
|
vtkInformationVector *outputVector)
|
|
{
|
|
vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
|
|
vtkInformation *outInfo = outputVector->GetInformationObject(0);
|
|
vtkDataSet *input = vtkDataSet::SafeDownCast(
|
|
inInfo->Get(vtkDataObject::DATA_OBJECT()));
|
|
vtkDataObject *output = outInfo->Get(vtkDataObject::DATA_OBJECT());
|
|
vtkFieldData *fd=vtkFieldData::New();
|
|
vtkPoints *pts;
|
|
vtkDataArray *da;
|
|
int i;
|
|
|
|
vtkDebugMacro(<<"Generating field data from data set");
|
|
|
|
if ( this->Geometry)
|
|
{
|
|
if ( input->GetDataObjectType() == VTK_POLY_DATA )
|
|
{
|
|
pts = ((vtkPolyData *)input)->GetPoints();
|
|
if (pts)
|
|
{
|
|
da = pts->GetData();
|
|
da->SetName("Points");
|
|
fd->AddArray( da );
|
|
}
|
|
}
|
|
|
|
else if ( input->GetDataObjectType() == VTK_STRUCTURED_POINTS )
|
|
{
|
|
vtkStructuredPoints *spts=(vtkStructuredPoints *)input;
|
|
|
|
vtkFloatArray *origin=vtkFloatArray::New();
|
|
origin->SetNumberOfValues(3);
|
|
double org[3];
|
|
spts->GetOrigin(org);
|
|
origin->SetValue(0, org[0]);
|
|
origin->SetValue(1, org[1]);
|
|
origin->SetValue(2, org[2]);
|
|
origin->SetName("Origin");
|
|
fd->AddArray(origin);
|
|
origin->Delete();
|
|
|
|
vtkFloatArray *spacing=vtkFloatArray::New();
|
|
spacing->SetNumberOfValues(3);
|
|
double sp[3];
|
|
spts->GetSpacing(sp);
|
|
spacing->SetValue(0, sp[0]);
|
|
spacing->SetValue(1, sp[1]);
|
|
spacing->SetValue(2, sp[2]);
|
|
spacing->SetName("Spacing");
|
|
fd->AddArray(spacing);
|
|
spacing->Delete();
|
|
}
|
|
|
|
else if ( input->GetDataObjectType() == VTK_STRUCTURED_GRID )
|
|
{
|
|
pts = ((vtkPolyData *)input)->GetPoints();
|
|
if (pts)
|
|
{
|
|
da = pts->GetData();
|
|
da->SetName("Points");
|
|
fd->AddArray( da );
|
|
}
|
|
}
|
|
|
|
else if ( input->GetDataObjectType() == VTK_RECTILINEAR_GRID )
|
|
{
|
|
vtkRectilinearGrid *rgrid=(vtkRectilinearGrid *)input;
|
|
da = rgrid->GetXCoordinates();
|
|
if (da != NULL)
|
|
{
|
|
da->SetName("XCoordinates");
|
|
fd->AddArray( da );
|
|
}
|
|
da = rgrid->GetYCoordinates();
|
|
if (da != NULL)
|
|
{
|
|
da->SetName("YCoordinates");
|
|
fd->AddArray( da );
|
|
}
|
|
da = rgrid->GetZCoordinates();
|
|
if (da != NULL)
|
|
{
|
|
da->SetName("ZCoordinates");
|
|
fd->AddArray( da );
|
|
}
|
|
}
|
|
|
|
else if ( input->GetDataObjectType() == VTK_UNSTRUCTURED_GRID )
|
|
{
|
|
pts = ((vtkPolyData *)input)->GetPoints();
|
|
if (pts)
|
|
{
|
|
da = pts->GetData();
|
|
da->SetName("Points");
|
|
fd->AddArray( da );
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
vtkErrorMacro(<<"Unsupported dataset type!");
|
|
fd->Delete();
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if (this->Topology)
|
|
{
|
|
if ( input->GetDataObjectType() == VTK_POLY_DATA )
|
|
{
|
|
vtkPolyData *pd=(vtkPolyData *)input;
|
|
vtkCellArray *ca;
|
|
if ( pd->GetVerts()->GetNumberOfCells() > 0 )
|
|
{
|
|
ca = pd->GetVerts();
|
|
ca->GetData()->SetName("Verts");
|
|
fd->AddArray( ca->GetData() );
|
|
}
|
|
if ( pd->GetLines()->GetNumberOfCells() > 0 )
|
|
{
|
|
ca = pd->GetLines();
|
|
ca->GetData()->SetName("Lines");
|
|
fd->AddArray( ca->GetData() );
|
|
}
|
|
if ( pd->GetPolys()->GetNumberOfCells() > 0 )
|
|
{
|
|
ca = pd->GetPolys();
|
|
ca->GetData()->SetName("Polys");
|
|
fd->AddArray( ca->GetData() );
|
|
}
|
|
if ( pd->GetStrips()->GetNumberOfCells() > 0 )
|
|
{
|
|
ca = pd->GetStrips();
|
|
ca->GetData()->SetName("Strips");
|
|
fd->AddArray( ca->GetData() );
|
|
}
|
|
}
|
|
|
|
else if ( input->GetDataObjectType() == VTK_STRUCTURED_POINTS )
|
|
{
|
|
vtkIntArray *dimensions=vtkIntArray::New();
|
|
dimensions->SetNumberOfValues(3);
|
|
int dims[3];
|
|
((vtkStructuredPoints *)input)->GetDimensions(dims);
|
|
dimensions->SetValue(0, dims[0]);
|
|
dimensions->SetValue(1, dims[1]);
|
|
dimensions->SetValue(2, dims[2]);
|
|
dimensions->SetName("Dimensions");
|
|
fd->AddArray( dimensions );
|
|
dimensions->Delete();
|
|
}
|
|
|
|
else if ( input->GetDataObjectType() == VTK_STRUCTURED_GRID )
|
|
{
|
|
vtkIntArray *dimensions=vtkIntArray::New();
|
|
dimensions->SetNumberOfValues(3);
|
|
int dims[3];
|
|
((vtkStructuredGrid *)input)->GetDimensions(dims);
|
|
dimensions->SetValue(0, dims[0]);
|
|
dimensions->SetValue(1, dims[1]);
|
|
dimensions->SetValue(2, dims[2]);
|
|
dimensions->SetName("Dimensions");
|
|
fd->AddArray( dimensions );
|
|
dimensions->Delete();
|
|
}
|
|
|
|
else if ( input->GetDataObjectType() == VTK_RECTILINEAR_GRID )
|
|
{
|
|
vtkIntArray *dimensions=vtkIntArray::New();
|
|
dimensions->SetNumberOfValues(3);
|
|
int dims[3];
|
|
((vtkRectilinearGrid *)input)->GetDimensions(dims);
|
|
dimensions->SetValue(0, dims[0]);
|
|
dimensions->SetValue(1, dims[1]);
|
|
dimensions->SetValue(2, dims[2]);
|
|
dimensions->SetName("Dimensions");
|
|
fd->AddArray( dimensions );
|
|
dimensions->Delete();
|
|
}
|
|
|
|
else if ( input->GetDataObjectType() == VTK_UNSTRUCTURED_GRID )
|
|
{
|
|
vtkCellArray *ca=((vtkUnstructuredGrid *)input)->GetCells();
|
|
if ( ca != NULL && ca->GetNumberOfCells() > 0 )
|
|
{
|
|
ca->GetData()->SetName("Cells");
|
|
fd->AddArray( ca->GetData() );
|
|
|
|
vtkIdType numCells=input->GetNumberOfCells();
|
|
vtkIntArray *types=vtkIntArray::New();
|
|
types->SetNumberOfValues(numCells);
|
|
for (i=0; i<numCells; i++)
|
|
{
|
|
types->SetValue(i, input->GetCellType(i));
|
|
}
|
|
types->SetName("CellTypes");
|
|
fd->AddArray( types );
|
|
types->Delete();
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
vtkErrorMacro(<<"Unsupported dataset type!");
|
|
fd->Delete();
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
vtkFieldData* fieldData;
|
|
|
|
if (this->FieldData)
|
|
{
|
|
fieldData = input->GetFieldData();
|
|
|
|
for (i=0; i<fieldData->GetNumberOfArrays(); i++)
|
|
{
|
|
fd->AddArray(fieldData->GetArray(i));
|
|
}
|
|
}
|
|
|
|
if (this->PointData)
|
|
{
|
|
fieldData = input->GetPointData();
|
|
|
|
for (i=0; i<fieldData->GetNumberOfArrays(); i++)
|
|
{
|
|
fd->AddArray(fieldData->GetArray(i));
|
|
}
|
|
}
|
|
|
|
if (this->CellData)
|
|
{
|
|
fieldData = input->GetCellData();
|
|
|
|
for (i=0; i<fieldData->GetNumberOfArrays(); i++)
|
|
{
|
|
fd->AddArray(fieldData->GetArray(i));
|
|
}
|
|
}
|
|
|
|
output->SetFieldData(fd);
|
|
fd->Delete();
|
|
return 1;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int vtkDataSetToDataObjectFilter::RequestUpdateExtent(
|
|
vtkInformation *,
|
|
vtkInformationVector **inputVector,
|
|
vtkInformationVector *)
|
|
{
|
|
vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
|
|
inInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER(), 0);
|
|
inInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_PIECES(), 1);
|
|
inInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS(),
|
|
0);
|
|
inInfo->Set(vtkStreamingDemandDrivenPipeline::EXACT_EXTENT(), 1);
|
|
|
|
return 1;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int vtkDataSetToDataObjectFilter::FillInputPortInformation(int port,
|
|
vtkInformation* info)
|
|
{
|
|
if(!this->Superclass::FillInputPortInformation(port, info))
|
|
{
|
|
return 0;
|
|
}
|
|
info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkDataSet");
|
|
return 1;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkDataSetToDataObjectFilter::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os,indent);
|
|
|
|
os << indent << "Geometry: " << (this->Geometry ? "On\n" : "Off\n");
|
|
os << indent << "Topology: " << (this->Topology ? "On\n" : "Off\n");
|
|
os << indent << "Field Data: " << (this->FieldData ? "On\n" : "Off\n");
|
|
os << indent << "Point Data: " << (this->PointData ? "On\n" : "Off\n");
|
|
os << indent << "Cell Data: " << (this->CellData ? "On\n" : "Off\n");
|
|
}
|
|
|