]> Creatis software - gdcm.git/blob - vtk/vtkGdcm4DSplitter.h
orger XCoherentFilesetMap according to IPP, when necessary
[gdcm.git] / vtk / vtkGdcm4DSplitter.h
1 /*=========================================================================
2                                                                                 
3   Program:   gdcm
4   Module:    $RCSfile: vtkGdcm4DSplitter.h,v $
5   Language:  C++
6   Date:      $Date: 2011/04/11 11:28:31 $
7   Version:   $Revision: 1.8 $
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 #include "gdcmFile.h"
26
27 typedef  bool (*FoncComp)(GDCM_NAME_SPACE::File *file1, GDCM_NAME_SPACE::File *file2);
28
29 #define CALL_MEMBER_FONC(object, ptrToFoncMember)  ((object).*(ptrToFoncMember))
30
31    typedef struct 
32    {
33       std::string strIPP;
34       double dist;
35       GDCM_NAME_SPACE::File *file;
36    } ELEM;
37    
38    
39 //namespace GDCM_NAME_SPACE
40 //{
41   class vtkGdcm4DSplitter {
42     public:
43
44        vtkGdcm4DSplitter();
45        ~vtkGdcm4DSplitter(){};
46        bool setDirName(std::string &dirName);
47        bool setVectDirName(std::vector<std::string> &vectDirName);
48        bool setVectFileName(std::vector<std::string> &vectFileName);
49
50        // Split
51        // =====
52        inline void setSplitOnPosition()   {SplitOnPosition=true;  SplitOnOrientation=false; SplitOnTag=false;}
53        inline void setSplitOnOrientation(){SplitOnPosition=false; SplitOnOrientation=true;  SplitOnTag=false;}
54        inline void setSplitOnTag(unsigned short int splitGroup, unsigned short int splitElem)
55                                           {SplitOnPosition=false; SplitOnOrientation=false; SplitOnTag=true;
56                                            SplitGroup=splitGroup;    SplitElem=splitElem;}
57        inline void setSplitConvertToFloat(bool conv) {SplitConvertToFloat=conv;}
58
59        // Sort
60        // ====
61        inline void setSortOnPosition()   {SortOnPosition=true; SortOnOrientation=false; SortOnTag=false; SortOnFileName=false; SortOnUserFunction=false;
62                                           SortOnPosition=true;}
63       // use setSortOnUserFunction, instead!
64       // inline void setSortOnTag(unsigned short int sortGroup, unsigned short int sortElem)
65       //                                   {SortOnPosition=false; SortOnOrientation=false; SortOnTag=true; SortOnFileName=false; SortOnUserFunction=false;
66       //                                    SortGroup=sortGroup;  SortElem=sortElem;}
67
68        inline void setSortOnUserFunction (FoncComp f)
69                                          { UserCompareFunction=f;
70                                            SortOnPosition=false; SortOnOrientation=false; SortOnTag=false; SortOnFileName=false; SortOnUserFunction=true;}
71
72        inline void setSortConvertToFloat(bool conv) {SortConvertToFloat=conv;}
73
74        inline void setSortOnFileName()   {SortOnPosition=false; SortOnOrientation=false; SortOnTag=false; SortOnFileName=true; SortOnUserFunction=false;}
75
76        inline void setRecursive(bool recursive) { Recursive=recursive;}
77
78        // SortOnOrientation : not yet made
79        //inline void setSortOnOrientation(){SortOnPosition=false; SortOnOrientation=true;  SortOnTag=false; SortOnFileName=false; SortOnUserFunction=false;}
80
81         std::vector<vtkImageData*> *GetImageDataVector();
82         vtkImageData *GetImageData();
83
84         bool Go();
85
86     protected:
87     private:
88        bool CompareOnSortTag              (GDCM_NAME_SPACE::File *file1, GDCM_NAME_SPACE::File *file2);
89        bool CompareOnSortTagConvertToFloat(GDCM_NAME_SPACE::File *file1, GDCM_NAME_SPACE::File *file2);
90        void reorgXCoherentFileSetmap      (GDCM_NAME_SPACE::XCoherentFileSetmap &xcm);
91        bool sortVectElem(std::vector<ELEM> *le);
92
93     // Data
94     // ----
95     public:
96     protected:
97     private:
98        std::string DirName;
99        std::vector<std::string> VectDirName;
100        std::vector<std::string> VectFileName;
101
102        bool SplitOnPosition;
103        bool SplitOnOrientation;
104        bool SplitOnTag;
105
106        unsigned short int SplitGroup;
107        unsigned short int SplitElem;
108        bool SplitConvertToFloat;
109
110        bool SortOnPosition;
111        bool SortOnOrientation;
112        bool SortOnTag;
113        bool SortOnFileName;
114        bool SortOnUserFunction;
115
116        FoncComp UserCompareFunction;
117
118        unsigned short int SortGroup;
119        unsigned short int SortElem;
120        bool SortConvertToFloat;
121
122        bool Recursive;
123        int TypeDir;
124        int TypeResult;
125        bool verbose;
126        std::vector<vtkImageData*> *ImageDataVector;
127        vtkImageData *ImageData;
128   };
129
130 //} // end namespace gdcm
131
132 //-----------------------------------------------------------------------------
133 #endif