00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkNavigationDataObjectVisualizationFilter.h"
00019 #include "mitkNavigationData.h"
00020
00021 #include "mitkTestingMacros.h"
00022
00023 #include <vtkTransform.h>
00024 #include <iostream>
00025
00026 #include "mitkSurface.h"
00027
00028
00032 int mitkNavigationDataObjectVisualizationFilterTest(int , char* [])
00033 {
00034 MITK_TEST_BEGIN("NavigationDataObjectVisualizationFilter")
00035
00036
00037 mitk::NavigationDataObjectVisualizationFilter::Pointer myFilter = mitk::NavigationDataObjectVisualizationFilter::New();
00038
00039
00040
00041
00042 MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),"Testing instantiation");
00043
00044
00045 mitk::NavigationData::PositionType initialPos1, initialPos2;
00046 mitk::FillVector3D(initialPos1, 1.1, 2.2, 3.3);
00047 mitk::FillVector3D(initialPos2, 5.0, 6.0, 7.0);
00048 mitk::NavigationData::OrientationType initialOri1(0.1, 0.2, 0.3, 0.4);
00049 mitk::NavigationData::OrientationType initialOri2(0.5, 0.6, 0.7, 0.8);
00050 mitk::ScalarType initialError1(0.0);
00051 mitk::ScalarType initialError2(5.0);
00052 bool initialValid1(true);
00053 bool initialValid2(true);
00054
00055 mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
00056 nd1->SetPosition(initialPos1);
00057 nd1->SetOrientation(initialOri1);
00058 nd1->SetPositionAccuracy(initialError1);
00059 nd1->SetDataValid(initialValid1);
00060
00061 mitk::NavigationData::Pointer nd2 = mitk::NavigationData::New();
00062 nd2->SetPosition(initialPos2);
00063 nd2->SetOrientation(initialOri2);
00064 nd2->SetPositionAccuracy(initialError2);
00065 nd2->SetDataValid(initialValid2);
00066
00067 myFilter->SetInput(nd1);
00068 myFilter->SetInput(1, nd2);
00069
00070
00071 MITK_TEST_CONDITION(myFilter->GetInput() == nd1, "Testing Set-/GetInput() input 1 without index");
00072 MITK_TEST_CONDITION(myFilter->GetInput(0) == nd1, "Testing Set-/GetInput() input 1");
00073 MITK_TEST_CONDITION(myFilter->GetInput(1) == nd2, "Testing Set-/GetInput() input 2");
00074 MITK_TEST_CONDITION(myFilter->GetNumberOfToolRepresentations() == 0, "Testing GetNumberOfToolRepresentations()");
00075
00076
00077 mitk::NavigationData* output = myFilter->GetOutput();
00078 MITK_TEST_CONDITION_REQUIRED(output != NULL, "Testing GetOutput()");
00079 MITK_TEST_CONDITION_REQUIRED(output == myFilter->GetOutput(0), "Testing GetOutput() == GetOutput(0)");
00080 MITK_TEST_CONDITION_REQUIRED(output != myFilter->GetOutput(1), "Testing GetOutput() != GetOutput(1)");
00081
00082
00083 mitk::Surface::Pointer mitkToolData1 = mitk::Surface::New();
00084
00085 mitk::Surface::Pointer mitkToolData2 = mitk::Surface::New();
00086
00087
00088 mitk::Surface::Pointer mitkToolDataDummy = mitk::Surface::New();
00089
00090 mitk::NavigationData::PositionType initialPosDummy;
00091 mitk::FillVector3D(initialPosDummy, 8.8, 9.9, 10.10);
00092 mitk::NavigationData::OrientationType initialOriDummy(1.1, 2.2, 3.3, 4.4);
00093 mitk::ScalarType initialErrorDummy(10.0);
00094 bool initialValidDummy(true);
00095 mitk::NavigationData::Pointer ndDummy = mitk::NavigationData::New();
00096 ndDummy->SetPosition(initialPosDummy);
00097 ndDummy->SetOrientation(initialOriDummy);
00098 ndDummy->SetPositionAccuracy(initialErrorDummy);
00099 ndDummy->SetDataValid(initialValidDummy);
00100
00101
00102
00103 myFilter->SetRepresentationObject(0, mitkToolData1);
00104 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(0) == mitkToolData1, "Testing SetRepresentationObject()/GetRepresentationObject() node 1");
00105 MITK_TEST_CONDITION(myFilter->GetNumberOfToolRepresentations() == 1, "Testing GetNumberOfToolRepresentations() after adding first tool");
00106 myFilter->SetRepresentationObject(1, mitkToolData2);
00107 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(1) == mitkToolData2, "Testing SetRepresentationObject() node 2");
00108 MITK_TEST_CONDITION(myFilter->GetNumberOfToolRepresentations() == 2, "Testing GetNumberOfToolRepresentations() after adding second tool");
00109
00110 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(0) == mitkToolData1, "Testing GetRepresentationObject() node 1");
00111 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(0) != mitkToolDataDummy, "Testing GetRepresentationObject() != Dummy node");
00112 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(1) == mitkToolData2, "Testing GetRepresentationObject() node 2");
00113 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(1) != mitkToolDataDummy, "Testing GetRepresentationObject() != Dummy node");
00114 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(111) == NULL, "Testing GetRepresentationObject() with out of range parameter");
00115
00116
00117 myFilter->Update();
00118
00119
00120 mitk::AffineTransform3D::Pointer affineTransform1 = mitkToolData1->GetGeometry()->GetIndexToWorldTransform();
00121 mitk::AffineTransform3D::OutputVectorType offset1 = affineTransform1->GetOffset();
00122 MITK_TEST_CONDITION(offset1.Get_vnl_vector()==initialPos1.Get_vnl_vector(), "Testing Offset position 1");
00123
00124 mitk::AffineTransform3D::Pointer affineTransform2 = mitkToolData2->GetGeometry()->GetIndexToWorldTransform();
00125 mitk::AffineTransform3D::OutputVectorType offset2 = affineTransform2->GetOffset();
00126 MITK_TEST_CONDITION(offset2.Get_vnl_vector()==initialPos2.Get_vnl_vector(), "Testing Offset position 2");
00127
00128 mitk::AffineTransform3D::MatrixType::InternalMatrixType m1 = affineTransform1->GetMatrix().GetVnlMatrix();
00129 MITK_TEST_OUTPUT( << "\n initOrient1="<<initialOri1<<" affineTransform1->GetVnlMatrix():\n "<< m1);
00130
00131 mitk::AffineTransform3D::MatrixType::InternalMatrixType m2 = affineTransform2->GetMatrix().GetVnlMatrix();
00132 MITK_TEST_OUTPUT( << "\n initOrient2=" << initialOri2 << " affineTransform2->GetVnlMatrix():\n " << m2);
00133
00134
00135
00136
00137 myFilter->SetRepresentationObject(0, mitkToolData2);
00138 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(0) == mitkToolData2, "Twisting mitkToolData by using SetRepresentationObject() NavigationData 1 with ToolData 2");
00139 MITK_TEST_CONDITION(myFilter->GetNumberOfToolRepresentations() == 2, "Testing GetNumberOfToolRepresentations() == 1");
00140 myFilter->SetRepresentationObject(1, mitkToolData1);
00141 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(1) == mitkToolData1, "Twisting mitkToolData by using SetRepresentationObject() NavigationData 2 with ToolData 1");
00142 MITK_TEST_CONDITION(myFilter->GetNumberOfToolRepresentations() == 2, "Testing GetNumberOfToolRepresentations() == 2");
00143
00144 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(0) == mitkToolData2, "Testing switched BaseData of NavigationData 1 ");
00145 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(0) != mitkToolDataDummy, "Testing GetRepresentationObject() != Dummy node");
00146 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(1) == mitkToolData1, "Testing switched BaseData NavigationData 2");
00147 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(1) != mitkToolDataDummy, "Testing GetRepresentationObject() != Dummy node");
00148
00149
00150 myFilter->Update();
00151
00152
00153 mitk::AffineTransform3D::Pointer affineTransform1Second = mitkToolData1->GetGeometry()->GetIndexToWorldTransform();
00154 MITK_TEST_CONDITION(affineTransform1 == affineTransform1Second, "Testing affineTransform1 after second update");
00155 mitk::AffineTransform3D::OutputVectorType offset1Second = affineTransform1->GetOffset();
00156 MITK_TEST_CONDITION(offset1 == offset1Second, "Testing offset1 after second update");
00157 MITK_TEST_CONDITION(offset1Second.Get_vnl_vector()==offset1.Get_vnl_vector(), "Testing offset1 equals first update");
00158
00159 mitk::AffineTransform3D::Pointer affineTransform2Second = mitkToolData2->GetGeometry()->GetIndexToWorldTransform();
00160 MITK_TEST_CONDITION(affineTransform2 == affineTransform2Second, "Testing affineTransform2 after second update");
00161 mitk::AffineTransform3D::OutputVectorType offset2Second = affineTransform2->GetOffset();
00162 MITK_TEST_CONDITION(offset2 == offset2Second, "Testing offset2 after second update");
00163 MITK_TEST_CONDITION(offset2Second.Get_vnl_vector()==offset2.Get_vnl_vector(), "Testing offset2 equals first update");
00164
00165 mitk::AffineTransform3D::MatrixType::InternalMatrixType m1Second= affineTransform1Second->GetMatrix().GetVnlMatrix();
00166 MITK_TEST_OUTPUT( <<"\n after second update initOrient1="<<initialOri1<<" affineTransform1->GetVnlMatrix():\n "<< m1Second);
00167
00168 mitk::AffineTransform3D::MatrixType::InternalMatrixType m2Second= affineTransform2Second->GetMatrix().GetVnlMatrix();
00169 MITK_TEST_OUTPUT( << "\n after second update initOrient2="<<initialOri2<<" affineTransform2->GetVnlMatrix():\n "<< m2Second);
00170
00171
00172 myFilter->SetInput(2,ndDummy);
00173 MITK_TEST_CONDITION(myFilter->GetNumberOfInputs() == 3, "Adding new input and testing GetNumberOfInputs == 3");
00174 MITK_TEST_CONDITION(myFilter->GetNumberOfOutputs() == 3, "testing GetNumberOfOutputs == 3");
00175 MITK_TEST_CONDITION(myFilter->GetInput(2) == ndDummy, "Testing Input == newly added input");
00176 MITK_TEST_CONDITION_REQUIRED(myFilter->GetOutput(2) != NULL, "Testing GetOutput(2) != NULL");
00177 MITK_TEST_CONDITION_REQUIRED(myFilter->GetOutput(2) != myFilter->GetOutput(1), "Testing GetOutput(2) != GetOutput(1)");
00178 myFilter->SetRepresentationObject(2, mitkToolDataDummy);
00179 MITK_TEST_CONDITION(myFilter->GetNumberOfToolRepresentations() == 3, "Testing GetNumberOfToolRepresentations() after adding latest tool");
00180 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(2) == mitkToolDataDummy, "Testing Set-/GetRepresentationObject() equals was set");
00181
00182
00183 myFilter->Update();
00184
00185
00186 mitk::AffineTransform3D::Pointer affineTransformDummy = mitkToolDataDummy->GetGeometry()->GetIndexToWorldTransform();
00187 mitk::AffineTransform3D::OutputVectorType offsetDummy = affineTransformDummy->GetOffset();
00188 MITK_TEST_CONDITION(offsetDummy.Get_vnl_vector()==initialPosDummy.Get_vnl_vector(), "Testing Offset latest added tool");
00189
00190 mitk::AffineTransform3D::MatrixType::InternalMatrixType m1Latest= affineTransformDummy->GetMatrix().GetVnlMatrix();
00191 MITK_TEST_OUTPUT( << "\n latest initOrient="<<initialOriDummy<<" latest affineTransform->GetVnlMatrix():\n "<< m1Latest);
00192
00193 mitk::Surface::Pointer anotherSurface = mitk::Surface::New();
00194 myFilter->SetRepresentationObject(0, anotherSurface);
00195 MITK_TEST_CONDITION(myFilter->GetRepresentationObject(0) == anotherSurface, "Overwriting BaseData index 0");
00196
00197
00198 MITK_TEST_END();
00199 }