/*========================================================================= Program: Visualization Toolkit Module: vtkLabelHierarchyAlgorithm.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 "vtkLabelHierarchyAlgorithm.h" #include "vtkCommand.h" #include "vtkInformation.h" #include "vtkInformationVector.h" #include "vtkObjectFactory.h" #include "vtkLabelHierarchy.h" #include "vtkStreamingDemandDrivenPipeline.h" vtkStandardNewMacro(vtkLabelHierarchyAlgorithm); //---------------------------------------------------------------------------- vtkLabelHierarchyAlgorithm::vtkLabelHierarchyAlgorithm() { // by default assume filters have one input and one output // subclasses that deviate should modify this setting this->SetNumberOfInputPorts( 1 ); this->SetNumberOfOutputPorts( 1 ); } //---------------------------------------------------------------------------- vtkLabelHierarchyAlgorithm::~vtkLabelHierarchyAlgorithm() { } //---------------------------------------------------------------------------- void vtkLabelHierarchyAlgorithm::PrintSelf(ostream& os, vtkIndent indent) { this->Superclass::PrintSelf(os, indent); } //---------------------------------------------------------------------------- vtkLabelHierarchy* vtkLabelHierarchyAlgorithm::GetOutput() { return this->GetOutput(0); } //---------------------------------------------------------------------------- vtkLabelHierarchy* vtkLabelHierarchyAlgorithm::GetOutput(int port) { return vtkLabelHierarchy::SafeDownCast(this->GetOutputDataObject(port)); } //---------------------------------------------------------------------------- void vtkLabelHierarchyAlgorithm::SetOutput(vtkDataObject* d) { this->GetExecutive()->SetOutputData(0, d); } //---------------------------------------------------------------------------- vtkDataObject* vtkLabelHierarchyAlgorithm::GetInput() { return this->GetInput(0); } //---------------------------------------------------------------------------- vtkDataObject* vtkLabelHierarchyAlgorithm::GetInput(int port) { return this->GetExecutive()->GetInputData(port, 0); } //---------------------------------------------------------------------------- vtkLabelHierarchy* vtkLabelHierarchyAlgorithm::GetLabelHierarchyInput(int port) { return vtkLabelHierarchy::SafeDownCast(this->GetInput(port)); } //---------------------------------------------------------------------------- int vtkLabelHierarchyAlgorithm::ProcessRequest(vtkInformation* request, vtkInformationVector** inputVector, vtkInformationVector* outputVector) { // Create an output object of the correct type. if(request->Has(vtkDemandDrivenPipeline::REQUEST_DATA_OBJECT())) { return this->RequestDataObject(request, inputVector, outputVector); } // generate the data if(request->Has(vtkDemandDrivenPipeline::REQUEST_DATA())) { return this->RequestData(request, inputVector, outputVector); } if(request->Has(vtkStreamingDemandDrivenPipeline::REQUEST_UPDATE_EXTENT())) { return this->RequestUpdateExtent(request, inputVector, outputVector); } // execute information if(request->Has(vtkDemandDrivenPipeline::REQUEST_INFORMATION())) { return this->RequestInformation(request, inputVector, outputVector); } return this->Superclass::ProcessRequest(request, inputVector, outputVector); } //---------------------------------------------------------------------------- int vtkLabelHierarchyAlgorithm::FillOutputPortInformation( int vtkNotUsed(port), vtkInformation* info) { // now add our info info->Set(vtkDataObject::DATA_TYPE_NAME(), "vtkLabelHierarchy"); return 1; } //---------------------------------------------------------------------------- int vtkLabelHierarchyAlgorithm::FillInputPortInformation( int vtkNotUsed(port), vtkInformation* info) { info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkLabelHierarchy"); return 1; } //---------------------------------------------------------------------------- int vtkLabelHierarchyAlgorithm::RequestDataObject( vtkInformation* vtkNotUsed(request), vtkInformationVector** vtkNotUsed(inputVector), vtkInformationVector* outputVector ) { for ( int i = 0; i < this->GetNumberOfOutputPorts(); ++i ) { vtkInformation* outInfo = outputVector->GetInformationObject( i ); vtkLabelHierarchy* output = vtkLabelHierarchy::SafeDownCast( outInfo->Get( vtkDataObject::DATA_OBJECT() ) ); if ( ! output ) { output = vtkLabelHierarchy::New(); outInfo->Set( vtkDataObject::DATA_OBJECT(), output ); output->FastDelete(); } } return 1; } //---------------------------------------------------------------------------- int vtkLabelHierarchyAlgorithm::RequestInformation( vtkInformation* vtkNotUsed(request), vtkInformationVector** vtkNotUsed(inputVector), vtkInformationVector* vtkNotUsed(outputVector)) { // do nothing let subclasses handle it return 1; } //---------------------------------------------------------------------------- int vtkLabelHierarchyAlgorithm::RequestUpdateExtent( vtkInformation* vtkNotUsed(request), vtkInformationVector** inputVector, vtkInformationVector* vtkNotUsed(outputVector)) { int numInputPorts = this->GetNumberOfInputPorts(); for (int i=0; iGetNumberOfInputConnections(i); for (int j=0; jGetInformationObject(j); inputInfo->Set(vtkStreamingDemandDrivenPipeline::EXACT_EXTENT(), 1); } } return 1; } //---------------------------------------------------------------------------- // This is the superclasses style of Execute method. Convert it into // an imaging style Execute method. int vtkLabelHierarchyAlgorithm::RequestData( vtkInformation* vtkNotUsed(request), vtkInformationVector** vtkNotUsed( inputVector ), vtkInformationVector* vtkNotUsed(outputVector) ) { // do nothing let subclasses handle it return 1; } //---------------------------------------------------------------------------- void vtkLabelHierarchyAlgorithm::SetInputData(vtkDataObject* input) { this->SetInputData(0, input); } //---------------------------------------------------------------------------- void vtkLabelHierarchyAlgorithm::SetInputData(int index, vtkDataObject* input) { this->SetInputDataInternal(index, input); } //---------------------------------------------------------------------------- void vtkLabelHierarchyAlgorithm::AddInputData(vtkDataObject* input) { this->AddInputData(0, input); } //---------------------------------------------------------------------------- void vtkLabelHierarchyAlgorithm::AddInputData(int index, vtkDataObject* input) { this->AddInputDataInternal(index, input); }