31 MITK_WARN(
"NodeDisplacementFilter")
32 <<
"Null Node passed to NodeDisplacementFilter. Ignoring Node....";
35 if (node->GetData() ==
nullptr)
37 MITK_WARN(
"NodeDisplacementFilter")
38 <<
"Empty Node passed to NodeDisplacementFilter. Ignoring Node....";
41 if(m_SelectedInput == -1)
43 MITK_ERROR(
"NodeDisplacementFilter")
44 <<
"Cannot add nodes before input Stream was selected";
45 mitkThrow() <<
"Cannot add nodes before input Stream was selected";
49 mitk::NavigationData::Pointer reference;
50 if (m_InitialReferencePose.IsNotNull())
51 {reference = m_InitialReferencePose;}
53 {reference = this->GetOutput(m_SelectedInput);}
55 if (! reference->IsDataValid())
57 MITK_WARN(
"NodeDisplacementFilter")
58 <<
"Cannot add node while selected tool is not tracked. Ignoring Node....";
63 mitk::AffineTransform3D::Pointer inverseAffineTransform = mitk::AffineTransform3D::New();
64 if ( ! reference->GetAffineTransform3D()->GetInverse(inverseAffineTransform) )
66 MITK_ERROR(
"NodeDisplacementFilter")
67 <<
"Could not get the inverse transformation of the navigation data transformation.";
68 mitkThrow() <<
"Could not get the inverse transformation of the navigation data transformation.";
71 inverseAffineTransform->Compose(node->GetData()->GetGeometry()->GetIndexToWorldTransform(),
true);
72 m_Transforms.push_back(inverseAffineTransform);
73 m_Nodes.push_back(node);
80 if ( i >= m_Nodes.size() ) {
return false; }
82 m_Nodes.erase(m_Nodes.begin()+i);
83 m_Transforms.erase(m_Transforms.begin()+i);
89 return m_Nodes.size();
94 if (i < m_Nodes.size() ) {
return m_Nodes.at(i); }
95 else {
return nullptr; }
105 if (i < 0) { mitkThrow() <<
"Negative Input selected in NodeDisplacementFilter"; }
106 if (! (
static_cast<unsigned int>(i) < this->GetInputs().size()))
108 MITK_ERROR(
"NodeDisplacementFilter")
109 <<
"Selected input index is larger than actual number of inputs.";
110 mitkThrow() <<
"Selected input index is larger than actual number of inputs in NodeDisplacementFilter";
117 mitk::NavigationData::Pointer returnValue = mitk::NavigationData::New();
118 if((m_Nodes.size()>i) && (m_Nodes.at(i).IsNotNull()))
122 returnValue = mitk::NavigationData::New(m_Nodes.at(i)->GetData()->GetGeometry()->GetIndexToWorldTransform());
124 catch (mitk::Exception& e)
126 returnValue->SetDataValid(
false);
127 MITK_WARN <<
"Excetion while returning navigation data: " << e.GetDescription();
132 returnValue->SetDataValid(
false);
133 MITK_WARN <<
"Node Nr. " << i <<
" does not exist!";
145 if (m_SelectedInput == -1)
147 MITK_INFO(
"NodeDisplacementFilter")
148 <<
"No input has been selected. Only forwarding NavigationData...";
153 if ( ! this->GetInput(m_SelectedInput)->IsDataValid() ) {
return; }
157 mitk::Geometry3D::Pointer refGeom = this->TransformToGeometry(
158 this->GetInput(m_SelectedInput)->GetAffineTransform3D());
161 for (
unsigned int index=0; index < m_Nodes.size(); index++)
163 mitk::Geometry3D::Pointer transformGeometry = refGeom->Clone();
167 transformGeometry->Compose(m_Transforms.at(index),
true);
169 m_Nodes.at(index)->GetData()->SetGeometry(transformGeometry);
176 m_Transforms.clear();
180 mitk::Geometry3D::Pointer g3d = mitk::Geometry3D::New();
181 g3d->SetIndexToWorldTransform(transform);
void GenerateData() override
Passes navigation data from all inputs to all outputs. If a subclass wants to implement its own versi...
virtual int GetNumberOfNodes()
Returns the number of nodes that were added to this filter.
~NodeDisplacementFilter() override
bool AddNode(mitk::DataNode::Pointer node)
Adds a node to the filter. The position of which will then be continously update relatively to the se...
virtual mitk::NavigationData::Pointer GetRawDisplacementNavigationData(unsigned int i=0)
virtual mitk::DataNode::Pointer GetNode(unsigned int i=0)
Returns the nth node that was added to this filter.
virtual void SelectInput(int i)
Selects an input stream as the reference stream.
virtual void ResetNodes()
Removes all added Nodes from the Filter but leaves all other configuration intact.
bool RemoveNode(unsigned int i)
Removes a node from the filter.
mitk::Geometry3D::Pointer TransformToGeometry(mitk::AffineTransform3D::Pointer transform)
Creates an Geometry 3D Object from an AffineTransformation.
virtual std::vector< mitk::DataNode::Pointer > GetNodes()
Returns a vector containing all nodes that have been added to this filter.
void GenerateData() override