]> Creatis software - bbtk.git/blob - packages/vtk/src/bbvtkElementTypeChanger.cxx
*** empty log message ***
[bbtk.git] / packages / vtk / src / bbvtkElementTypeChanger.cxx
1 #include "bbTranslationElementTypeChanger.h"
2 #include "bbTranslationPackage.h"
3 namespace bbTranslation
4 {
5
6 BBTK_ADD_BLACK_BOX_TO_PACKAGE(Translation,ElementTypeChanger)
7 BBTK_BLACK_BOX_IMPLEMENTATION(ElementTypeChanger,bbtk::AtomicBlackBox);
8 void ElementTypeChanger::Process()
9 {
10         vtkImageData* ans = NULL;
11         vtkImageData* src = bbGetInputIn();
12         if (src == NULL){
13                 return;
14         }
15
16         if (bbGetInputIsFLOATToUSHORT())
17         {
18                 ans = myOwnCast(src, bbGetInputInType());
19         }
20         else
21         {
22                 caster->SetOutputScalarType(bbGetInputInType());
23                 //caster->SetOutputScalarTypeToUnsignedShort();
24                 caster->SetClampOverflow(bbGetInputClampOverflow());
25                 caster->SetInput(src);
26                 caster->Update();
27                 ans = caster->GetOutput();
28
29                 double typeMin = ans->GetScalarTypeMin();
30                 double typeMax = ans->GetScalarTypeMax();
31
32                 std::cout << typeMin << "," << typeMax << std::endl;
33
34                 /*
35                 vtkStructuredPoints* stPoints = vtkStructuredPoints::New( );
36                 vtkImageChangeInformation* change = vtkImageChangeInformation::New();
37
38                 vtkDataArray* apt2 = filtro->GetOutput()->GetPointData()->GetScalars();
39
40                 stPoints->GetPointData( )->SetScalars(apt2);
41                 stPoints->SetDimensions( sizeIma, sizeIma, 1 );
42                 stPoints->SetScalarType( volume->GetScalarType( ) );
43                 stPoints->Update();
44
45                 change->SetInput( stPoints );
46                 change->Update();    //important
47
48                 return change->GetOutput();
49                 */
50
51         }
52         bbSetOutputOut(ans);
53 }
54 vtkImageData* ElementTypeChanger::myOwnCast(vtkImageData* original, int type)
55 {
56         vtkImageData* final = vtkImageData::New();
57
58         int ext[6];
59         int newDim[3];
60         double space[3];
61         double origin[3];
62
63         original->GetSpacing(space);
64         original->GetExtent(ext);
65         original->GetOrigin(origin);
66         original->GetDimensions(newDim);
67
68         final->SetScalarTypeToUnsignedShort();
69
70         final->SetSpacing(space);
71         final->SetDimensions(newDim);
72         final->SetOrigin(origin);
73
74         final->AllocateScalars();
75         final->Update();
76
77         float * ap1;
78         unsigned short * ap2;
79
80         float max_value = 0;
81         float max_value2 = 0;
82         //double min_value = GetScalarTypeMin();
83         //double max_value = GetScalarTypeMax();
84         for (int i=0; i<newDim[0]; i++){
85                 for (int j=0; j<newDim[1]; j++){
86                         for (int k=0; k<newDim[2]; k++){
87                                 ap1 = (float *) original->GetScalarPointer(i,j,k);
88
89                                 ap2 = (unsigned short *) final->GetScalarPointer(i,j,k);
90                                 *ap2 = (((float) *ap1)*(bbGetInputScale()));
91                         }
92                 }
93         }
94
95         return final;
96 }
97
98 void ElementTypeChanger::bbUserSetDefaultValues()
99 {
100
101         bbSetInputClampOverflow(1);
102     bbSetInputIn(NULL);
103         bbSetInputScale(1);
104         bbSetOutputOut(NULL);
105         bbSetInputInType(VTK_UNSIGNED_SHORT);
106         bbSetInputIsFLOATToUSHORT(false);
107         caster = vtkImageCast::New();
108
109 }
110 void ElementTypeChanger::bbUserInitializeProcessing()
111 {
112
113 //  THE INITIALIZATION METHOD BODY :
114 //    Here does nothing
115 //    but this is where you should allocate the internal/output pointers
116 //    if any
117
118
119 }
120 void ElementTypeChanger::bbUserFinalizeProcessing()
121 {
122
123 //  THE FINALIZATION METHOD BODY :
124 //    Here does nothing
125 //    but this is where you should desallocate the internal/output pointers
126 //    if any
127
128 }
129 }
130 // EO namespace bbTranslation
131
132