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