diff --git a/Core/Kernel/elxTransformixMain.cxx b/Core/Kernel/elxTransformixMain.cxx index 913c69648..516e22a85 100644 --- a/Core/Kernel/elxTransformixMain.cxx +++ b/Core/Kernel/elxTransformixMain.cxx @@ -311,6 +311,15 @@ TransformixMain::EnterCommandLineArgumentsWithTransformParameterMaps( if ((i + 1) == numberOfTransformParameterMaps) { + // Remember the transform parameter file name from the argument map (if any). + if (const auto foundTransformParameterFileName = argmap.find("-tp"); + foundTransformParameterFileName != argmap.end()) + { + // The path of the transform parameter file may be used later by TransformBase::ReadFromFile(), when it has an + // initial transform parameter file whose file name is specified relative to this path. + configuration->SetParameterFileName(foundTransformParameterFileName->second); + } + /** Copy last configuration object to m_Configuration. */ MainBase::SetConfiguration(configuration); } diff --git a/Core/Main/itkTransformixFilter.h b/Core/Main/itkTransformixFilter.h index b59abcb97..6158e54cd 100644 --- a/Core/Main/itkTransformixFilter.h +++ b/Core/Main/itkTransformixFilter.h @@ -129,6 +129,9 @@ class ITK_TEMPLATE_EXPORT TransformixFilter : public ImageSource const DataObject * GetInput(DataObjectPointerArraySizeType index) const; + void SetTransformParameterFileName(std::string); + itkGetConstMacro(TransformParameterFileName, std::string); + /** Set/Get/Remove fixed point set filename. */ itkSetMacro(FixedPointSetFileName, std::string); itkGetConstMacro(FixedPointSetFileName, std::string); @@ -280,6 +283,7 @@ class ITK_TEMPLATE_EXPORT TransformixFilter : public ImageSource SmartPointer m_TransformixMain{ nullptr }; + std::string m_TransformParameterFileName{}; std::string m_FixedPointSetFileName{}; bool m_ComputeSpatialJacobian{ false }; bool m_ComputeDeterminantOfSpatialJacobian{ false }; diff --git a/Core/Main/itkTransformixFilter.hxx b/Core/Main/itkTransformixFilter.hxx index 46f610386..411d0eef3 100644 --- a/Core/Main/itkTransformixFilter.hxx +++ b/Core/Main/itkTransformixFilter.hxx @@ -107,6 +107,11 @@ TransformixFilter::GenerateData() argumentMap.insert(ArgumentMapEntryType("-def", m_FixedPointSetFileName)); } + if (!m_TransformParameterFileName.empty()) + { + argumentMap.insert(ArgumentMapEntryType("-tp", m_TransformParameterFileName)); + } + // Setup output directory // Only the input "MovingImage" does not require an output directory if ((m_ComputeSpatialJacobian || m_ComputeDeterminantOfSpatialJacobian || m_ComputeDeformationField || @@ -512,6 +517,20 @@ TransformixFilter::GetTransformParameterObject() const -> const Paramete } +template +void +TransformixFilter::SetTransformParameterFileName(std::string fileName) +{ + if (m_TransformParameterFileName != fileName) + { + const auto parameterObject = elx::ParameterObject::New(); + parameterObject->AddParameterFile(fileName); + SetTransformParameterObject(parameterObject); + m_TransformParameterFileName = std::move(fileName); + this->Modified(); + } +} + template auto TransformixFilter::GetOutputDeformationField() -> OutputDeformationFieldType *