00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date$ 00006 Version: $Revision$ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #include "mitkNavigationDataToNavigationDataFilter.h" 00019 00020 00021 mitk::NavigationDataToNavigationDataFilter::NavigationDataToNavigationDataFilter() 00022 : mitk::NavigationDataSource() 00023 { 00024 } 00025 00026 00027 mitk::NavigationDataToNavigationDataFilter::~NavigationDataToNavigationDataFilter() 00028 { 00029 } 00030 00031 00032 void mitk::NavigationDataToNavigationDataFilter::SetInput( const NavigationData* nd ) 00033 { 00034 this->SetInput(0, nd); 00035 } 00036 00037 00038 void mitk::NavigationDataToNavigationDataFilter::SetInput( unsigned int idx, const NavigationData* nd ) 00039 { 00040 if ((nd == NULL) && (idx == this->GetNumberOfInputs() - 1)) // if the last input is set to NULL, reduce the number of inputs by one 00041 this->SetNumberOfInputs(this->GetNumberOfInputs() - 1); 00042 else 00043 this->ProcessObject::SetNthInput(idx, const_cast<NavigationData*>(nd)); // Process object is not const-correct so the const_cast is required here 00044 00045 this->CreateOutputsForAllInputs(); 00046 } 00047 00048 00049 const mitk::NavigationData* mitk::NavigationDataToNavigationDataFilter::GetInput( void ) const 00050 { 00051 if (this->GetNumberOfInputs() < 1) 00052 return NULL; 00053 00054 return static_cast<const NavigationData*>(this->ProcessObject::GetInput(0)); 00055 } 00056 00057 00058 const mitk::NavigationData* mitk::NavigationDataToNavigationDataFilter::GetInput( unsigned int idx ) const 00059 { 00060 if (this->GetNumberOfInputs() < 1) 00061 return NULL; 00062 00063 return static_cast<const NavigationData*>(this->ProcessObject::GetInput(idx)); 00064 } 00065 00066 00067 const mitk::NavigationData* mitk::NavigationDataToNavigationDataFilter::GetInput(std::string navDataName) const 00068 { 00069 const DataObjectPointerArray& inputs = const_cast<Self*>(this)->GetInputs(); 00070 for (DataObjectPointerArray::const_iterator it = inputs.begin(); it != inputs.end(); ++it) 00071 if (std::string(navDataName) == (static_cast<NavigationData*>(it->GetPointer()))->GetName()) 00072 return static_cast<NavigationData*>(it->GetPointer()); 00073 return NULL; 00074 } 00075 00076 00077 itk::ProcessObject::DataObjectPointerArraySizeType mitk::NavigationDataToNavigationDataFilter::GetInputIndex( std::string navDataName ) 00078 { 00079 DataObjectPointerArray& outputs = this->GetInputs(); 00080 for (DataObjectPointerArray::size_type i = 0; i < outputs.size(); ++i) 00081 if (navDataName == (static_cast<NavigationData*>(outputs.at(i).GetPointer()))->GetName()) 00082 return i; 00083 throw std::invalid_argument("output name does not exist"); 00084 } 00085 00086 00087 void mitk::NavigationDataToNavigationDataFilter::CreateOutputsForAllInputs() 00088 { 00089 this->SetNumberOfOutputs(this->GetNumberOfInputs()); // create outputs for all inputs 00090 for (unsigned int idx = 0; idx < this->GetNumberOfOutputs(); ++idx) 00091 if (this->GetOutput(idx) == NULL) 00092 { 00093 DataObjectPointer newOutput = this->MakeOutput(idx); 00094 this->SetNthOutput(idx, newOutput); 00095 } 00096 this->Modified(); 00097 }