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.
 
 
 
 
 
 

143 lines
4.5 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkPCellDataToPointData.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 "vtkPCellDataToPointData.h"
#include "vtkInformation.h"
#include "vtkInformationVector.h"
#include "vtkPolyData.h"
#include "vtkStreamingDemandDrivenPipeline.h"
#include "vtkUnstructuredGrid.h"
#include "vtkObjectFactory.h"
vtkCxxRevisionMacro(vtkPCellDataToPointData, "$Revision: 1.5 $");
vtkStandardNewMacro(vtkPCellDataToPointData);
//----------------------------------------------------------------------------
vtkPCellDataToPointData::vtkPCellDataToPointData()
{
this->PieceInvariant = 1;
}
//----------------------------------------------------------------------------
int vtkPCellDataToPointData::RequestData(
vtkInformation* request,
vtkInformationVector** inputVector ,
vtkInformationVector* outputVector)
{
vtkInformation* info = outputVector->GetInformationObject(0);
vtkDataSet *output = vtkDataSet::SafeDownCast(
info->Get(vtkDataObject::DATA_OBJECT()));
if (!output) {return 0;}
if ( !this->Superclass::RequestData(request, inputVector, outputVector) )
{
return 0;
}
// Remove the extra (now ivalid) ghost cells.
// This is only necessary fro unstructured data.
if (this->PieceInvariant)
{
vtkInformation* outInfo = outputVector->GetInformationObject(0);
int ghostLevel = outInfo->Get(
vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS());
vtkPolyData *pd = vtkPolyData::SafeDownCast(output);
vtkUnstructuredGrid *ug = vtkUnstructuredGrid::SafeDownCast(output);
if (pd)
{
pd->RemoveGhostCells(ghostLevel+1);
}
if (ug)
{
ug->RemoveGhostCells(ghostLevel+1);
}
}
return 1;
}
//--------------------------------------------------------------------------
int vtkPCellDataToPointData::ComputeInputUpdateExtent(
vtkInformation*,
vtkInformationVector** inputVector,
vtkInformationVector* outputVector)
{
if (this->PieceInvariant == 0)
{
// I believe the default input update extent
// is set to the input update extent.
return 1;
}
vtkInformation* opInfo = this->GetOutputPortInformation(0);
int extentType = opInfo->Get(vtkDataObject::DATA_EXTENT_TYPE());
vtkInformation* outInfo = outputVector->GetInformationObject(0);
vtkInformation* inInfo = inputVector[0]->GetInformationObject(0);
int piece, numPieces, ghostLevel;
int* wholeExt;
int* upExt;
int ext[6];
switch (extentType)
{
case VTK_PIECES_EXTENT:
piece = outInfo->Get(
vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER());
numPieces = outInfo->Get(
vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_PIECES());
ghostLevel = outInfo->Get(
vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS()) + 1;
inInfo->Set(
vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER(), piece);
inInfo->Set(
vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_PIECES(), numPieces);
inInfo->Set(
vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS(),
ghostLevel);
return 1;
break;
case VTK_3D_EXTENT:
wholeExt = inInfo->Get(
vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT());
upExt = outInfo->Get(
vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT());
memcpy(ext, upExt, 6*sizeof(int));
for (int i = 0; i < 3; ++i)
{
--ext[i*2];
if (ext[i*2] < wholeExt[i*2])
{
ext[i*2] = wholeExt[i*2];
}
++ext[i*2+1];
if (ext[i*2+1] > wholeExt[i*2+1])
{
ext[i*2+1] = wholeExt[i*2+1];
}
}
inInfo->Set(
vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT(), ext, 6);
return 1;
break;
}
return 0;
}
//----------------------------------------------------------------------------
void vtkPCellDataToPointData::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os,indent);
os << indent << "PieceInvariant: "
<< this->PieceInvariant << "\n";
}