]> Creatis software - bbtk.git/blob - packages/vtk/src/bbvtkSurfaceTexture.cxx
#135 BBTK Feature New Normal - branch vtk7itk4wx3
[bbtk.git] / packages / vtk / src / bbvtkSurfaceTexture.cxx
1 //===== 
2 // 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)
3 //===== 
4 #include "bbvtkSurfaceTexture.h"
5 #include "bbvtkPackage.h"
6
7 #include <vtkPointData.h>
8
9
10 namespace bbvtk
11 {
12
13 BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,SurfaceTexture)
14 BBTK_BLACK_BOX_IMPLEMENTATION(SurfaceTexture,bbtk::AtomicBlackBox);
15 //===== 
16 // 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)
17 //===== 
18 void SurfaceTexture::Process()
19 {
20
21 // THE MAIN PROCESSING METHOD BODY
22 //   Here we simply set the input 'In' value to the output 'Out'
23 //   And print out the output value
24 // INPUT/OUTPUT ACCESSORS ARE OF THE FORM :
25 //    void bbSet{Input|Output}NAME(const TYPE&)
26 //    const TYPE& bbGet{Input|Output}NAME() const 
27 //    Where :
28 //    * NAME is the name of the input/output
29 //      (the one provided in the attribute 'name' of the tag 'input')
30 //    * TYPE is the C++ type of the input/output
31 //      (the one provided in the attribute 'type' of the tag 'input')
32
33 //    bbSetOutputOut( bbGetInputIn() );
34 //    std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
35   
36
37         int i;
38         double spc[3];
39         double range[2];
40         int ext[6];
41         bbGetInputImage()->GetSpacing(spc);
42         bbGetInputImage()->GetScalarRange(range);
43
44
45 //EED 2017-01-01 Migration VTK7
46 #if VTK_MAJOR_VERSION <= 5
47         bbGetInputImage()->GetWholeExtent(ext);
48 #else
49         bbGetInputImage()->GetExtent(ext);
50 #endif
51
52         int maxX = ext[1]-ext[0]+1;
53         int maxY = ext[3]-ext[2]+1;
54         int maxZ = ext[5]-ext[4]+1;
55         
56         if (firsttime==true)
57         {
58                 firsttime=false;
59                 // Generate the colors for each point based on the color map
60                 colors = vtkUnsignedCharArray::New(); 
61                 colors->SetNumberOfComponents(3);
62                 colors->SetName("Colors");
63                 
64                 // Create the color map
65                 if (bbGetInputColorType()==1)
66                 {
67                         colorLookupTableWL      = vtkWindowLevelLookupTable::New();
68                         colorLookupTableWL->InverseVideoOn();
69                         colorLookupTable        = colorLookupTableWL;
70                 } else {
71                         colorLookupTable = vtkLookupTable::New();
72                 }
73                 colorLookupTable->SetTableRange(range[0],range[1]);
74                 colorLookupTable->Build();
75                 double rgba1[4];
76                 double rgba2[4];
77                 for (int iLookTable = 0; iLookTable<128; iLookTable++)
78                 {
79                   colorLookupTable->GetTableValue(      iLookTable, rgba1);
80                   colorLookupTable->GetTableValue(256-1-iLookTable, rgba2);
81
82                   colorLookupTable->SetTableValue(256-1-iLookTable , rgba1[0],rgba1[1],rgba1[2],rgba1[3]);
83                   colorLookupTable->SetTableValue(      iLookTable , rgba2[0],rgba2[1],rgba2[2],rgba2[3]);
84                 } // for iLookTable
85
86         }
87
88         bbGetInputMesh()->GetPointData()->SetScalars(colors);
89
90         if (bbGetInputColorType()==1)
91         {
92                 colorLookupTableWL->SetLevel( bbGetInputColorLevel() );
93                 colorLookupTableWL->SetWindow( bbGetInputColorWindow() );
94         }       
95                 
96     int missingpoints = bbGetInputMesh()->GetNumberOfPoints() - colors->GetDataSize()/colors->GetNumberOfComponents();
97         for(i = 0; i < missingpoints; i++)
98     {
99                 colors->InsertNextTuple3(0,0,0);
100         }       
101
102         if (bbGetInputTransform()!=NULL)
103         {
104                 bbGetInputTransform()->Update();
105         }
106         
107         double gl; 
108         double p1[3];
109         double p2[3];
110         double dcolor[3];
111         for(i = 0; i < bbGetInputMesh()->GetNumberOfPoints(); i++)
112     {
113                 if (bbGetInputTransform()!=NULL)
114                 {
115                         bbGetInputMesh()->GetPoint(i,p1);
116                         bbGetInputTransform()->TransformPoint(p1,p2);
117                 } else {
118                         bbGetInputMesh()->GetPoint(i,p2);
119                 }
120                 p2[0] = p2[0]/spc[0];
121                 p2[1] = p2[1]/spc[1];
122                 p2[2] = p2[2]/spc[2];   
123                 
124                 if ( (p2[0]>=0) && (p2[0]<maxX) && (p2[1]>=0) && (p2[1]<maxY) &&(p2[2]>=0) && (p2[2]<maxZ)  )
125                 {
126                    gl =  bbGetInputImage()->GetScalarComponentAsDouble(p2[0], p2[1], p2[2],0);
127                 } else {
128                         gl=0;
129                 }
130                 colorLookupTable->GetColor(gl, dcolor);
131                 colors->SetTuple3(i,255*dcolor[0],255*dcolor[1],255*dcolor[2]);         
132         } // for i
133         bbGetInputMesh()->Modified();   
134
135 }
136 //===== 
137 // 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)
138 //===== 
139 void SurfaceTexture::bbUserSetDefaultValues()
140 {
141
142 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
143 //    Here we initialize the input 'In' to 0
144         bbSetInputMesh(NULL);
145         bbSetInputImage(NULL);
146         bbSetInputColorType(0);
147         bbSetInputColorLevel(500);
148         bbSetInputColorWindow(500);
149         bbSetInputTransform(NULL);
150   
151         firsttime                               = true;
152         colors                                  = NULL;
153         colorLookupTable                = NULL;
154         colorLookupTableWL      = NULL;
155 }
156 //===== 
157 // 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)
158 //===== 
159 void SurfaceTexture::bbUserInitializeProcessing()
160 {
161
162 //  THE INITIALIZATION METHOD BODY :
163 //    Here does nothing 
164 //    but this is where you should allocate the internal/output pointers 
165 //    if any 
166
167   
168 }
169 //===== 
170 // 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)
171 //===== 
172 void SurfaceTexture::bbUserFinalizeProcessing()
173 {
174
175 //  THE FINALIZATION METHOD BODY :
176 //    Here does nothing 
177 //    but this is where you should desallocate the internal/output pointers 
178 //    if any
179   
180 }
181 }
182 // EO namespace bbvtk
183
184