18 #ifndef itkMultiTransform_h
19 #define itkMultiTransform_h
62 template <
typename TParametersValueType =
double,
unsigned int VDimension = 3,
unsigned int VSubDimensions = VDimension>
84 using typename Superclass::ParametersType;
85 using typename Superclass::ParametersValueType;
86 using typename Superclass::FixedParametersType;
87 using typename Superclass::FixedParametersValueType;
91 using typename Superclass::DerivativeType;
94 using typename Superclass::JacobianType;
95 using typename Superclass::JacobianPositionType;
96 using typename Superclass::InverseJacobianPositionType;
99 using typename Superclass::TransformCategoryEnum;
104 using typename Superclass::InverseTransformBasePointer;
107 using typename Superclass::InputPointType;
108 using typename Superclass::OutputPointType;
111 using typename Superclass::InputVectorType;
112 using typename Superclass::OutputVectorType;
115 using typename Superclass::InputCovariantVectorType;
116 using typename Superclass::OutputCovariantVectorType;
119 using typename Superclass::InputVnlVectorType;
120 using typename Superclass::OutputVnlVectorType;
123 using typename Superclass::InputVectorPixelType;
124 using typename Superclass::OutputVectorPixelType;
127 using typename Superclass::InputDiffusionTensor3DType;
128 using typename Superclass::OutputDiffusionTensor3DType;
131 using typename Superclass::InputSymmetricSecondRankTensorType;
132 using typename Superclass::OutputSymmetricSecondRankTensorType;
143 using typename Superclass::NumberOfParametersType;
146 static constexpr
unsigned int InputDimension = VDimension;
147 static constexpr
unsigned int OutputDimension = VDimension;
149 static constexpr
unsigned int SubInputDimension = VSubDimensions;
150 static constexpr
unsigned int SubOutputDimension = VSubDimensions;
160 this->PushBackTransform(t);
167 this->AddTransform(t);
174 this->PushFrontTransform(t);
181 this->PopBackTransform();
185 virtual const TransformType *
188 return this->m_TransformQueue.front().GetPointer();
191 virtual const TransformType *
194 return this->m_TransformQueue.back().GetPointer();
197 virtual const TransformTypePointer
202 return this->m_TransformQueue[n];
207 virtual TransformType *
210 return this->m_TransformQueue[n].GetPointer();
213 virtual const TransformType *
216 return this->m_TransformQueue[n].GetPointer();
220 virtual const TransformQueueType &
223 return this->m_TransformQueue;
230 return this->m_TransformQueue.empty();
237 return static_cast<SizeValueType>(this->m_TransformQueue.size());
244 this->m_TransformQueue.clear();
251 IsLinear()
const override;
255 TransformCategoryEnum
256 GetTransformCategory()
const override;
265 const ParametersType &
266 GetParameters()
const override;
271 SetParameters(
const ParametersType & inputParameters)
override;
275 const FixedParametersType &
276 GetFixedParameters()
const override;
281 SetFixedParameters(
const FixedParametersType & inputParameters)
override;
284 NumberOfParametersType
285 GetNumberOfParameters()
const override;
288 NumberOfParametersType
289 GetNumberOfLocalParameters()
const override;
292 NumberOfParametersType
293 GetNumberOfFixedParameters()
const override;
298 UpdateTransformParameters(
const DerivativeType & update, ScalarType factor = 1.0)
override;
306 GetInverse(
Self * inverse)
const;
316 PrintSelf(std::ostream & os,
Indent indent)
const override;
321 this->m_TransformQueue.push_front(t);
328 this->m_TransformQueue.push_back(t);
335 this->m_TransformQueue.pop_front();
342 this->m_TransformQueue.pop_back();
356 #ifndef ITK_MANUAL_INSTANTIATION
357 # include "itkMultiTransform.hxx"
360 #endif // itkMultiTransform_h