00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date: 2009-04-02 15:46:56 +0200 (Do, 02 Apr 2009) $ 00006 Version: $Revision: 16783 $ 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 "mitkNavigationDataToMessageFilter.h" 00019 #include "mitkPropertyList.h" 00020 #include "mitkProperties.h" 00021 00022 mitk::NavigationDataToMessageFilter::NavigationDataToMessageFilter() 00023 : mitk::NavigationDataToNavigationDataFilter(), 00024 m_PositionEpsilon(0.0f), m_OrientationEpsilon(0.0f), m_CovErrorEpsilon(0.0f), m_TimeStampEpsilon(0.0f) 00025 { 00026 this->SetNumberOfRequiredInputs(1); 00027 } 00028 00029 mitk::NavigationDataToMessageFilter::~NavigationDataToMessageFilter() 00030 { 00031 } 00032 00033 00034 //void mitk::NavigationDataToMessageFilter::SetInput( unsigned int idx, const NavigationData* nd ) 00035 //{ 00036 // if (idx > 0) 00037 // throw std::invalid_argument("mitk::NavigationDataToMessageFilter: only one input is supported"); 00038 // // Process object is not const-correct so the const_cast is required here 00039 // this->ProcessObject::SetNthInput(idx, const_cast<NavigationData*>(nd)); 00040 // this->CreateOutputsForAllInputs(); 00041 //} 00042 00043 00044 //void mitk::NavigationDataToMessageFilter::SetInput( const NavigationData* nd ) 00045 //{ 00046 // // Process object is not const-correct so the const_cast is required here 00047 // this->ProcessObject::SetNthInput(0, const_cast<NavigationData*>(nd)); 00048 // this->CreateOutputsForAllInputs(); 00049 //} 00050 00051 00052 void mitk::NavigationDataToMessageFilter::GenerateData() 00053 { 00054 /* update outputs with tracking data from tools */ 00055 for (unsigned int i = 0; i < this->GetNumberOfOutputs() ; ++i) 00056 { 00057 mitk::NavigationData* output = this->GetOutput(i); 00058 assert(output); 00059 const mitk::NavigationData* input = this->GetInput(i); 00060 assert(input); 00061 00062 /* check for differences, then send message. */ 00063 if ((output->GetPosition() - input->GetPosition()).GetNorm() > m_PositionEpsilon) 00064 m_PositionChangedMessage.Send(input->GetPosition(), i); 00065 00066 if ((output->GetOrientation() - input->GetOrientation()).magnitude() > m_OrientationEpsilon) 00067 m_OrientationChangedMessage.Send(input->GetOrientation(), i); 00068 00069 if ((output->GetCovErrorMatrix().GetVnlMatrix() - input->GetCovErrorMatrix().GetVnlMatrix()).absolute_value_max() > m_CovErrorEpsilon) 00070 m_ErrorChangedMessage.Send(input->GetCovErrorMatrix(), i); 00071 00072 if (fabs(output->GetTimeStamp() - input->GetTimeStamp()) > m_TimeStampEpsilon) 00073 m_TimeStampChangedMessage.Send(input->GetTimeStamp(), i); 00074 00075 if (input->IsDataValid() != output->IsDataValid()) 00076 m_DataValidChangedMessage.Send(input->IsDataValid(), i); 00077 00078 output->Graft(input); // Because this is a NavigationDataToNavigationData Filter, we need to copy the input to the output to provide up to date navigation data objects 00079 } 00080 }