21 #include <itkMatrix.h> 22 #include <itkScalableAffineTransform.h> 23 #include <itkSmartPointer.h> 30 #include <vnl/vnl_matrix_fixed.h> 31 #include <vnl/vnl_vector.h> 32 #include <vnl/vnl_vector_fixed.h> 33 #include <vtkMatrix4x4.h> 34 #include <vtkMatrixToLinearTransform.h> 35 #include <vtkTransform.h> 42 mitk::AffineTransform3D::MatrixType::InternalMatrixType vnlmatrix;
43 vnlmatrix = transform->GetMatrix().GetVnlMatrix();
45 spacing[0] = vnlmatrix.get_column(0).magnitude();
46 spacing[1] = vnlmatrix.get_column(1).magnitude();
47 spacing[2] = vnlmatrix.get_column(2).magnitude();
52 m_VtkMatrix = vtkMatrix4x4::New();
53 m_VtkIndexToWorldTransform = vtkMatrixToLinearTransform::New();
54 m_VtkIndexToWorldTransform->SetInput(m_VtkMatrix);
60 m_VtkMatrix = vtkMatrix4x4::New();
61 m_VtkIndexToWorldTransform = vtkMatrixToLinearTransform::New();
62 m_VtkIndexToWorldTransform->SetInput(m_VtkMatrix);
68 m_VtkMatrix->Delete();
69 m_VtkIndexToWorldTransform->Delete();
74 if (m_IndexToWorldTransform.IsNull())
75 m_IndexToWorldTransform = TransformType::New();
77 m_IndexToWorldTransform->SetIdentity();
79 m_VtkMatrix->Identity();
97 void GeometryTransformHolder::TransferItkToVtkTransform()
106 void GeometryTransformHolder::TransferVtkToItkTransform()
124 m_IndexToWorldTransform->SetOffset(origin.GetVectorFromOrigin());
125 TransferItkToVtkTransform();
146 assert(aSpacing[0] > 0 && aSpacing[1] > 0 && aSpacing[2] > 0);
148 AffineTransform3D::MatrixType::InternalMatrixType vnlmatrix;
150 vnlmatrix = m_IndexToWorldTransform->GetMatrix().GetVnlMatrix();
153 col = vnlmatrix.get_column(0);
156 vnlmatrix.set_column(0, col);
157 col = vnlmatrix.get_column(1);
160 vnlmatrix.set_column(1, col);
161 col = vnlmatrix.get_column(2);
164 vnlmatrix.set_column(2, col);
169 AffineTransform3D::Pointer transform = AffineTransform3D::New();
170 transform->SetMatrix(matrix);
171 transform->SetOffset(m_IndexToWorldTransform->GetOffset());
186 return m_IndexToWorldTransform;
194 m_IndexToWorldTransform = transform;
195 TransferItkToVtkTransform();
205 m_VtkMatrix->DeepCopy(vtkmatrix);
206 TransferVtkToItkTransform();
237 return (vtkLinearTransform *)m_VtkIndexToWorldTransform;
242 m_IndexToWorldTransform->SetMatrix(matrix);
243 TransferItkToVtkTransform();
248 m_IndexToWorldTransform->SetIdentity();
249 TransferItkToVtkTransform();
254 m_IndexToWorldTransform->Compose(other, pre);
255 TransferItkToVtkTransform();
260 m_VtkMatrix->DeepCopy(vtktransform->GetMatrix());
261 TransferVtkToItkTransform();
267 return m_IndexToWorldTransform->GetMatrix().GetVnlMatrix();
276 if ((leftHandSide ==
nullptr) || (rightHandSide ==
nullptr))
278 MITK_ERROR <<
"mitk::Equal(const mitk::Geometry3D *leftHandSide, const mitk::Geometry3D *rightHandSide, ScalarType " 279 "eps, bool verbose) does not with nullptr pointer input.";
282 return Equal(*leftHandSide, *rightHandSide, eps, verbose);
297 MITK_INFO <<
"[( Geometry3D )] Spacing differs.";
298 MITK_INFO <<
"rightHandSide is " << setprecision(12) << rightHandSide.
GetSpacing() <<
" : leftHandSide is " 309 MITK_INFO <<
"[( Geometry3D )] Origin differs.";
310 MITK_INFO <<
"rightHandSide is " << setprecision(12) << rightHandSide.
GetOrigin() <<
" : leftHandSide is " 311 << leftHandSide.
GetOrigin() <<
" and tolerance is " <<
eps;
323 for (
int i = 0; i < 4; i++)
325 for (
int j = 0; j < 4; j++)
void TransferVtkMatrixToItkTransform(const vtkMatrix4x4 *vtkmatrix, TTransformType *itkTransform)
vnl_vector< ScalarType > VnlVector
DataCollection - Class to facilitate loading/accessing structured data.
void TransferItkTransformToVtkMatrix(const TTransformType *itkTransform, vtkMatrix4x4 *vtkmatrix)
itk::AffineGeometryFrame< ScalarType, 3 >::TransformType AffineTransform3D
MITKNEWMODULE_EXPORT bool Equal(mitk::ExampleDataStructure *leftHandSide, mitk::ExampleDataStructure *rightHandSide, mitk::ScalarType eps, bool verbose)
Returns true if the example data structures are considered equal.
MITKCORE_EXPORT const ScalarType eps