/*========================================================================= Program: Visualization Toolkit Module: vtkDataSetAlgorithm.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 "vtkDataSetAlgorithm.h" #include "vtkCommand.h" #include "vtkDataSet.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" vtkStandardNewMacro(vtkDataSetAlgorithm); //------------------------------------------------------------------------------ // Instantiate object so that cell data is not passed to output. vtkDataSetAlgorithm::vtkDataSetAlgorithm() { this->SetNumberOfInputPorts(1); this->SetNumberOfOutputPorts(1); } //------------------------------------------------------------------------------ vtkDataSet* vtkDataSetAlgorithm::GetOutput() { return this->GetOutput(0); } //------------------------------------------------------------------------------ vtkDataSet* vtkDataSetAlgorithm::GetOutput(int port) { return vtkDataSet::SafeDownCast(this->GetOutputDataObject(port)); } //------------------------------------------------------------------------------ // Get the output as vtkImageData vtkImageData* vtkDataSetAlgorithm::GetImageDataOutput() { return vtkImageData::SafeDownCast(this->GetOutput()); } //------------------------------------------------------------------------------ // Get the output as vtkPolyData. vtkPolyData* vtkDataSetAlgorithm::GetPolyDataOutput() { return vtkPolyData::SafeDownCast(this->GetOutput()); } //------------------------------------------------------------------------------ // Get the output as vtkStructuredPoints. vtkStructuredPoints* vtkDataSetAlgorithm::GetStructuredPointsOutput() { return vtkStructuredPoints::SafeDownCast(this->GetOutput()); } //------------------------------------------------------------------------------ // Get the output as vtkStructuredGrid. vtkStructuredGrid* vtkDataSetAlgorithm::GetStructuredGridOutput() { return vtkStructuredGrid::SafeDownCast(this->GetOutput()); } //------------------------------------------------------------------------------ // Get the output as vtkUnstructuredGrid. vtkUnstructuredGrid* vtkDataSetAlgorithm::GetUnstructuredGridOutput() { return vtkUnstructuredGrid::SafeDownCast(this->GetOutput()); } //------------------------------------------------------------------------------ // Get the output as vtkRectilinearGrid. vtkRectilinearGrid* vtkDataSetAlgorithm::GetRectilinearGridOutput() { return vtkRectilinearGrid::SafeDownCast(this->GetOutput()); } //------------------------------------------------------------------------------ void vtkDataSetAlgorithm::SetInputData(vtkDataObject* input) { this->SetInputData(0, input); } //------------------------------------------------------------------------------ void vtkDataSetAlgorithm::SetInputData(int index, vtkDataObject* input) { this->SetInputDataInternal(index, input); } //------------------------------------------------------------------------------ void vtkDataSetAlgorithm::SetInputData(vtkDataSet* input) { this->SetInputData(0, static_cast(input)); } //------------------------------------------------------------------------------ void vtkDataSetAlgorithm::SetInputData(int index, vtkDataSet* input) { this->SetInputData(index, static_cast(input)); } //------------------------------------------------------------------------------ void vtkDataSetAlgorithm::AddInputData(vtkDataObject* input) { this->AddInputData(0, input); } //------------------------------------------------------------------------------ void vtkDataSetAlgorithm::AddInputData(int index, vtkDataObject* input) { this->AddInputDataInternal(index, input); } //------------------------------------------------------------------------------ void vtkDataSetAlgorithm::AddInputData(vtkDataSet* input) { this->AddInputData(0, static_cast(input)); } //------------------------------------------------------------------------------ void vtkDataSetAlgorithm::AddInputData(int index, vtkDataSet* input) { this->AddInputData(index, static_cast(input)); } //------------------------------------------------------------------------------ vtkDataObject* vtkDataSetAlgorithm::GetInput() { return this->GetInput(0); } //------------------------------------------------------------------------------ vtkDataObject* vtkDataSetAlgorithm::GetInput(int port) { return this->GetExecutive()->GetInputData(port, 0); } //------------------------------------------------------------------------------ vtkTypeBool vtkDataSetAlgorithm::ProcessRequest( vtkInformation* request, vtkInformationVector** inputVector, vtkInformationVector* outputVector) { // generate the data if (request->Has(vtkDemandDrivenPipeline::REQUEST_DATA())) { return this->RequestData(request, inputVector, outputVector); } // create the output if (request->Has(vtkDemandDrivenPipeline::REQUEST_DATA_OBJECT())) { return this->RequestDataObject(request, inputVector, outputVector); } // execute information if (request->Has(vtkDemandDrivenPipeline::REQUEST_INFORMATION())) { return this->RequestInformation(request, inputVector, outputVector); } // set update extent if (request->Has(vtkStreamingDemandDrivenPipeline::REQUEST_UPDATE_EXTENT())) { return this->RequestUpdateExtent(request, inputVector, outputVector); } return this->Superclass::ProcessRequest(request, inputVector, outputVector); } //------------------------------------------------------------------------------ int vtkDataSetAlgorithm::RequestDataObject( vtkInformation*, vtkInformationVector** inputVector, vtkInformationVector* outputVector) { vtkInformation* inInfo = inputVector[0]->GetInformationObject(0); if (!inInfo) { return 0; } vtkDataSet* input = vtkDataSet::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT())); if (input) { // for each output for (int i = 0; i < this->GetNumberOfOutputPorts(); ++i) { vtkInformation* info = outputVector->GetInformationObject(i); vtkDataSet* output = vtkDataSet::SafeDownCast(info->Get(vtkDataObject::DATA_OBJECT())); if (!output || !output->IsA(input->GetClassName())) { vtkDataSet* newOutput = input->NewInstance(); info->Set(vtkDataObject::DATA_OBJECT(), newOutput); newOutput->Delete(); } } return 1; } return 0; } //------------------------------------------------------------------------------ int vtkDataSetAlgorithm::FillOutputPortInformation(int vtkNotUsed(port), vtkInformation* info) { // now add our info info->Set(vtkDataObject::DATA_TYPE_NAME(), "vtkDataSet"); return 1; } //------------------------------------------------------------------------------ int vtkDataSetAlgorithm::FillInputPortInformation(int vtkNotUsed(port), vtkInformation* info) { info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkDataSet"); return 1; } //------------------------------------------------------------------------------ void vtkDataSetAlgorithm::PrintSelf(ostream& os, vtkIndent indent) { this->Superclass::PrintSelf(os, indent); }