diff --git a/Modules/Filtering/ImageGradient/include/itkGradientImageFilter.h b/Modules/Filtering/ImageGradient/include/itkGradientImageFilter.h index 735dfbe694f..d5e37908be5 100644 --- a/Modules/Filtering/ImageGradient/include/itkGradientImageFilter.h +++ b/Modules/Filtering/ImageGradient/include/itkGradientImageFilter.h @@ -100,6 +100,9 @@ class ITK_TEMPLATE_EXPORT GradientImageFilter : public ImageToImageFilter; using OutputImageRegionType = typename OutputImageType::RegionType; + /** Helper typedef for the parameter type of OverrideBoundaryCondition. */ + using BoundaryConditionType = ImageBoundaryCondition; + /** GradientImageFilter needs a larger input requested region than * the output requested region. As such, GradientImageFilter needs * to provide an implementation for GenerateInputRequestedRegion() @@ -138,9 +141,16 @@ class ITK_TEMPLATE_EXPORT GradientImageFilter : public ImageToImageFilter)`.")]] void + OverrideBoundaryCondition(BoundaryConditionType * boundaryCondition); +#endif + /** Allows to change the default boundary condition */ void - OverrideBoundaryCondition(ImageBoundaryCondition * boundaryCondition); + OverrideBoundaryCondition(std::unique_ptr && boundaryCondition); #ifdef ITK_USE_CONCEPT_CHECKING // Begin concept checking @@ -227,8 +237,8 @@ class ITK_TEMPLATE_EXPORT GradientImageFilter : public ImageToImageFilter> m_BoundaryCondition{ + // allow setting the m_BoundaryCondition + std::unique_ptr m_BoundaryCondition{ std::make_unique>() }; }; diff --git a/Modules/Filtering/ImageGradient/include/itkGradientImageFilter.hxx b/Modules/Filtering/ImageGradient/include/itkGradientImageFilter.hxx index 1d24ceea924..1aa68b0ebc4 100644 --- a/Modules/Filtering/ImageGradient/include/itkGradientImageFilter.hxx +++ b/Modules/Filtering/ImageGradient/include/itkGradientImageFilter.hxx @@ -37,13 +37,23 @@ GradientImageFilterThreaderUpdateProgressOff(); } +#ifndef ITK_FUTURE_LEGACY_REMOVE template void GradientImageFilter::OverrideBoundaryCondition( - ImageBoundaryCondition * boundaryCondition) + BoundaryConditionType * boundaryCondition) { m_BoundaryCondition.reset(boundaryCondition); } +#endif + +template +void +GradientImageFilter::OverrideBoundaryCondition( + std::unique_ptr && boundaryCondition) +{ + m_BoundaryCondition = std::move(boundaryCondition); +} template void diff --git a/Modules/Filtering/ImageGradient/test/itkGradientImageFilterTest.cxx b/Modules/Filtering/ImageGradient/test/itkGradientImageFilterTest.cxx index 9020375b366..2b8f5f4f6f5 100644 --- a/Modules/Filtering/ImageGradient/test/itkGradientImageFilterTest.cxx +++ b/Modules/Filtering/ImageGradient/test/itkGradientImageFilterTest.cxx @@ -89,7 +89,7 @@ itkGradientImageFilterTest(int argc, char * argv[]) using PeriodicBoundaryType = itk::PeriodicBoundaryCondition; // Test the OverrideBoundaryCondition setting; - filter2->OverrideBoundaryCondition(new PeriodicBoundaryType); + filter2->OverrideBoundaryCondition(std::make_unique()); ITK_EXERCISE_BASIC_OBJECT_METHODS(filter2, GradientImageFilter, ImageToImageFilter);