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)
4 #include "bbcreaVtkScalarsToColors.h"
5 #include "bbcreaVtkPackage.h"
7 #include "vtkLookupTable.h"
8 #include "vtkObjectFactory.h"
13 class /*VTK_COMMON_EXPORT*/ vtkLookupTableDirectionVector2 : public vtkScalarsToColors
17 // Construct with range=[0,1]; and hsv ranges set up for rainbow color table
18 // (from red to blue).
19 static vtkLookupTableDirectionVector2 *New();
20 vtkTypeMacro(vtkLookupTableDirectionVector2,vtkScalarsToColors);
21 void PrintSelf(ostream& os, vtkIndent indent);
22 double *GetRange() { return this->GetTableRange(); };
23 void SetRange(double min, double max) { this->SetTableRange(min, max); };
24 void SetRange(double rng[2]) { this->SetRange(rng[0], rng[1]); };
25 void SetTableRange(double r[2]);
26 virtual void SetTableRange(double min, double max);
27 vtkGetVectorMacro(TableRange,double,2);
28 unsigned char *MapValue(double v);
29 void GetColor(double x, double rgb[3]);
30 void MapScalarsThroughTable2(void *input, unsigned char *output,
31 int inputDataType, int numberOfValues,
32 int inputIncrement, int outputIncrement);
33 void SetTypeTable( int typetable );
36 vtkLookupTableDirectionVector2(int sze=256, int ext=256);
37 ~vtkLookupTableDirectionVector2();
40 vtkLookupTableDirectionVector2(const vtkLookupTableDirectionVector2&); // Not implemented.
41 void operator=(const vtkLookupTableDirectionVector2&); // Not implemented.
47 vtkStandardNewMacro(vtkLookupTableDirectionVector2);
49 // Construct with range=(0,1); and hsv ranges set up for rainbow color table
50 // (from red to blue).
51 vtkLookupTableDirectionVector2::vtkLookupTableDirectionVector2(int sze, int ext)
53 this->TableRange[0] = 0.0;
54 this->TableRange[1] = 1.0;
58 //----------------------------------------------------------------------------
59 vtkLookupTableDirectionVector2::~vtkLookupTableDirectionVector2()
63 unsigned char *vtkLookupTableDirectionVector2::MapValue(double v)
66 //int idx = this->GetIndex(v);
67 //return (this->Table->GetPointer(0) + 4*idx);
71 void vtkLookupTableDirectionVector2::GetColor(double v, double rgb[3])
73 // unsigned char *rgb8 = this->MapValue(v);
74 // rgb[0] = rgb8[0]/255.0;
75 // rgb[1] = rgb8[1]/255.0;
76 // rgb[2] = rgb8[2]/255.0;
84 void vtkLookupTableDirectionVector2::SetTableRange(double r[2])
86 this->SetTableRange(r[0],r[1]);
89 void vtkLookupTableDirectionVector2::SetTypeTable( int typetable )
94 //----------------------------------------------------------------------------
95 // Set the minimum/maximum scalar values for scalar mapping. Scalar values
96 // less than minimum range value are clamped to minimum range value.
97 // Scalar values greater than maximum range value are clamped to maximum
99 void vtkLookupTableDirectionVector2::SetTableRange(double rmin, double rmax)
103 vtkErrorMacro("Bad table range: ["<<rmin<<", "<<rmax<<"]");
107 if (this->TableRange[0] == rmin && this->TableRange[1] == rmax)
112 this->TableRange[0] = rmin;
113 this->TableRange[1] = rmax;
120 //----------------------------------------------------------------------------
121 // Although this is a relatively expensive calculation,
122 // it is only done on the first render. Colors are cached
123 // for subsequent renders.
125 void vtkLookupTableMapDirVectorEED2(vtkLookupTableDirectionVector2 *self, T *input,
126 unsigned char *output, int length,
127 int inIncr, int outFormat,int TypeTable)
134 double dirx,diry,dirz;
135 for (i = 0; i < length; ++i)
137 dirx = static_cast<T>(input[0]);
138 diry = static_cast<T>(input[1]);
139 dirz = static_cast<T>(input[2]);
140 input = input+inIncr;
141 sum = sqrt( dirx*dirx + diry*diry + dirz*dirz );
142 *output++ = (unsigned char) abs( (255*dirx/sum) );
143 *output++ = (unsigned char) abs( (255*diry/sum) );
144 *output++ = (unsigned char) abs( (255*dirz/sum) );
146 // printf("%d %d %d ",(int)(255*dirx/sum),(int)(255*diry/sum),(int)(255*dirz/sum));
147 // printf(" C %d %f %f %f \n",inIncr,dirx,diry,dirz);
155 for (i = 0; i < length; ++i)
157 *output++ = static_cast<T>(input[0]); // red
158 *output++ = static_cast<T>(input[1]); // green
159 *output++ = static_cast<T>(input[2]); // blue
161 input = input+inIncr;
169 //----------------------------------------------------------------------------
170 void vtkLookupTableDirectionVector2::MapScalarsThroughTable2(void *input,
171 unsigned char *output,
177 // if (this->UseMagnitude && inputIncrement > 1)
179 switch (inputDataType)
181 vtkTemplateMacro( vtkLookupTableMapDirVectorEED2(this,static_cast<VTK_TT*>(input),output,
182 numberOfValues,inputIncrement,outputFormat,TypeTable);
186 vtkErrorMacro("Cannot comput magnitude of bit array.");
189 vtkErrorMacro(<< "MapImageThroughTable: Unknown input ScalarType");
195 //----------------------------------------------------------------------------
196 void vtkLookupTableDirectionVector2::PrintSelf(ostream& os, vtkIndent indent)
198 this->Superclass::PrintSelf(os,indent);
206 BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaVtk,ScalarsToColors)
207 BBTK_BLACK_BOX_IMPLEMENTATION(ScalarsToColors,bbtk::AtomicBlackBox);
209 // 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)
211 void ScalarsToColors::Process()
214 // THE MAIN PROCESSING METHOD BODY
215 // Here we simply set the input 'In' value to the output 'Out'
216 // And print out the output value
217 // INPUT/OUTPUT ACCESSORS ARE OF THE FORM :
218 // void bbSet{Input|Output}NAME(const TYPE&)
219 // const TYPE& bbGet{Input|Output}NAME() const
221 // * NAME is the name of the input/output
222 // (the one provided in the attribute 'name' of the tag 'input')
223 // * TYPE is the C++ type of the input/output
224 // (the one provided in the attribute 'type' of the tag 'input')
226 // bbSetOutputOut( bbGetInputIn() );
227 // std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
230 // if (firsttime==true)
233 // Create the color map
234 if ((bbGetInputType()==0) || (bbGetInputType()==100) )
236 vtkLookupTable *colorLookupTable = vtkLookupTable::New();
237 if (bbGetInputRange().size()==2)
239 colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]);
240 // colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]);
241 colorLookupTable->SetBelowRangeColor(1,1,1,0); // White transparent
242 colorLookupTable->SetAboveRangeColor(1,1,1,0); // White transparent
243 colorLookupTable->UseBelowRangeColorOn();
244 colorLookupTable->UseAboveRangeColorOn();
246 colorLookupTable->SetRange(0,255);
248 int NumberOfColors=1000;
249 int NumberOfColorsHalf=NumberOfColors/2;
250 colorLookupTable->SetNumberOfTableValues( NumberOfColors );
251 colorLookupTable->Build();
255 for (iLookTable = 0; iLookTable<NumberOfColorsHalf; iLookTable++)
257 colorLookupTable->GetTableValue( iLookTable, rgba1 );
258 colorLookupTable->GetTableValue(NumberOfColors-1-iLookTable, rgba2 );
259 colorLookupTable->SetTableValue(NumberOfColors-1-iLookTable, rgba1[0],rgba1[1],rgba1[2],rgba1[3] );
260 colorLookupTable->SetTableValue( iLookTable, rgba2[0],rgba2[1],rgba2[2],rgba2[3] );
264 if (bbGetInputType()==0)
268 colorLookupTable->GetTableValue(0,rgba);
270 colorLookupTable->SetTableValue(0,rgba);
273 int i,iMax=(NumberOfColors/16)*4;
276 colorLookupTable->GetTableValue(NumberOfColorsHalf+i, rgba);
277 rgba[3]=(double)i/(double)iMax;
278 colorLookupTable->SetTableValue(NumberOfColorsHalf+i,rgba);
279 colorLookupTable->GetTableValue(NumberOfColorsHalf-i, rgba);
280 rgba[3]=(double)i/(double)iMax;
281 colorLookupTable->SetTableValue(NumberOfColorsHalf-i,rgba);
285 colorLookupTable->Modified();
286 _scalarstocolors = colorLookupTable;
287 } // if Type 0 || 100
289 //EED 2018-06-8 ***********************ARDS Projet***********************************************
290 if ((bbGetInputType()==1) || (bbGetInputType()==101) )
292 vtkLookupTable *colorLookupTable = vtkLookupTable::New();
293 if (bbGetInputRange().size()==2)
295 colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]);
296 // colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]);
297 colorLookupTable->SetBelowRangeColor(1,1,1,0); // White transparent
298 colorLookupTable->SetAboveRangeColor(1,1,1,0); // White transparent
299 colorLookupTable->UseBelowRangeColorOn();
300 colorLookupTable->UseAboveRangeColorOn();
303 colorLookupTable->SetRange(0,255);
305 colorLookupTable->SetValueRange(0.0, 1.0); // from black to white
306 colorLookupTable->SetSaturationRange(0.0, 0.0); // no color saturation
307 colorLookupTable->SetRampToLinear();
308 colorLookupTable->Build();
310 if (bbGetInputType()==1)
314 colorLookupTable->GetTableValue(0,rgba);
316 colorLookupTable->SetTableValue(0,rgba);
318 _scalarstocolors = colorLookupTable;
319 } // If Type 1 || 101
322 if (bbGetInputType()==2) // Direction Color Vector
324 vtkLookupTableDirectionVector2 *_LutEED = vtkLookupTableDirectionVector2::New();
325 _LutEED->SetVectorModeToRGBColors();
326 _LutEED->SetTypeTable(0);
327 _scalarstocolors = _LutEED;
330 if (bbGetInputType()==3) // Componets image rgb [0 255]
332 vtkLookupTableDirectionVector2 *_LutEED = vtkLookupTableDirectionVector2::New();
333 _LutEED->SetVectorModeToRGBColors();
334 _LutEED->SetTypeTable(1); // for components image
335 _scalarstocolors = _LutEED;
341 std::vector<double>colorRGB;
342 _scalarstocolors->GetColor( bbGetInputScalarValue() , rgb );
343 colorRGB.push_back( rgb[0] );
344 colorRGB.push_back( rgb[1] );
345 colorRGB.push_back( rgb[2] );
346 bbSetOutputColor( colorRGB );
347 bbSetOutputLookupTable( _scalarstocolors );
352 // 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)
354 void ScalarsToColors::bbUserSetDefaultValues()
357 // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
358 // Here we initialize the input 'In' to 0
360 std::vector<double>range;
361 range.push_back( 0 );
362 range.push_back( 1 );
363 bbSetInputRange(range);
364 bbSetInputScalarValue(0);
366 _scalarstocolors = NULL;
369 // 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)
371 void ScalarsToColors::bbUserInitializeProcessing()
374 // THE INITIALIZATION METHOD BODY :
376 // but this is where you should allocate the internal/output pointers
382 // 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)
384 void ScalarsToColors::bbUserFinalizeProcessing()
387 // THE FINALIZATION METHOD BODY :
389 // but this is where you should desallocate the internal/output pointers
394 // EO namespace bbcreaVtk