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
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";
|
|
}
|
|
|