This class is a slightly changed reimplementation of the NavigationDataPlayer which does not care about timestamps and just outputs the navigationdatas in their sequential order. More...
#include <mitkNavigationDataSequentialPlayer.h>
Public Member Functions | |
mitkClassMacro (NavigationDataSequentialPlayer, NavigationDataSource) | |
void | SetFileName (const std::string &_FileName) |
sets the file name and path (if XMLString is set, this is neglected) | |
virtual const char * | GetFileName () const |
returns the file name and path | |
void | SetXMLString (const std::string &_XMLString) |
sets a xml string (by this, the xml string is not read from file) | |
virtual const char * | GetXMLString () const |
returns the current xml string | |
virtual void | SetRepeat (bool _arg) |
virtual bool | GetRepeat () |
virtual unsigned int | GetNumberOfSnapshots () |
void | GoToSnapshot (int i) |
virtual void | UpdateOutputInformation () |
Used for pipeline update just to tell the pipeline that we always have to update. | |
Static Public Member Functions | |
static Pointer | New () |
Protected Member Functions | |
NavigationDataSequentialPlayer () | |
virtual | ~NavigationDataSequentialPlayer () |
void | ReinitXML () |
mitk::NavigationData::Pointer | ReadVersion1 () |
virtual void | GenerateData () |
Protected Attributes | |
std::string | m_FileName |
std::string | m_XMLString |
TiXmlDocument * | m_Doc |
TiXmlElement * | m_DataElem |
TiXmlElement * | m_CurrentElem |
bool | m_Repeat |
unsigned int | m_NumberOfSnapshots |
int | m_LastGoTo |
This class is a slightly changed reimplementation of the NavigationDataPlayer which does not care about timestamps and just outputs the navigationdatas in their sequential order.
Documentation
Definition at line 36 of file mitkNavigationDataSequentialPlayer.h.
mitk::NavigationDataSequentialPlayer::NavigationDataSequentialPlayer | ( | ) | [protected] |
Definition at line 27 of file mitkNavigationDataSequentialPlayer.cpp.
: m_Doc(new TiXmlDocument) , m_DataElem(0) , m_CurrentElem(0) , m_Repeat(false) , m_NumberOfSnapshots(0) , m_LastGoTo(0) { }
mitk::NavigationDataSequentialPlayer::~NavigationDataSequentialPlayer | ( | ) | [protected, virtual] |
Definition at line 38 of file mitkNavigationDataSequentialPlayer.cpp.
{ delete m_Doc; }
void mitk::NavigationDataSequentialPlayer::GenerateData | ( | ) | [protected, virtual] |
do the work here
Definition at line 146 of file mitkNavigationDataSequentialPlayer.cpp.
References mitk::NavigationData::Graft(), and mitk::NavigationData::SetDataValid().
{ assert(m_DataElem); // very important: go through the tools (there could be more then one) mitk::NavigationData::Pointer tmp; for (unsigned int index = 0; index < this->GetNumberOfOutputs(); index++) { // go to the first element if(!m_CurrentElem) m_CurrentElem = m_DataElem->FirstChildElement("ND"); // go to the next element else m_CurrentElem = m_CurrentElem->NextSiblingElement(); // if repeat is on: go back to the first element (prior calls delivered NULL // elem) if(!m_CurrentElem && m_Repeat) m_CurrentElem = m_DataElem->FirstChildElement("ND"); mitk::NavigationData* output = this->GetOutput(index); tmp = this->ReadVersion1(); if(tmp.IsNotNull()) output->Graft(tmp); else // no valid output output->SetDataValid(false); } }
virtual const char* mitk::NavigationDataSequentialPlayer::GetFileName | ( | ) | const [virtual] |
returns the file name and path
virtual unsigned int mitk::NavigationDataSequentialPlayer::GetNumberOfSnapshots | ( | ) | [virtual] |
virtual bool mitk::NavigationDataSequentialPlayer::GetRepeat | ( | ) | [virtual] |
set if the data player should repeat the outputs
virtual const char* mitk::NavigationDataSequentialPlayer::GetXMLString | ( | ) | const [virtual] |
returns the current xml string
void mitk::NavigationDataSequentialPlayer::GoToSnapshot | ( | int | i ) |
advance the output to the i-th snapshot e.g. if you want to have the NavData of snapshot 17 then you can call GoToSnapshot(17). index begins at 1! you can then also go back to snapshot 1 with GoToSnapshot(1)
Definition at line 85 of file mitkNavigationDataSequentialPlayer.cpp.
References MITK_WARN.
{ assert(m_DataElem); int numOfUpdateCalls = 0; // i.e. number of snapshots 10 // goto(7), m_LastGoTo=3 => numOfUpdateCalls = 4 if(m_LastGoTo <= i) numOfUpdateCalls = i - m_LastGoTo; // goto(4), m_LastGoTo=7 => numOfUpdateCalls = 7 else { if(!m_Repeat) { MITK_WARN << "cannot go back to snapshot " << i << " because the " << this->GetNameOfClass() << " is configured to not repeat the" << " navigation data"; } else { numOfUpdateCalls = (m_NumberOfSnapshots - m_LastGoTo) + i; } } for(int j=0; j<numOfUpdateCalls; ++j) this->Update(); m_LastGoTo = i; }
mitk::NavigationDataSequentialPlayer::mitkClassMacro | ( | NavigationDataSequentialPlayer | , |
NavigationDataSource | |||
) |
static Pointer mitk::NavigationDataSequentialPlayer::New | ( | ) | [static] |
mitk::NavigationData::Pointer mitk::NavigationDataSequentialPlayer::ReadVersion1 | ( | ) | [protected] |
Definition at line 175 of file mitkNavigationDataSequentialPlayer.cpp.
References matrix(), mitk::NavigationData::New(), TiXmlElement::QueryDoubleAttribute(), TiXmlElement::QueryFloatAttribute(), and TiXmlElement::QueryIntAttribute().
{ mitk::NavigationData::Pointer nd = mitk::NavigationData::New(); mitk::NavigationData::PositionType position; mitk::NavigationData::OrientationType orientation(0.0,0.0,0.0,0.0); mitk::NavigationData::TimeStampType timestamp = -1; mitk::NavigationData::CovarianceMatrixType matrix; bool hasPosition = true; bool hasOrientation = true; bool dataValid = false; position.Fill(0.0); matrix.SetIdentity(); TiXmlElement* elem = m_CurrentElem; if(!elem) return NULL; //check here if EOF (the query don't change the timestamp value which should always be > 0) elem->QueryDoubleAttribute("Time",×tamp); if (timestamp == -1) { return NULL; //the calling method should check the return value if it is valid/not NULL } elem->QueryFloatAttribute("X", &position[0]); elem->QueryFloatAttribute("Y", &position[1]); elem->QueryFloatAttribute("Z", &position[2]); elem->QueryFloatAttribute("QX", &orientation[0]); elem->QueryFloatAttribute("QY", &orientation[1]); elem->QueryFloatAttribute("QZ", &orientation[2]); elem->QueryFloatAttribute("QR", &orientation[3]); elem->QueryFloatAttribute("C00", &matrix[0][0]); elem->QueryFloatAttribute("C01", &matrix[0][1]); elem->QueryFloatAttribute("C02", &matrix[0][2]); elem->QueryFloatAttribute("C03", &matrix[0][3]); elem->QueryFloatAttribute("C04", &matrix[0][4]); elem->QueryFloatAttribute("C05", &matrix[0][5]); elem->QueryFloatAttribute("C10", &matrix[1][0]); elem->QueryFloatAttribute("C11", &matrix[1][1]); elem->QueryFloatAttribute("C12", &matrix[1][2]); elem->QueryFloatAttribute("C13", &matrix[1][3]); elem->QueryFloatAttribute("C14", &matrix[1][4]); elem->QueryFloatAttribute("C15", &matrix[1][5]); int tmpval = 0; elem->QueryIntAttribute("Valid", &tmpval); if (tmpval == 0) dataValid = false; else dataValid = true; tmpval = 0; elem->QueryIntAttribute("hO", &tmpval); if (tmpval == 0) hasOrientation = false; else hasOrientation = true; tmpval = 0; elem->QueryIntAttribute("hP", &tmpval); if (tmpval == 0) hasPosition = false; else hasPosition = true; nd->SetTimeStamp(timestamp); nd->SetPosition(position); nd->SetOrientation(orientation); nd->SetCovErrorMatrix(matrix); nd->SetDataValid(dataValid); nd->SetHasOrientation(hasOrientation); nd->SetHasPosition(hasPosition); //delete elem; return nd; }
void mitk::NavigationDataSequentialPlayer::ReinitXML | ( | ) | [protected] |
Definition at line 43 of file mitkNavigationDataSequentialPlayer.cpp.
References TiXmlNode::FirstChildElement(), MITK_WARN, mitk::NavigationData::New(), and TiXmlNode::NextSiblingElement().
{ m_DataElem = m_Doc->FirstChildElement("Data"); int toolcount; if(!m_DataElem) MITK_WARN << "Data element not found"; else { m_DataElem->QueryIntAttribute("ToolCount", &toolcount); this->SetNumberOfOutputs(toolcount); mitk::NavigationData::Pointer emptyNd = mitk::NavigationData::New(); mitk::NavigationData::PositionType position; mitk::NavigationData::OrientationType orientation(0.0,0.0,0.0,0.0); position.Fill(0.0); emptyNd->SetPosition(position); emptyNd->SetOrientation(orientation); emptyNd->SetDataValid(false); mitk::NavigationData::Pointer tmp; for (unsigned int index = 0; index < this->GetNumberOfOutputs(); index++) { tmp = mitk::NavigationData::New(); tmp->Graft(emptyNd); this->SetNthOutput(index, tmp); } // find out _NumberOfSnapshots m_NumberOfSnapshots = 0; TiXmlElement* nextND = m_DataElem->FirstChildElement("ND"); while(nextND) { ++m_NumberOfSnapshots; nextND = nextND->NextSiblingElement("ND"); } // e.g. 12 nd found and 2 tools used => number of snapshots is 12:2=6 m_NumberOfSnapshots = m_NumberOfSnapshots/toolcount; } }
void mitk::NavigationDataSequentialPlayer::SetFileName | ( | const std::string & | _FileName ) |
sets the file name and path (if XMLString is set, this is neglected)
Definition at line 118 of file mitkNavigationDataSequentialPlayer.cpp.
{ m_FileName = _FileName; if(!m_Doc->LoadFile(m_FileName)) { this->SetNumberOfOutputs(0); std::ostringstream s; s << "File " << _FileName << " could not be loaded"; throw std::invalid_argument(s.str()); } else this->ReinitXML(); this->Modified(); }
virtual void mitk::NavigationDataSequentialPlayer::SetRepeat | ( | bool | _arg ) | [virtual] |
set to true if the data player should repeat the outputs
void mitk::NavigationDataSequentialPlayer::SetXMLString | ( | const std::string & | _XMLString ) |
sets a xml string (by this, the xml string is not read from file)
Definition at line 136 of file mitkNavigationDataSequentialPlayer.cpp.
{ m_XMLString = _XMLString; m_Doc->Parse( m_XMLString.c_str() ); this->ReinitXML(); this->Modified(); }
void mitk::NavigationDataSequentialPlayer::UpdateOutputInformation | ( | ) | [virtual] |
Used for pipeline update just to tell the pipeline that we always have to update.
Definition at line 257 of file mitkNavigationDataSequentialPlayer.cpp.
{ this->Modified(); // make sure that we need to be updated Superclass::UpdateOutputInformation(); }
Definition at line 104 of file mitkNavigationDataSequentialPlayer.h.
Definition at line 103 of file mitkNavigationDataSequentialPlayer.h.
TiXmlDocument* mitk::NavigationDataSequentialPlayer::m_Doc [protected] |
Definition at line 102 of file mitkNavigationDataSequentialPlayer.h.
std::string mitk::NavigationDataSequentialPlayer::m_FileName [protected] |
Definition at line 100 of file mitkNavigationDataSequentialPlayer.h.
int mitk::NavigationDataSequentialPlayer::m_LastGoTo [protected] |
Definition at line 107 of file mitkNavigationDataSequentialPlayer.h.
unsigned int mitk::NavigationDataSequentialPlayer::m_NumberOfSnapshots [protected] |
Definition at line 106 of file mitkNavigationDataSequentialPlayer.h.
bool mitk::NavigationDataSequentialPlayer::m_Repeat [protected] |
Definition at line 105 of file mitkNavigationDataSequentialPlayer.h.
std::string mitk::NavigationDataSequentialPlayer::m_XMLString [protected] |
Definition at line 101 of file mitkNavigationDataSequentialPlayer.h.