diff --git a/Modules/IGT/DataManagement/mitkNavigationDataSet.cpp b/Modules/IGT/DataManagement/mitkNavigationDataSet.cpp index ba6660acd4..636f7db37f 100644 --- a/Modules/IGT/DataManagement/mitkNavigationDataSet.cpp +++ b/Modules/IGT/DataManagement/mitkNavigationDataSet.cpp @@ -1,157 +1,140 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkNavigationDataSet.h" mitk::NavigationDataSet::NavigationDataSet( unsigned int numberOfTools ) : m_NavigationDataVectors(std::vector >()), m_NumberOfTools(numberOfTools) { } mitk::NavigationDataSet::~NavigationDataSet( ) { } bool mitk::NavigationDataSet::AddNavigationDatas( std::vector navigationDatas ) { // test if tool with given index exist if ( navigationDatas.size() != m_NumberOfTools ) { MITK_WARN("NavigationDataSet") << "Tried to add to many or too few navigation Datas to NavigationDataSet. " << m_NavigationDataVectors.size() << " required, tried to add " << navigationDatas.size() << "."; return false; } // test for consistent timestamp if ( m_NavigationDataVectors.size() > 0) { for (int i = 0; i < navigationDatas.size(); i++) if (navigationDatas[i]->GetIGTTimeStamp() <= m_NavigationDataVectors.back()[i]->GetIGTTimeStamp()) { MITK_WARN("NavigationDataSet") << "IGTTimeStamp of new NavigationData should be newer then timestamp of last NavigationData."; return false; } } m_NavigationDataVectors.push_back(navigationDatas); return true; } mitk::NavigationData::Pointer mitk::NavigationDataSet::GetNavigationDataForIndex( unsigned int index, unsigned int toolIndex ) const { if ( index >= m_NavigationDataVectors.size() ) { MITK_WARN("NavigationDataSet") << "There is no NavigationData available at index " << index << "."; return NULL; } if ( toolIndex >= m_NavigationDataVectors.at(index).size() ) { MITK_WARN("NavigationDataSet") << "There is NavigatitionData available at index " << index << " for tool " << toolIndex << "."; return NULL; } return m_NavigationDataVectors.at(toolIndex).at(index); } // Method not yet supported, code below compiles but delivers wrong results //mitk::NavigationData::Pointer mitk::NavigationDataSet::GetNavigationDataBeforeTimestamp( // mitk::NavigationData::TimeStampType timestamp, unsigned int toolIndex) const //{ // if ( toolIndex >= m_NavigationDataVectors.size() ) // { // MITK_WARN("NavigationDataSet") << "There is no tool with index " << toolIndex << "."; // return NULL; // } // // std::vector::const_iterator it; // // // iterate through all NavigationData objects of the given tool index // // till the timestamp of the NavigationData is greater then the given timestamp // for (it = m_NavigationDataVectors.at(toolIndex).begin(); // it != m_NavigationDataVectors.at(toolIndex).end(); ++it) // { // if ( (*it)->GetIGTTimeStamp() > timestamp) { break; } // } // // // first element was greater than timestamp -> return null // if ( it == m_NavigationDataVectors.at(toolIndex).begin() ) // { // MITK_WARN("NavigationDataSet") << "No NavigationData was recorded before given timestamp."; // return NULL; // } // // // return last element smaller than the given timestamp // return *(it-1); //} unsigned int mitk::NavigationDataSet::GetNumberOfTools() { - return m_NavigationDataVectors.size(); + return m_NumberOfTools; } -unsigned int mitk::NavigationDataSet::GetNumberOfNavigationDatas(bool check) +unsigned int mitk::NavigationDataSet::Size() { - if (this->GetNumberOfTools() == 0) { return 0; }; - - unsigned int number = m_NavigationDataVectors.at(0).size();; - - if (check) - { - for (std::vector >::iterator it = m_NavigationDataVectors.begin()+1; - it != m_NavigationDataVectors.end(); ++it) - { - if (it->size() != number) - { - MITK_WARN << "Number of NavigationData objects differs for different tools."; - return -1; - } - } - } - - return number; + return m_NavigationDataVectors.size(); } // ---> methods necessary for BaseData void mitk::NavigationDataSet::SetRequestedRegionToLargestPossibleRegion() { } bool mitk::NavigationDataSet::RequestedRegionIsOutsideOfTheBufferedRegion() { return false; } bool mitk::NavigationDataSet::VerifyRequestedRegion() { return true; } void mitk::NavigationDataSet::SetRequestedRegion(const DataObject * ) { } // <--- methods necessary for BaseData // ---> methods for Iterators mitk::NavigationDataSet::NavigationDataSetIterator mitk::NavigationDataSet::Begin() { return m_NavigationDataVectors.begin(); } mitk::NavigationDataSet::NavigationDataSetIterator mitk::NavigationDataSet::End() { return m_NavigationDataVectors.end(); } diff --git a/Modules/IGT/DataManagement/mitkNavigationDataSet.h b/Modules/IGT/DataManagement/mitkNavigationDataSet.h index 21c9e6287c..80fa23743f 100644 --- a/Modules/IGT/DataManagement/mitkNavigationDataSet.h +++ b/Modules/IGT/DataManagement/mitkNavigationDataSet.h @@ -1,103 +1,138 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef MITKNAVIGATIONDATASET_H_HEADER_INCLUDED_ #define MITKNAVIGATIONDATASET_H_HEADER_INCLUDED_ #include #include "mitkBaseData.h" #include "mitkNavigationData.h" namespace mitk { /** - * \brief Data structure which stores sets of mitk::NavigationData for + * \brief Data structure which stores streams of mitk::NavigationData for * multiple tools. * + * Use mitk::NavigationDataRecorder to create these sets easily from pipelines. + * Use mitk::NavigationDataPlayer to stream from these sets easily. * */ class MitkIGT_EXPORT NavigationDataSet : public BaseData { public: + /** + * \brief This iterator iterates over the distinct time steps in this set. + * + * It returns an array of the length equal to GetNumberOfTools(), containing a + * mitk::NavigationData for each tool.. + */ typedef std::vector< std::vector >::iterator NavigationDataSetIterator; mitkClassMacro(NavigationDataSet, BaseData); mitkNewMacro1Param(Self, unsigned int); /** * \brief Add mitk::NavigationData of the given tool to the Set. * - * @param toolIndex Index of the tool for which mitk::NavigationData should be added. - * @param navigationData mitk::NavigationData object to be added. - * @return true if object could be added to the set, false otherwise (e.g. tool with given index not existing) + * @param navigationDatas vector of mitk::NavigationData objects to be added. Make sure that the size of the + * vector equals the number of tools given in the constructor + * @return true if object was be added to the set successfully, false otherwise */ bool AddNavigationDatas( std::vector navigationDatas ); /** * \brief Get mitk::NavigationData from the given tool at given index. * * @param toolIndex Index of the tool from which mitk::NavigationData should be returned. * @param index Index of the mitk::NavigationData object that should be returned. * @return mitk::NavigationData at the specified indices, 0 if there is no object at the indices. */ NavigationData::Pointer GetNavigationDataForIndex( unsigned int index, unsigned int toolIndex ) const; - /** - * \brief Get last mitk::Navigation object for given tool whose timestamp is less than the given timestamp. - * @param toolIndex Index of the tool from which mitk::NavigationData should be returned. - * @param timestamp Timestamp for selecting last object before. - * @return Last mitk::NavigationData with timestamp less than given timestamp, 0 if there is no adequate object. - */ - // Method not yet supported + ///** + //* \brief Get last mitk::Navigation object for given tool whose timestamp is less than the given timestamp. + //* @param toolIndex Index of the tool from which mitk::NavigationData should be returned. + //* @param timestamp Timestamp for selecting last object before. + //* @return Last mitk::NavigationData with timestamp less than given timestamp, 0 if there is no adequate object. + //*/ + // Method not yet supported! //NavigationData::Pointer GetNavigationDataBeforeTimestamp( mitk::NavigationData::TimeStampType timestamp , unsigned int toolIndex ) const; + /** + * \brief Returns the number of tools for which NavigationDatas are stored in this set. + * + * This is always equal to the number given in the constructor of this class. + * + * @return the number of tools for which NavigationDatas are stored in this set. + */ unsigned int GetNumberOfTools(); - unsigned int GetNumberOfNavigationDatas(bool check = true); + /** + * \brief Returns the number of time steps stored in this NavigationDataSet. + * + * This is not the total number of Navigation Datas stored in this set, but the number stored for each tool. + * i.e. the total number of NavigationDatas equals Size() * GetNumberOfTools(); + * + * @return Returns the number of time steps stored in this NavigationDataSet. + */ + unsigned int Size(); + + /** + * \brief Returns an iterator pointing to the first TimeStep. + * + * @return Returns an iterator pointing to the first TimeStep. + */ virtual NavigationDataSetIterator Begin(); + + /** + * \brief Returns an iterator pointing behind to the last TimeStep. + * + * @return Returns an iterator pointing behind to the last TimeStep. + */ virtual NavigationDataSetIterator End(); // virtual methods, that need to be implemented, but aren't reasonable for NavigationData virtual void SetRequestedRegionToLargestPossibleRegion( ); virtual bool RequestedRegionIsOutsideOfTheBufferedRegion( ); virtual bool VerifyRequestedRegion( ); virtual void SetRequestedRegion( const itk::DataObject *data ); protected: /** * \brief Constructs set with fixed number of tools. * @param numTools How many tools are used with this mitk::NavigationDataSet. */ NavigationDataSet( unsigned int numTools ); virtual ~NavigationDataSet( ); /** * \brief Holds all the mitk::NavigationData objects managed by this class. * * The first dimension is the index of the navigation data, the second is the * tool to which this data belongs. i.e. the first dimension is usually the longer one. */ std::vector > m_NavigationDataVectors; /** * \brief The Number of Tools that this class is going to support. */ int m_NumberOfTools; }; } #endif // MITKNAVIGATIONDATASET_H_HEADER_INCLUDED_