]> Creatis software - clitk.git/blob - itk/clitkInvertVFFilter.h
8ad84a2e969c6ba75ed7da41dbe50676b4ab6a0b
[clitk.git] / itk / clitkInvertVFFilter.h
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to: 
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://www.centreleonberard.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
18 #ifndef __clitkInvertVFFilter_h
19 #define __clitkInvertVFFilter_h
20 #include "clitkImageCommon.h"
21
22 #include "itkImageToImageFilter.h"
23 #include "itkImage.h"
24 #include "itkImageRegionIterator.h"
25 #include "itkImageRegionIteratorWithIndex.h"
26 #include "itkNumericTraits.h"
27
28 namespace clitk
29 {
30   
31   template <class InputImageType, class OutputImageType>  
32   class ITK_EXPORT InvertVFFilter : public itk::ImageToImageFilter<InputImageType, OutputImageType>
33   
34   {
35   public:
36     typedef InvertVFFilter     Self;
37     typedef itk::ImageToImageFilter<InputImageType, OutputImageType>     Superclass;
38     typedef itk::SmartPointer<Self>            Pointer;
39     typedef itk::SmartPointer<const Self>      ConstPointer;
40    
41     /** Method for creation through the object factory. */
42     itkNewMacro(Self);  
43
44     /** Run-time type information (and related methods) */
45     itkTypeMacro( InvertVFFilter, ImageToImageFilter );
46   
47     /** Determine the image dimension. */
48     itkStaticConstMacro(ImageDimension, unsigned int,
49                         InputImageType::ImageDimension );
50     
51     //Some other typedefs
52     typedef double CoordRepType;
53     typedef itk::Image<double, ImageDimension> WeightsImageType;
54     typedef itk::Image<itk::SimpleFastMutexLock, ImageDimension> MutexImageType;
55
56     /** Point type */
57     typedef itk::Point<CoordRepType,itkGetStaticConstMacro(ImageDimension)> PointType;
58
59     /** Inherit some types from the superclass. */
60     typedef typename OutputImageType::IndexType        IndexType;
61     typedef typename OutputImageType::SizeType         SizeType;
62     typedef typename OutputImageType::PixelType        PixelType;
63     typedef typename OutputImageType::SpacingType      SpacingType;
64
65     //Set Methods(inline)
66     itkSetMacro( Verbose, bool);
67     itkSetMacro( EdgePaddingValue, PixelType );
68 #if ITK_VERSION_MAJOR <= 4
69     void SetNumberOfThreads(unsigned int r ) ITK_OVERRIDE
70 #else
71     void SetNumberOfWorkUnits(unsigned int r ) ITK_OVERRIDE
72 #endif
73     {
74       m_NumberOfThreadsIsGiven=true;
75 #if ITK_VERSION_MAJOR <= 4
76       m_NumberOfThreads=r;
77 #else
78       m_NumberOfWorkUnits=r;
79 #endif
80     }
81     itkSetMacro(ThreadSafe, bool);
82     itkSetMacro(OutputSpacing, SpacingType);
83     itkSetMacro(OutputSize, SizeType);
84
85   
86   protected:
87     InvertVFFilter();
88     ~InvertVFFilter() {};
89     void GenerateData( ) ITK_OVERRIDE;
90     
91     bool m_Verbose;
92     bool m_NumberOfThreadsIsGiven;
93     SpacingType m_OutputSpacing;
94     SizeType m_OutputSize;
95 #if ITK_VERSION_MAJOR <= 4
96     unsigned int m_NumberOfThreads;
97 #else
98     unsigned int m_NumberOfWorkUnits;
99 #endif
100     PixelType m_EdgePaddingValue;
101     bool m_ThreadSafe;
102   };
103
104
105 } // end namespace clitk
106 #ifndef ITK_MANUAL_INSTANTIATION
107 #include "clitkInvertVFFilter.txx"
108 #endif
109
110 #endif // #define __clitkInvertVFFilter_h