18#ifndef itkEulerTransform_h
19#define itkEulerTransform_h
34template <
unsigned int Dimension>
35class ITK_TEMPLATE_EXPORT EulerGroup
38 template <
class TScalarType>
39 using TransformAlias = AdvancedMatrixOffsetTransformBase<TScalarType, Dimension, Dimension>;
49class ITK_TEMPLATE_EXPORT EulerGroup<2>
52 template <
class TScalarType>
53 using TransformAlias = AdvancedRigid2DTransform<TScalarType>;
63class ITK_TEMPLATE_EXPORT EulerGroup<3>
66 template <
class TScalarType>
67 using TransformAlias = AdvancedEuler3DTransform<TScalarType>;
74template <
class TScalarType,
unsigned int Dimension>
75using EulerGroupTemplate =
typename EulerGroup<Dimension>::template TransformAlias<TScalarType>;
87template <
class TScalarType,
unsigned int Dimension>
88class ITK_TEMPLATE_EXPORT
EulerTransform :
public EulerGroupTemplate<TScalarType, Dimension>
95 using Superclass = EulerGroupTemplate<TScalarType, Dimension>;
111 using typename Superclass::ScalarType;
112 using typename Superclass::ParametersType;
113 using typename Superclass::NumberOfParametersType;
114 using typename Superclass::JacobianType;
115 using typename Superclass::OffsetType;
116 using typename Superclass::InputPointType;
117 using typename Superclass::OutputPointType;
118 using typename Superclass::InputVectorType;
119 using typename Superclass::OutputVectorType;
120 using typename Superclass::InputCovariantVectorType;
121 using typename Superclass::OutputCovariantVectorType;
122 using typename Superclass::InputVnlVectorType;
123 using typename Superclass::OutputVnlVectorType;
125 using typename Superclass::NonZeroJacobianIndicesType;
126 using typename Superclass::SpatialJacobianType;
127 using typename Superclass::JacobianOfSpatialJacobianType;
128 using typename Superclass::SpatialHessianType;
129 using typename Superclass::JacobianOfSpatialHessianType;
130 using typename Superclass::InternalMatrixType;
138 static_assert(SpaceDimension != 3,
"This is not the specialization is 3D!");
148 static_assert(SpaceDimension != 3,
"This is not the specialization is 3D!");
158template <
class TScalarType>
187 static_assert(SpaceDimension == 3,
"This specialization is for 3D only!");
190 typename Euler3DTransformType::Pointer transform =
dynamic_cast<Euler3DTransformType *
>(
this);
193 transform->Euler3DTransformType::SetComputeZYX(arg);
205 static_assert(SpaceDimension == 3,
"This specialization is for 3D only!");
208 typename Euler3DTransformType::ConstPointer transform =
dynamic_cast<const Euler3DTransformType *
>(
this);
212 return transform->Euler3DTransformType::GetComputeZYX();