]> Creatis software - creaImageIO.git/blob - bbtk_Transform3Ddicom_PKG/src/bbTransform3DdicomCreateComplementImage.cxx
#3326 bbtk_Transform3Ddicom_PKG
[creaImageIO.git] / bbtk_Transform3Ddicom_PKG / src / bbTransform3DdicomCreateComplementImage.cxx
1 #include <vtkVersionMacros.h>
2 #include "bbTransform3DdicomCreateComplementImage.h"
3 #include "bbTransform3DdicomPackage.h"
4 namespace bbTransform3Ddicom
5 {
6
7 BBTK_ADD_BLACK_BOX_TO_PACKAGE(Transform3Ddicom,CreateComplementImage)
8 BBTK_BLACK_BOX_IMPLEMENTATION(CreateComplementImage,bbtk::AtomicBlackBox);
9 void CreateComplementImage::Process()
10 {
11
12         if (( bbGetInputImage1()!=NULL ) && ( bbGetInputImage2()!=NULL ))
13         {
14                 creaimage1->SetvtkImageData( bbGetInputImage1() );
15                 creaimage1->SetImagePositionPatient( bbGetInputPosition1()[0] , bbGetInputPosition1()[1] , bbGetInputPosition1()[2] );
16                 creaimage1->SetImageSpacing( bbGetInputSpacing1()[0] , bbGetInputSpacing1()[1] , bbGetInputSpacing1()[2]  );
17                 creaimage1->SetImageOrientation(  bbGetInputOrientation1Vec1()[0] , bbGetInputOrientation1Vec1()[1] , bbGetInputOrientation1Vec1()[2] , 
18                                                                                 bbGetInputOrientation1Vec2()[0] , bbGetInputOrientation1Vec2()[1] , bbGetInputOrientation1Vec2()[2]  );         
19                 
20                 creaimage2->SetvtkImageData( bbGetInputImage2() );
21                 creaimage2->SetImagePositionPatient( bbGetInputPosition2()[0] , bbGetInputPosition2()[1] , bbGetInputPosition2()[2] );
22                 creaimage2->SetImageSpacing( bbGetInputSpacing2()[0] , bbGetInputSpacing2()[1] , bbGetInputSpacing2()[2]  );
23                 creaimage2->SetImageOrientation(  bbGetInputOrientation2Vec1()[0] , bbGetInputOrientation2Vec1()[1] , bbGetInputOrientation2Vec1()[2] , 
24                                                                                 bbGetInputOrientation2Vec2()[0] , bbGetInputOrientation2Vec2()[1] , bbGetInputOrientation2Vec2()[2]  );
25                 
26                 
27                 creaimagecomplement->SetBaseCreaImage( creaimage1 );
28                 creaimagecomplement->SetComplementCreaImage( creaimage2 );
29                 creaimagecomplement->Update();
30                 
31                 
32                 double dimx,dimy,dimz;
33                 
34                 
35                 dimx= ((bbGetInputExtOut()[1] - bbGetInputExtOut()[0]) / bbGetInputSpcOut()[0])+1;
36                 dimy= ((bbGetInputExtOut()[3] - bbGetInputExtOut()[2]) / bbGetInputSpcOut()[1])+1;
37                 dimz= ((bbGetInputExtOut()[5] - bbGetInputExtOut()[4]) / bbGetInputSpcOut()[2])+1;
38
39         //---- imageresult --------
40                 imageresult->SetSpacing(1,1,1);
41                 imageresult->SetDimensions(dimx,dimy,dimz);
42                 imageresult->SetExtent(0,dimx-1,0,dimy-1,0,dimz-1);
43         #if (VTK_MAJOR_VERSION <= 5) 
44                 imageresult->SetWholeExtent(0,dimx-1,0,dimy,0,dimz-1);
45                 imageresult->SetScalarTypeToUnsignedShort();
46                 imageresult->AllocateScalars();
47                 imageresult->Update();
48         #endif
49         #if (VTK_MAJOR_VERSION >= 6) 
50                 imageresult->AllocateScalars( VTK_UNSIGNED_SHORT ,1 );
51         #endif
52                 
53                 
54                 
55                 
56         //---- imageresult2 --------
57                 imageresult2->SetSpacing(1,1,1);
58                 imageresult2->SetDimensions(dimx,dimy,dimz);
59                 imageresult2->SetExtent(0,dimx-1,0,dimy-1,0,dimz-1);
60
61         #if (VTK_MAJOR_VERSION <= 5) 
62                 imageresult2->SetWholeExtent(0,dimx-1,0,dimy,0,dimz-1);
63                 imageresult2->SetScalarTypeToUnsignedShort();
64                 imageresult2->AllocateScalars();        
65                 imageresult2->Update();
66         #endif
67         #if (VTK_MAJOR_VERSION >= 6) 
68                 imageresult2->AllocateScalars( VTK_UNSIGNED_SHORT ,1 );
69         #endif
70                 
71                 
72                 unsigned short *p;
73                 double value;
74                 int x,y,z;
75                 double xx,yy,zz;
76                 for (x=0;x<dimx;x++)
77                 {
78                         for (y=0;y<dimy;y++)
79                         {
80                                 for (z=0;z<dimz;z++)
81                                 {
82                                         xx = (double)x * bbGetInputSpcOut()[0] + bbGetInputExtOut()[0] ;
83                                         yy = (double)y * bbGetInputSpcOut()[1] + bbGetInputExtOut()[2] ;
84                                         zz = (double)z * bbGetInputSpcOut()[2] + bbGetInputExtOut()[4] ;
85                                         // -- imageresult
86                                         value = creaimagecomplement->GetVoxelFromComplementImage_In_BaseCreaImage_Universe(xx,yy,zz);
87                                         p = (unsigned short *)imageresult->GetScalarPointer( x,y,z );
88                                         *p = (unsigned short)value;
89                                         // -- imageresult2
90                                         value = creaimage1->GetVoxelInImageUniverse(xx,yy,zz);
91                                         p = (unsigned short *)imageresult2->GetScalarPointer( x,y,z );
92                                         *p = (unsigned short)value;
93                                         
94                                 }// for z
95                         } // for y
96                 }// for x
97                 
98                 
99                 
100                 
101         bbSetOutputOut(imageresult);
102                 bbSetOutputOut2(imageresult2);
103         } else  {
104                 bbSetOutputOut(NULL);
105         }
106   
107 }
108
109 /*
110
111 void CreateComplementImage::bbUserConstructor()
112 {
113         creaimage1                      = new CreaImage();
114         creaimage2                      = new CreaImage();
115         creaimagecomplement = new CreaImageComplement();
116         imageresult                     = vtkImageData::New();
117         imageresult2            = vtkImageData::New();
118  
119 }
120 void CreateComplementImage::bbUserCopyConstructor(bbtk::BlackBox::Pointer)
121 {
122
123   
124 }
125 void CreateComplementImage::bbUserDestructor()
126 {
127         delete creaimage1;
128         delete creaimage2;
129 }
130
131 */
132
133
134
135 //===== 
136 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
137 //===== 
138 void CreateComplementImage::bbUserSetDefaultValues()
139 {
140         creaimage1                      = new CreaImage();
141         creaimage2                      = new CreaImage();
142         creaimagecomplement = new CreaImageComplement();
143         imageresult                     = vtkImageData::New();
144         imageresult2            = vtkImageData::New(); 
145 }
146
147
148
149 //===== 
150 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
151 //===== 
152 void CreateComplementImage::bbUserInitializeProcessing()
153 {
154
155 //  THE INITIALIZATION METHOD BODY :
156 //    Here does nothing 
157 //    but this is where you should allocate the internal/output pointers 
158 //    if any 
159
160   
161 }
162 //===== 
163 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
164 //===== 
165 void CreateComplementImage::bbUserFinalizeProcessing()
166 {
167
168 //  THE FINALIZATION METHOD BODY :
169 //    Here does nothing 
170 //    but this is where you should desallocate the internal/output pointers 
171 //    if any
172         delete creaimage1;
173         delete creaimage2;
174   
175 }
176
177
178
179
180 }
181 // EO namespace bbTransform3Ddicom
182
183
184
185