]> Creatis software - bbtk.git/blob - packages/vtk/src/bbvtkSliceImage.cxx
*** empty log message ***
[bbtk.git] / packages / vtk / src / bbvtkSliceImage.cxx
1 #include "bbvtkSliceImage.h"
2 #include "bbvtkPackage.h"
3 namespace bbvtk
4 {
5
6 BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,SliceImage)
7 BBTK_BLACK_BOX_IMPLEMENTATION(SliceImage,bbtk::AtomicBlackBox);
8 void SliceImage::Process()
9 {
10         vtkImageData* original = bbGetInputIn();
11
12         if (original == NULL)
13         {
14                 std::cout << "Set In" << std::endl;
15                 return;
16         }
17
18         //if (lastId == bbGetInputZ())
19         //      return;
20
21         int z = bbGetInputZ();
22         int max_z;
23
24         int ext[6];
25         int newDim[3];
26         double space[3];
27         double origin[3];
28
29         original->GetSpacing(space);
30         original->GetExtent(ext);
31         original->GetOrigin(origin);
32         original->GetDimensions(newDim);
33         max_z = newDim[2];
34         newDim[2] = 1;
35
36         int scalar_type = original->GetScalarType();
37
38         if (final == NULL)
39         {
40                 final = vtkImageData::New();
41                 final->SetSpacing(space);
42                 final->SetDimensions(newDim);
43                 final->SetScalarType(scalar_type);
44                 final->AllocateScalars();
45                 final->Update();
46
47
48         }
49
50         bbSetOutputMax(max_z);
51
52         if (z>=max_z)
53         {
54                 z = max_z-1;
55         }
56
57         for (int i=0; i<newDim[0]; i++){
58                 for (int j=0; j<newDim[1]; j++){
59                         switch (scalar_type)
60                         {
61                                 case VTK_CHAR:
62                                         char * ap2;
63                                         ap2 = (char *) final->GetScalarPointer(i,j,0);
64                                         *ap2 = *((char*) (original->GetScalarPointer(i,j,z)));
65                                 break;
66                                 case VTK_UNSIGNED_CHAR:
67                                         unsigned char * ap3;
68                                         ap3 = (unsigned char *) final->GetScalarPointer(i,j,0);
69                                         *ap3 = *((unsigned char *)(original->GetScalarPointer(i,j,z)));
70                                 break;
71                                 case VTK_SHORT:
72                                         short * ap4;
73                                         ap4 = (short *) final->GetScalarPointer(i,j,0);
74                                         *ap4 = *((short *)(original->GetScalarPointer(i,j,z)));
75                                 break;
76                                 case VTK_UNSIGNED_SHORT:
77                                         unsigned short * ap5;
78                                         ap5 = (unsigned short *) final->GetScalarPointer(i,j,0);
79                                         *ap5 = *((unsigned short *)(original->GetScalarPointer(i,j,z)));
80                                 break;
81                                 case VTK_INT:
82                                         int * ap6;
83                                         ap6 = (int *) final->GetScalarPointer(i,j,0);
84                                         *ap6 = *((int *)(original->GetScalarPointer(i,j,z)));
85                                 break;
86                                 case VTK_UNSIGNED_INT:
87                                         unsigned int * ap7;
88                                         ap7 = (unsigned int *) final->GetScalarPointer(i,j,0);
89                                         *ap7 = *((unsigned int *)(original->GetScalarPointer(i,j,z)));
90                                 break;
91                                 case VTK_LONG:
92                                         long * ap8;
93                                         ap8 = (long *) final->GetScalarPointer(i,j,0);
94                                         *ap8 = *((long *)(original->GetScalarPointer(i,j,z)));
95                                 break;
96                                 case VTK_UNSIGNED_LONG:
97                                         unsigned long * ap9;
98                                         ap9 = (unsigned long *) final->GetScalarPointer(i,j,0);
99                                         *ap9 = *((unsigned long *)(original->GetScalarPointer(i,j,z)));
100                                 break;
101                                 case VTK_FLOAT:
102                                         float * ap10;
103                                         ap10 = (float *) final->GetScalarPointer(i,j,0);
104                                         *ap10 = *((float *)(original->GetScalarPointer(i,j,z)));
105                                 break;
106                                 case VTK_DOUBLE:
107                                         double * ap11;
108                                         ap11 = (double *) final->GetScalarPointer(i,j,0);
109                                         *ap11 = *((double *)(original->GetScalarPointer(i,j,z)));
110                                 break;
111                         }
112                 }
113         }
114
115         caster = vtkImageCast::New();
116         caster->SetInput(final);
117         caster->SetOutputScalarTypeToShort();
118         caster->Update();
119
120         bbSetOutputOut(caster->GetOutput());
121
122         std::cout << "updated slice " << z << std::endl;
123         bbSignalOutputModification();
124         lastId = bbGetInputZ();
125 }
126 void SliceImage::bbUserSetDefaultValues()
127 {
128
129 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
130 //    Here we initialize the input 'In' to 0
131    bbSetInputIn(NULL);
132    bbSetOutputOut(NULL);
133    final = NULL;
134
135 }
136 void SliceImage::bbUserInitializeProcessing()
137 {
138
139 //  THE INITIALIZATION METHOD BODY :
140 //    Here does nothing
141 //    but this is where you should allocate the internal/output pointers
142 //    if any
143
144
145 }
146 void SliceImage::bbUserFinalizeProcessing()
147 {
148
149 //  THE FINALIZATION METHOD BODY :
150 //    Here does nothing
151 //    but this is where you should desallocate the internal/output pointers
152 //    if any
153
154 }
155 }
156 // EO namespace bbvtk
157
158