]> Creatis software - gdcm.git/blob - vtk/vtkGdcm4DSplitter.h
Fixes (Sort on tag still buggy...)
[gdcm.git] / vtk / vtkGdcm4DSplitter.h
1 /*=========================================================================
2                                                                                 
3   Program:   gdcm
4   Module:    $RCSfile: vtkGdcm4DSplitter.h,v $
5   Language:  C++
6   Date:      $Date: 2011/03/30 14:49:04 $
7   Version:   $Revision: 1.2 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18
19 #ifndef _VTKGDCM4DSPLITTER_H_
20 #define _VTKGDCM4DSPLITTER_H_
21
22 #include <vector>
23 #include <vtkImageData.h>
24 #include "gdcmDirList.h" 
25
26 typedef  bool (*FoncComp)                       (GDCM_NAME_SPACE::File *file1, GDCM_NAME_SPACE::File *file2);
27 //typedef  bool (vtkGdcm4DSplitter::*MembFoncComp)(GDCM_NAME_SPACE::File *file1, GDCM_NAME_SPACE::File *file2);
28 #define CALL_MEMBER_FONC(object, ptrToFoncMember)  ((object).*(ptrToFoncMember)) 
29  
30 //namespace GDCM_NAME_SPACE 
31 //{
32   class vtkGdcm4DSplitter {
33     public:
34     
35        vtkGdcm4DSplitter();
36        ~vtkGdcm4DSplitter(){};       
37        bool setDirName(std::string &dirName);
38        bool setVectDirName(std::vector<std::string> &vectDirName);
39        bool setVectFileName(std::vector<std::string> &vectFileName);       
40        
41        // Split
42        // =====
43        inline void setSplitOnPosition()   {SplitOnPosition=true;  SplitOnOrientation=false; SplitOnTag=false;}
44        inline void setSplitOnOrientation(){SplitOnPosition=false; SplitOnOrientation=true;  SplitOnTag=false;}
45        inline void setSplitOnTag(unsigned short int splitGroup, unsigned short int splitElem)       
46                                           {SplitOnPosition=false; SplitOnOrientation=false; SplitOnTag=true; 
47                                            SplitGroup=splitGroup;    SplitElem=splitElem;}
48        inline void setSplitConvertToFloat(bool conv) {SplitConvertToFloat=conv;}
49        
50        // Sort
51        // ====
52        inline void setSortOnPosition()   {SortOnPosition=true; SortOnOrientation=false; SortOnTag=false; SortOnFileName=false; SortOnUserFunction=false;
53                                           SortOnPosition=true;}
54   
55        inline void setSortOnTag(unsigned short int sortGroup, unsigned short int sortElem)       
56                                          {SortOnPosition=false; SortOnOrientation=false; SortOnTag=true; SortOnFileName=false; SortOnUserFunction=false;
57                                           SortGroup=sortGroup;  SortElem=sortElem;}
58   
59        inline void setSortOnUserFunction (FoncComp f) 
60                                          { UserCompareFunction=f;
61                                            SortOnPosition=false; SortOnOrientation=false; SortOnTag=false; SortOnFileName=false; SortOnUserFunction=true;}
62
63        inline void setSortConvertToFloat(bool conv) {SortConvertToFloat=conv;}
64                                     
65        inline void setSortOnFileName()   {SortOnPosition=false; SortOnOrientation=false; SortOnTag=false; SortOnFileName=true; SortOnUserFunction=false;}
66        
67        inline void setRecursive(bool recursive) { Recursive=recursive;}
68
69        // SortOnOrientation : not yet made
70        //inline void setSortOnOrientation(){SortOnPosition=false; SortOnOrientation=true;  SortOnTag=false; SortOnFileName=false; SortOnUserFunction=false;}   
71        
72         std::vector<vtkImageData*> *GetImageDataVector();
73         vtkImageData *GetImageData();
74
75         bool Go();  
76                 
77     protected:
78     private:
79        bool CompareOnSortTag              (GDCM_NAME_SPACE::File *file1, GDCM_NAME_SPACE::File *file2);
80        bool CompareOnSortTagConvertToFloat(GDCM_NAME_SPACE::File *file1, GDCM_NAME_SPACE::File *file2); 
81                
82     // Data
83     // ----
84     public:  
85     protected:
86     private:
87        std::string DirName;
88        std::vector<std::string> VectDirName;
89        std::vector<std::string> VectFileName;
90        
91        bool SplitOnPosition;
92        bool SplitOnOrientation;
93        bool SplitOnTag;
94  
95        unsigned short int SplitGroup;
96        unsigned short int SplitElem;
97        bool SplitConvertToFloat;
98                     
99        bool SortOnPosition;
100        bool SortOnOrientation;
101        bool SortOnTag;    
102        bool SortOnFileName;
103        bool SortOnUserFunction;
104        
105        FoncComp UserCompareFunction;
106        
107        unsigned short int SortGroup;
108        unsigned short int SortElem;
109        bool SortConvertToFloat;
110               
111        bool Recursive;
112        int TypeDir;
113        int TypeResult;
114        bool verbose;
115        std::vector<vtkImageData*> *ImageDataVector;
116        vtkImageData *ImageData;               
117   };
118  
119 //} // end namespace gdcm
120
121 //-----------------------------------------------------------------------------
122 #endif