1 /*=========================================================================
4 Module: $RCSfile: clitkImageToImageGenericFilter.h,v $
6 Date: $Date: 2010/01/29 07:27:31 $
7 Version: $Revision: 1.2 $
8 Author : Joel Schaerer <joel.schaerer@creatis.insa-lyon.fr>
9 David Sarrut <david.sarrut@creatis.insa-lyon.fr>
12 Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
13 CREATIS-LRMN http://www.creatis.insa-lyon.fr
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.
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.
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/>.
27 =========================================================================*/
29 #ifndef CLITKIMAGETOIMAGEGENERICFILTER_H
30 #define CLITKIMAGETOIMAGEGENERICFILTER_H
33 #include "clitkCommon.h"
34 #include "clitkImageCommon.h"
35 #include "clitkCommonGenericFilter.h"
40 #include <vvFromITK.h>
46 //--------------------------------------------------------------------
47 class ImageToImageGenericFilterBase: public itk::Object {
50 // constructor - destructor
51 ImageToImageGenericFilterBase(std::string filterName);
52 virtual ~ImageToImageGenericFilterBase() {}
55 typedef ImageToImageGenericFilterBase Self;
56 typedef Object Superclass;
57 typedef itk::SmartPointer<Self> Pointer;
58 typedef itk::SmartPointer<const Self> ConstPointer;
60 // Filters information
61 const std::string & GetFilterName() { return mFilterName; }
62 void SetFilterName(std::string & n) { mFilterName = n; }
65 /// Returns the dimension and pixel type of the *first* input
66 void GetInputImageDimensionAndPixelType(unsigned int& dim, std::string& pixeltype,unsigned int & components);
69 void SetInputFilename(const std::string & filename);
70 void AddInputFilename(const std::string & filename);
71 void SetInputFilenames(const std::vector<std::string> & filenames);
72 void SetOutputFilename(const std::string & filename);
73 void AddOutputFilename(const std::string & filename);
74 void SetOutputFilenames(const std::vector<std::string> & filenames);
75 std::string GetOutputFilename();
76 void SetIOVerbose(bool b) { mIOVerbose = b; }
79 void SetInputVVImage (vvImage::Pointer input);
80 void SetInputVVImages (std::vector<vvImage::Pointer> input);
81 void AddInputVVImage (vvImage::Pointer input);
82 vvImage::Pointer GetOutputVVImage ();
83 std::vector<vvImage::Pointer> GetOutputVVImages ();
85 // Information on available image types
86 void PrintAvailableImageTypes();
87 bool CheckDimension(unsigned int d);
88 bool CheckPixelType(std::string pt);
90 // Main function to call for using the filter.
91 virtual bool Update() = 0;
93 // Use internally only (TO PUT PROTECTED !!!)
94 void AddImageType(unsigned int d, std::string p);
97 /// Call this function to dispatch an output towards the correct sink
98 template<class ImageType>
99 void SetNextOutput(typename ImageType::Pointer output);
101 /// Call this function to get the nth itk input image, regardless of input source
102 template<class ImageType>
103 typename ImageType::Pointer GetInput(unsigned int n);
105 std::vector<std::string> mInputFilenames;
106 std::list<std::string> mOutputFilenames;
110 std::string mPixelTypeName;
111 unsigned int mNbOfComponents;
112 std::string mFilterName;
114 std::vector<vvImage::Pointer> mInputVVImages;
115 std::vector<vvImage::Pointer> mOutputVVImages;
117 std::vector<std::string> mListOfAllowedPixelType;
118 std::vector<unsigned int> mListOfAllowedDimension;
119 bool CheckImageType();
120 bool CheckDimension();
121 bool CheckPixelType();
122 void ImageTypeError();
123 void SetImageTypeError();
124 bool mFailOnImageTypeError;
126 }; // end class clitk::ImageToImageGenericFilter
129 //--------------------------------------------------------------------
130 template<class FilterType>
131 class ImageToImageGenericFilter: public ImageToImageGenericFilterBase {
135 typedef ImageToImageGenericFilter<FilterType> Self;
137 // constructor - destructor
138 ImageToImageGenericFilter(std::string filterName);
139 virtual ~ImageToImageGenericFilter() { delete mImageTypesManager; }
141 // Main function to call for using the filter.
142 virtual bool Update();
145 // Object that will manage the list of templatized function for
147 ImageTypesManager<FilterType> * mImageTypesManager;
149 }; // end class clitk::ImageToImageGenericFilter
151 // #define ADD_IMAGE_DIMENSION(DIM) Initialize<DIM>();
153 #define ADD_IMAGE_TYPE(DIM, PT) this->mImageTypesManager->template AddNewDimensionAndPixelType<DIM, PT>();
156 #include "clitkImageToImageGenericFilter.txx"
160 #endif /* end #define CLITKIMAGETOIMAGEGENERICFILTER_H */