]> Creatis software - clitk.git/blob - common/clitkImageToImageGenericFilterBase.h
- multiple inputs in vv
[clitk.git] / common / clitkImageToImageGenericFilterBase.h
1 /*=========================================================================
2
3   Program:   clitk
4   Module:    $RCSfile: clitkImageToImageGenericFilterBase.h,v $
5   Language:  C++
6   Date:      $Date: 2010/03/24 10:48:05 $
7   Version:   $Revision: 1.3 $
8   Author :   Joel Schaerer <joel.schaerer@creatis.insa-lyon.fr>
9              David Sarrut <david.sarrut@creatis.insa-lyon.fr>
10
11   Copyright (C) 2008
12   Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
13   CREATIS-LRMN http://www.creatis.insa-lyon.fr
14
15   This program is free software: you can redistribute it and/or modify
16   it under the terms of the GNU General Public License as published by
17   the Free Software Foundation, version 3 of the License.
18
19   This program is distributed in the hope that it will be useful,
20   but WITHOUT ANY WARRANTY; without even the implied warranty of
21   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22   GNU General Public License for more details.
23
24   You should have received a copy of the GNU General Public License
25   along with this program.  If not, see <http://www.gnu.org/licenses/>.
26
27   =========================================================================*/
28
29 #ifndef CLITKIMAGETOIMAGEGENERICFILTERBASE_H
30 #define CLITKIMAGETOIMAGEGENERICFILTERBASE_H
31
32 // clitk include
33 #include "clitkCommon.h"
34 #include "clitkImageCommon.h"
35 #include "clitkCommonGenericFilter.h"
36
37 // itk include
38 #include <itkImage.h>
39
40 // vv include
41 #include "vvImage.h"
42 #include "vvFromITK.h"
43 #include "vvToITK.h"
44
45 namespace clitk {
46   
47   //--------------------------------------------------------------------
48   class ImageToImageGenericFilterBase: public itk::Object {
49     
50   public: 
51     // constructor - destructor
52     ImageToImageGenericFilterBase(std::string filterName);
53     virtual ~ImageToImageGenericFilterBase();
54
55     // Types
56     typedef ImageToImageGenericFilterBase Self;
57     typedef Object                        Superclass;
58     typedef itk::SmartPointer<Self>       Pointer;
59     typedef itk::SmartPointer<const Self> ConstPointer;
60
61     // Filters information
62     const std::string & GetFilterName();
63     void SetFilterName(std::string & n);
64
65     // Generic IO
66     /// Returns the dimension and pixel type of the *first* input
67     void GetInputImageDimensionAndPixelType(unsigned int& dim, std::string& pixeltype,
68                                             unsigned int & components);
69
70     // File IO
71     void SetInputFilename(const std::string & filename);
72     void AddInputFilename(const std::string & filename);
73     void SetInputFilenames(const std::vector<std::string> & filenames);
74     void EnableReadOnDisk(bool b);
75     void SetOutputFilename(const std::string & filename);
76     void AddOutputFilename(const std::string & filename);
77     void SetOutputFilenames(const std::vector<std::string> & filenames);
78     std::string GetOutputFilename();
79     void SetIOVerbose(bool b);
80
81     // VVImage IO
82     void SetInputVVImage (vvImage::Pointer input);
83     void SetInputVVImages (std::vector<vvImage::Pointer> input);
84     void AddInputVVImage (vvImage::Pointer input);
85     vvImage::Pointer GetOutputVVImage ();
86     std::vector<vvImage::Pointer> GetOutputVVImages ();
87
88     // Information on available image types
89     void PrintAvailableImageTypes();
90     virtual std::string GetAvailableImageTypes() = 0;
91
92     virtual bool CheckImageType(unsigned int dim,unsigned int ncomp, std::string pixeltype) = 0;
93     virtual bool CheckImageType() = 0;
94
95     // Main function to call for using the filter. 
96     virtual bool Update() = 0;
97
98   protected:  
99     bool mReadOnDisk;
100     /// Call this function to dispatch an output towards the correct sink
101     template<class ImageType> 
102     void SetNextOutput(typename ImageType::Pointer output);
103
104     /// Call this function to get the nth itk input image, regardless of input source
105     template<class ImageType> 
106     typename ImageType::Pointer GetInput(unsigned int n);
107
108     std::vector<std::string> mInputFilenames;
109     std::list<std::string> mOutputFilenames;
110
111     bool mIOVerbose;
112     unsigned int mDim;
113     std::string mPixelTypeName;
114     unsigned int mNbOfComponents;
115     std::string mFilterName;
116
117     std::vector<vvImage::Pointer> mInputVVImages;
118     std::vector<vvImage::Pointer> mOutputVVImages;
119
120     void ImageTypeError();
121     void SetImageTypeError();
122     bool mFailOnImageTypeError;
123
124   }; // end class clitk::ImageToImageGenericFilter
125
126 #define ADD_VEC_IMAGE_TYPE(DIM, COMP, PT) this->mImageTypesManager.template AddNewDimensionAndPixelType<DIM,COMP, PT>();
127 #define ADD_IMAGE_TYPE(DIM, PT) this->mImageTypesManager.template AddNewDimensionAndPixelType<DIM, PT>();
128
129   //#include "clitkImageToImageGenericFilterBase.txx"
130
131 } // end namespace
132
133 #endif /* end #define CLITKIMAGETOIMAGEGENERICFILTERBASE_H */
134