]> Creatis software - bbtk.git/blob - packages/vtk/src/bbvtkSurfaceTexture.cxx
12d32b03aeed898588478a3b1bc4693d72755962
[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 printf("EED SurfaceTexture::Process Start\n");
37
38         int i;
39         double spc[3];
40         double range[2];
41         int ext[6];
42         bbGetInputImage()->GetSpacing(spc);
43         bbGetInputImage()->GetScalarRange(range);
44         bbGetInputImage()->GetWholeExtent(ext);
45         int maxX = ext[1]-ext[0]+1;
46         int maxY = ext[3]-ext[2]+1;
47         int maxZ = ext[5]-ext[4]+1;
48         
49         if (firsttime==true)
50         {
51                 firsttime=false;
52                 // Generate the colors for each point based on the color map
53                 colors = vtkUnsignedCharArray::New(); 
54                 colors->SetNumberOfComponents(3);
55                 colors->SetName("Colors");
56                 
57                 // Create the color map
58                 if (bbGetInputColorType()==1)
59                 {
60                         colorLookupTableWL = vtkWindowLevelLookupTable::New();
61                         colorLookupTable=colorLookupTableWL;
62                 } else {
63                         colorLookupTable = vtkLookupTable::New();
64                 }
65                 colorLookupTable->SetTableRange(range[0],range[1]);
66                 colorLookupTable->Build();
67                 double rgba1[4];
68                 double rgba2[4];
69                 for (int iLookTable = 0; iLookTable<128; iLookTable++)
70                 {
71                   colorLookupTable->GetTableValue(      iLookTable, rgba1);
72                   colorLookupTable->GetTableValue(256-1-iLookTable, rgba2);
73
74                   colorLookupTable->SetTableValue(256-1-iLookTable , rgba1[0],rgba1[1],rgba1[2],rgba1[3]);
75                   colorLookupTable->SetTableValue(      iLookTable , rgba2[0],rgba2[1],rgba2[2],rgba2[3]);
76                 } // for iLookTable
77
78         }
79
80
81
82         
83
84
85         bbGetInputMesh()->GetPointData()->SetScalars(colors);
86
87         if (bbGetInputColorType()==1)
88         {
89                 colorLookupTableWL->SetLevel( bbGetInputColorLevel() );
90                 colorLookupTableWL->SetWindow( bbGetInputColorWindow() );
91         }       
92                 
93     int missingpoints = bbGetInputMesh()->GetNumberOfPoints() - colors->GetDataSize()/colors->GetNumberOfComponents();
94         for(i = 0; i < missingpoints; i++)
95     {
96                 colors->InsertNextTuple3(0,0,0);
97         }       
98
99         if (bbGetInputTransform()!=NULL)
100         {
101                 bbGetInputTransform()->Update();
102         }
103         
104         unsigned short gl; 
105         double p1[3];
106         double p2[3];
107         double dcolor[3];
108         for(i = 0; i < bbGetInputMesh()->GetNumberOfPoints(); i++)
109     {
110                 if (bbGetInputTransform()!=NULL)
111                 {
112                         bbGetInputMesh()->GetPoint(i,p1);
113                         bbGetInputTransform()->TransformPoint(p1,p2);
114                 } else {
115                         bbGetInputMesh()->GetPoint(i,p2);
116                 }
117                 p2[0] = p2[0]/spc[0];
118                 p2[1] = p2[1]/spc[1];
119                 p2[2] = p2[2]/spc[2];   
120                 
121                 if ( (p2[0]>=0) && (p2[0]<maxX) && (p2[1]>=0) && (p2[1]<maxY) &&(p2[2]>=0) && (p2[2]<maxZ)  )
122                 {
123                    gl =  bbGetInputImage()->GetScalarComponentAsDouble(p2[0], p2[1], p2[2],0);
124                 } else {
125                         gl=0;
126                 }
127                 colorLookupTable->GetColor(gl, dcolor);
128                 colors->SetTuple3(i,255*dcolor[0],255*dcolor[1],255*dcolor[2]);         
129         } // for i
130         bbGetInputMesh()->Modified();   
131
132 }
133 //===== 
134 // 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)
135 //===== 
136 void SurfaceTexture::bbUserSetDefaultValues()
137 {
138
139 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
140 //    Here we initialize the input 'In' to 0
141         bbSetInputMesh(NULL);
142         bbSetInputImage(NULL);
143         bbSetInputColorType(0);
144         bbSetInputColorLevel(500);
145         bbSetInputColorWindow(500);
146         bbSetInputTransform(NULL);
147   
148         firsttime               = true;
149         colors                  = NULL;
150         colorLookupTable        = NULL;
151         colorLookupTableWL      = NULL;
152 }
153 //===== 
154 // 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)
155 //===== 
156 void SurfaceTexture::bbUserInitializeProcessing()
157 {
158
159 //  THE INITIALIZATION METHOD BODY :
160 //    Here does nothing 
161 //    but this is where you should allocate the internal/output pointers 
162 //    if any 
163
164   
165 }
166 //===== 
167 // 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)
168 //===== 
169 void SurfaceTexture::bbUserFinalizeProcessing()
170 {
171
172 //  THE FINALIZATION METHOD BODY :
173 //    Here does nothing 
174 //    but this is where you should desallocate the internal/output pointers 
175 //    if any
176   
177 }
178 }
179 // EO namespace bbvtk
180
181