/*========================================================================= Program: Visualization Toolkit Module: $RCSfile: vtkHierarchicalDataSetAlgorithm.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 "vtkHierarchicalDataSetAlgorithm.h" #include "vtkCommand.h" #include "vtkCompositeDataPipeline.h" #include "vtkDataSet.h" #include "vtkHierarchicalDataSet.h" #include "vtkInformation.h" #include "vtkInformationVector.h" #include "vtkObjectFactory.h" #include "vtkStreamingDemandDrivenPipeline.h" vtkCxxRevisionMacro(vtkHierarchicalDataSetAlgorithm, "$Revision: 1.6 $"); vtkStandardNewMacro(vtkHierarchicalDataSetAlgorithm); //---------------------------------------------------------------------------- // Instantiate object so that cell data is not passed to output. vtkHierarchicalDataSetAlgorithm::vtkHierarchicalDataSetAlgorithm() { this->SetNumberOfInputPorts(1); this->SetNumberOfOutputPorts(1); } //---------------------------------------------------------------------------- vtkHierarchicalDataSet* vtkHierarchicalDataSetAlgorithm::GetOutput() { return this->GetOutput(0); } //---------------------------------------------------------------------------- vtkHierarchicalDataSet* vtkHierarchicalDataSetAlgorithm::GetOutput(int port) { vtkDataObject* output = vtkCompositeDataPipeline::SafeDownCast(this->GetExecutive())-> GetCompositeOutputData(port); return vtkHierarchicalDataSet::SafeDownCast(output); } //---------------------------------------------------------------------------- void vtkHierarchicalDataSetAlgorithm::SetInput(vtkDataObject* input) { this->SetInput(0, input); } //---------------------------------------------------------------------------- void vtkHierarchicalDataSetAlgorithm::SetInput(int index, vtkDataObject* input) { if(input) { this->SetInputConnection(index, input->GetProducerPort()); } else { // Setting a NULL input removes the connection. this->SetInputConnection(index, 0); } } //---------------------------------------------------------------------------- vtkDataObject* vtkHierarchicalDataSetAlgorithm::GetInput(int port) { if (this->GetNumberOfInputConnections(port) < 1) { return 0; } return this->GetExecutive()->GetInputData(port, 0); } //---------------------------------------------------------------------------- int vtkHierarchicalDataSetAlgorithm::ProcessRequest( vtkInformation* request, vtkInformationVector** inputVector, vtkInformationVector* outputVector) { // create the output if(request->Has(vtkDemandDrivenPipeline::REQUEST_DATA_OBJECT())) { return this->RequestDataObject(request, inputVector, outputVector); } // generate the data if(request->Has(vtkCompositeDataPipeline::REQUEST_DATA())) { int retVal = this->RequestData(request, inputVector, outputVector); return retVal; } // execute information if(request->Has(vtkDemandDrivenPipeline::REQUEST_INFORMATION())) { if(request->Has(vtkStreamingDemandDrivenPipeline::FROM_OUTPUT_PORT())) { int outputPort = request->Get( vtkStreamingDemandDrivenPipeline::FROM_OUTPUT_PORT()); vtkInformation* info = outputVector->GetInformationObject(outputPort); if (info) { info->Set( vtkStreamingDemandDrivenPipeline::MAXIMUM_NUMBER_OF_PIECES(), -1); } } return this->RequestInformation(request, inputVector, outputVector); } // set update extent if(request->Has( vtkCompositeDataPipeline::REQUEST_UPDATE_EXTENT())) { return this->RequestUpdateExtent(request, inputVector, outputVector); } return this->Superclass::ProcessRequest(request, inputVector, outputVector); } //---------------------------------------------------------------------------- int vtkHierarchicalDataSetAlgorithm::FillOutputPortInformation( int vtkNotUsed(port), vtkInformation* info) { info->Set(vtkDataObject::DATA_TYPE_NAME(), "vtkDataObject"); info->Set(vtkCompositeDataPipeline::COMPOSITE_DATA_TYPE_NAME(), "vtkHierarchicalDataSet"); return 1; } //---------------------------------------------------------------------------- int vtkHierarchicalDataSetAlgorithm::FillInputPortInformation( int vtkNotUsed(port), vtkInformation* info) { // now add our info info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkDataObject"); info->Set(vtkCompositeDataPipeline::INPUT_REQUIRED_COMPOSITE_DATA_TYPE(), "vtkHierarchicalDataSet"); return 1; } //---------------------------------------------------------------------------- vtkExecutive* vtkHierarchicalDataSetAlgorithm::CreateDefaultExecutive() { return vtkCompositeDataPipeline::New(); } //---------------------------------------------------------------------------- void vtkHierarchicalDataSetAlgorithm::PrintSelf(ostream& os, vtkIndent indent) { this->Superclass::PrintSelf(os,indent); }