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