18#ifndef itkBSplineStackTransform_h
19#define itkBSplineStackTransform_h
27template <
unsigned int NDimension>
39 using Pointer = itk::SmartPointer<BSplineStackTransform>;
40 using typename Superclass::FixedParametersType;
45 using Superclass::NumberOfGeneralFixedParametersOfStack;
47 static constexpr unsigned int NumberOfFixedParametersOfSubTransform =
50 static constexpr unsigned int NumberOfFixedParameters =
51 NumberOfGeneralFixedParametersOfStack + NumberOfFixedParametersOfSubTransform + 1;
57 m_SplineOrder = newValue;
59 if (!Superclass::m_FixedParameters.empty())
61 Superclass::m_FixedParameters.back() = m_SplineOrder;
75 const auto numberOfFixedParameters = fixedParameters.size();
76 if (numberOfFixedParameters < NumberOfFixedParameters)
78 itkExceptionMacro(<<
"The number of FixedParameters (" << numberOfFixedParameters <<
") should be at least "
79 << NumberOfFixedParameters);
81 const auto lastFixedParameter = fixedParameters.back();
82 if (lastFixedParameter >= 1 && lastFixedParameter <= 3 &&
83 static_cast<double>(
static_cast<unsigned>(lastFixedParameter)) == lastFixedParameter)
85 m_SplineOrder =
static_cast<unsigned>(fixedParameters.back());
89 itkExceptionMacro(<<
"The last FixedParameters (" << lastFixedParameter <<
") should be a valid spline order.");
92 if (Superclass::m_FixedParameters != fixedParameters)
94 Superclass::m_FixedParameters = fixedParameters;
96 Superclass::CreateSubTransforms(FixedParametersType(
97 fixedParameters.data_block() + NumberOfGeneralFixedParametersOfStack, NumberOfFixedParametersOfSubTransform));
98 Superclass::UpdateStackSpacingAndOrigin();
107 FixedParametersType & fixedParametersOfStack = this->Superclass::m_FixedParameters;
108 fixedParametersOfStack.set_size(NumberOfGeneralFixedParametersOfStack + NumberOfFixedParametersOfSubTransform + 1);
109 fixedParametersOfStack.back() = m_SplineOrder;
110 Superclass::UpdateFixedParametersInternally(fixedParametersOfSubTransform);
114 typename Superclass::SubTransformPointer
121 unsigned m_SplineOrder{};