]> Creatis software - bbtk.git/blob - packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx
6940e13c6335f9459b27559d86f06ea45ed8f0b7
[bbtk.git] / packages / gdcmvtk / src / bbgdcmvtkGetInfoGdcmReader.cxx
1 #include "bbgdcmvtkGetInfoGdcmReader.h"
2 #include "bbgdcmvtkPackage.h"
3
4 #if defined USE_GDCM
5         #include "gdcmFile.h"
6         #include "gdcmFileHelper.h"
7         #include "vtkImageData.h"
8         #include "vtkGdcmReader.h"
9 #endif
10 #if defined USE_GDCM2
11         #include <gdcmReader.h>
12 //      #include "vtkImageData.h"       
13         #include <gdcmImageHelper.h>
14         #include <vtkGDCMImageReader.h>
15 #endif
16 #include <vtkIndent.h>
17
18 namespace bbgdcmvtk
19 {
20
21 BBTK_ADD_BLACK_BOX_TO_PACKAGE(gdcmvtk,GetInfoGdcmReader)
22 BBTK_BLACK_BOX_IMPLEMENTATION(GetInfoGdcmReader,bbtk::AtomicBlackBox);
23
24 #if defined USE_GDCM
25 void GetInfoGdcmReader::Process()
26 {
27         // Reset de reader, f
28         bbUserFinalizeProcessing();
29         
30    f = GDCM_NAME_SPACE::File::New();
31    f->SetFileName( bbGetInputIn() );
32    bool res = f->Load();  
33    if ( !res )
34    {
35       f->Delete();
36       bbSetOutputOut(0);
37       return;
38    }
39  // Get info from THE image file (only *one* as input)
40    int i;
41    std::vector<double> v_iop;
42    float iop[6];
43    f->GetImageOrientationPatient(iop);
44    
45    for(i=0; i< 6; i++)
46       v_iop.push_back(iop[i]);
47    bbSetOutputIOP(v_iop );
48  
49    std::vector<double> v_ipp;
50    float ipp[3];
51    f->GetImagePositionPatient(ipp);
52    
53    for(i=0; i< 3; i++)
54       v_ipp.push_back(ipp[i]);
55    bbSetOutputIPP(v_ipp );
56
57    std::vector<double> v_pixelspacing;
58    v_pixelspacing.push_back(f->GetXSpacing());
59    v_pixelspacing.push_back(f->GetYSpacing());
60    
61    if (f->GetZSize() != 1) 
62    {
63       v_pixelspacing.push_back(f->GetZSpacing());
64    }
65    bbSetOutputPixelSpacing(v_pixelspacing);
66    
67    //double interslice;
68     bbSetOutputInterSlice(f->GetZSpacing());
69    
70    reader = vtkGdcmReader::New();
71    reader->SetFileName( bbGetInputIn().c_str() );
72    reader->Update();
73    reader->GetOutput();
74
75    vtkIndent indent ;
76    reader->GetOutput()->PrintSelf(std::cout, indent);
77    bbSetOutputOut( reader->GetOutput() );
78 }
79 #endif
80
81 #if defined USE_GDCM2
82 void GetInfoGdcmReader::Process()
83 {
84         // Reset de reader, f
85         bbUserFinalizeProcessing();
86         gdcm::Reader *read = new gdcm::Reader();
87         read->SetFileName( bbGetInputIn().c_str());
88   
89         bool res = read->Read();  
90    if ( !res )
91    {
92       delete read;
93       bbSetOutputOut(0);
94       return;
95    }
96    
97  // Get info from THE image file (only *one* as input)
98    const gdcm::File &f = read->GetFile();
99    
100    // Image Orientation (Patient)
101    int i;
102    std::vector<double> v_iop;
103    const gdcm::DataElement &deIop = f.GetDataSet().GetDataElement(gdcm::Tag(0x0020, 0x0037));
104    std::stringstream ss;
105    deIop.GetValue().Print(ss);
106    gdcm::Element<gdcm::VR::DS,gdcm::VM::VM6> iop;
107    iop.Read( ss );
108    for(i=0; i< 6; i++)
109       v_iop.push_back((float)(iop[i]));
110    bbSetOutputIOP(v_iop );
111  
112    // Image Position (Patient)
113    std::vector<double> v_ipp;
114    const gdcm::DataElement &deIpp = f.GetDataSet().GetDataElement(gdcm::Tag((0x0020,0x0032)));
115    deIpp.GetValue().Print(ss);
116    gdcm::Element<gdcm::VR::DS,gdcm::VM::VM3> ipp;
117    ipp.Read( ss );
118           for(i=0; i< 3; i++)
119                 v_ipp.push_back((float)(ipp[i]));
120    bbSetOutputIPP(v_ipp );
121
122    std::vector<double> v_pixelspacing = gdcm::ImageHelper::GetSpacingValue(f);
123    bbSetOutputPixelSpacing(v_pixelspacing);
124    
125    //double interslice; ?? ==1 NO?
126     bbSetOutputInterSlice(v_pixelspacing[2]);
127    
128    reader = vtkGDCMImageReader::New();
129    reader->SetFileName( bbGetInputIn().c_str() );
130    reader->Update();
131    reader->GetOutput();
132    vtkIndent indent ;
133    reader->GetOutput()->PrintSelf(std::cout, indent);
134    bbSetOutputOut( reader->GetOutput() );
135 }
136 #endif
137
138
139 void GetInfoGdcmReader::bbUserSetDefaultValues()
140 {
141 #if defined USE_GDCM2
142    read=NULL;
143 #endif   
144 #if defined USE_GDCM
145    reader=NULL;
146    f=NULL;
147 #endif
148    bbSetInputIn("");  
149 }
150
151
152 void GetInfoGdcmReader::bbUserInitializeProcessing()
153 {
154 }
155
156
157 void GetInfoGdcmReader::bbUserFinalizeProcessing()
158 {
159 #if defined USE_GDCM2
160    if( reader )
161    {
162       reader->Delete();
163       reader=NULL;
164    }
165 #endif
166
167 #if defined USE_GDCM    
168    if( reader )
169    {
170       reader->Delete();
171       reader=NULL;
172    }   
173
174    if(f)
175    {
176       f->Delete();
177       f=NULL;
178    }    
179 #endif
180 }
181 }
182
183 // EO namespace bbgdcmvtk
184
185