#include "bbcreaVtkScalarsToColors.h"
#include "bbcreaVtkPackage.h"
+#include "vtkLookupTable.h"
+#include "vtkObjectFactory.h"
+
namespace bbcreaVtk
{
+class /*VTK_COMMON_EXPORT*/ vtkLookupTableDirectionVector2 : public vtkScalarsToColors
+{
+public:
+ // Description:
+ // Construct with range=[0,1]; and hsv ranges set up for rainbow color table
+ // (from red to blue).
+ static vtkLookupTableDirectionVector2 *New();
+ vtkTypeMacro(vtkLookupTableDirectionVector2,vtkScalarsToColors);
+ void PrintSelf(ostream& os, vtkIndent indent);
+ double *GetRange() { return this->GetTableRange(); };
+ void SetRange(double min, double max) { this->SetTableRange(min, max); };
+ void SetRange(double rng[2]) { this->SetRange(rng[0], rng[1]); };
+ void SetTableRange(double r[2]);
+ virtual void SetTableRange(double min, double max);
+ vtkGetVectorMacro(TableRange,double,2);
+ unsigned char *MapValue(double v);
+ void GetColor(double x, double rgb[3]);
+ void MapScalarsThroughTable2(void *input, unsigned char *output,
+ int inputDataType, int numberOfValues,
+ int inputIncrement, int outputIncrement);
+ void SetTypeTable( int typetable );
+protected:
+ double TableRange[2];
+ vtkLookupTableDirectionVector2(int sze=256, int ext=256);
+ ~vtkLookupTableDirectionVector2();
+private:
+ int TypeTable; //EED
+ vtkLookupTableDirectionVector2(const vtkLookupTableDirectionVector2&); // Not implemented.
+ void operator=(const vtkLookupTableDirectionVector2&); // Not implemented.
+};
+
+
+
+
+vtkStandardNewMacro(vtkLookupTableDirectionVector2);
+
+// Construct with range=(0,1); and hsv ranges set up for rainbow color table
+// (from red to blue).
+vtkLookupTableDirectionVector2::vtkLookupTableDirectionVector2(int sze, int ext)
+{
+ this->TableRange[0] = 0.0;
+ this->TableRange[1] = 1.0;
+ TypeTable=0;
+}
+
+//----------------------------------------------------------------------------
+vtkLookupTableDirectionVector2::~vtkLookupTableDirectionVector2()
+{
+}
+
+unsigned char *vtkLookupTableDirectionVector2::MapValue(double v)
+{
+
+ //int idx = this->GetIndex(v);
+ //return (this->Table->GetPointer(0) + 4*idx);
+ return 0;
+}
+
+void vtkLookupTableDirectionVector2::GetColor(double v, double rgb[3])
+{
+// unsigned char *rgb8 = this->MapValue(v);
+// rgb[0] = rgb8[0]/255.0;
+// rgb[1] = rgb8[1]/255.0;
+// rgb[2] = rgb8[2]/255.0;
+
+ rgb[0] = 1;
+ rgb[1] = 1;
+ rgb[2] = 0;
+}
+
+
+void vtkLookupTableDirectionVector2::SetTableRange(double r[2])
+{
+ this->SetTableRange(r[0],r[1]);
+}
+
+void vtkLookupTableDirectionVector2::SetTypeTable( int typetable )
+{
+ TypeTable=typetable;
+}
+
+//----------------------------------------------------------------------------
+// Set the minimum/maximum scalar values for scalar mapping. Scalar values
+// less than minimum range value are clamped to minimum range value.
+// Scalar values greater than maximum range value are clamped to maximum
+// range value.
+void vtkLookupTableDirectionVector2::SetTableRange(double rmin, double rmax)
+{
+ if (rmax < rmin)
+ {
+ vtkErrorMacro("Bad table range: ["<<rmin<<", "<<rmax<<"]");
+ return;
+ }
+
+ if (this->TableRange[0] == rmin && this->TableRange[1] == rmax)
+ {
+ return;
+ }
+
+ this->TableRange[0] = rmin;
+ this->TableRange[1] = rmax;
+
+ this->Modified();
+}
+
+
+
+//----------------------------------------------------------------------------
+// Although this is a relatively expensive calculation,
+// it is only done on the first render. Colors are cached
+// for subsequent renders.
+template<class T>
+void vtkLookupTableMapDirVectorEED2(vtkLookupTableDirectionVector2 *self, T *input,
+ unsigned char *output, int length,
+ int inIncr, int outFormat,int TypeTable)
+{
+
+ if (TypeTable==0)
+ {
+ double sum;
+ int i;
+ double dirx,diry,dirz;
+ for (i = 0; i < length; ++i)
+ {
+ dirx = static_cast<T>(input[0]);
+ diry = static_cast<T>(input[1]);
+ dirz = static_cast<T>(input[2]);
+ input = input+inIncr;
+ sum = sqrt( dirx*dirx + diry*diry + dirz*dirz );
+ *output++ = (unsigned char) abs( (255*dirx/sum) );
+ *output++ = (unsigned char) abs( (255*diry/sum) );
+ *output++ = (unsigned char) abs( (255*dirz/sum) );
+ *output++ = 255;
+ // printf("%d %d %d ",(int)(255*dirx/sum),(int)(255*diry/sum),(int)(255*dirz/sum));
+ // printf(" C %d %f %f %f \n",inIncr,dirx,diry,dirz);
+
+ } // for
+ } // typeTable == 0
+
+ if (TypeTable==1)
+ {
+ int i;
+ for (i = 0; i < length; ++i)
+ {
+ *output++ = static_cast<T>(input[0]); // red
+ *output++ = static_cast<T>(input[1]); // green
+ *output++ = static_cast<T>(input[2]); // blue
+// *output++ = 255;
+ input = input+inIncr;
+ } // for
+ } // typeTable == 1
+
+
+}
+
+
+//----------------------------------------------------------------------------
+void vtkLookupTableDirectionVector2::MapScalarsThroughTable2(void *input,
+ unsigned char *output,
+ int inputDataType,
+ int numberOfValues,
+ int inputIncrement,
+ int outputFormat)
+{
+// if (this->UseMagnitude && inputIncrement > 1)
+// {
+ switch (inputDataType)
+ {
+ vtkTemplateMacro( vtkLookupTableMapDirVectorEED2(this,static_cast<VTK_TT*>(input),output,
+ numberOfValues,inputIncrement,outputFormat,TypeTable);
+ return
+ );
+ case VTK_BIT:
+ vtkErrorMacro("Cannot comput magnitude of bit array.");
+ break;
+ default:
+ vtkErrorMacro(<< "MapImageThroughTable: Unknown input ScalarType");
+ } /// switch
+// } //if
+}
+
+
+//----------------------------------------------------------------------------
+void vtkLookupTableDirectionVector2::PrintSelf(ostream& os, vtkIndent indent)
+{
+ this->Superclass::PrintSelf(os,indent);
+}
+
+
+
+
+
+
BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaVtk,ScalarsToColors)
BBTK_BLACK_BOX_IMPLEMENTATION(ScalarsToColors,bbtk::AtomicBlackBox);
//=====
// bbSetOutputOut( bbGetInputIn() );
// std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
- if (firsttime==true)
- {
- firsttime=false;
+// if (firsttime==true)
+// {
+// firsttime=false;
// Create the color map
- if (bbGetInputType()==0)
+ if ((bbGetInputType()==0) || (bbGetInputType()==100) )
{
- _colorLookupTable = vtkLookupTable::New();
- _colorLookupTable->Build();
- double rgba1[4];
- double rgba2[4];
- for (int iLookTable = 0; iLookTable<128; iLookTable++)
- {
- _colorLookupTable->GetTableValue( iLookTable, rgba1);
- _colorLookupTable->GetTableValue(256-1-iLookTable, rgba2);
-
- _colorLookupTable->SetTableValue(256-1-iLookTable , rgba1[0],rgba1[1],rgba1[2],rgba1[3]);
- _colorLookupTable->SetTableValue( iLookTable , rgba2[0],rgba2[1],rgba2[2],rgba2[3]);
+ vtkLookupTable *colorLookupTable = vtkLookupTable::New();
+ if (bbGetInputRange().size()==2)
+ {
+ colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]);
+// colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]);
+ colorLookupTable->SetBelowRangeColor(1,1,1,0); // White transparent
+ colorLookupTable->SetAboveRangeColor(1,1,1,0); // White transparent
+ colorLookupTable->UseBelowRangeColorOn();
+ colorLookupTable->UseAboveRangeColorOn();
+ } else {
+ colorLookupTable->SetRange(0,255);
+ }
+ int NumberOfColors=1000;
+ int NumberOfColorsHalf=NumberOfColors/2;
+ colorLookupTable->SetNumberOfTableValues( NumberOfColors );
+ colorLookupTable->Build();
+ double rgba1[4];
+ double rgba2[4];
+ int iLookTable;
+ for (iLookTable = 0; iLookTable<NumberOfColorsHalf; iLookTable++)
+ {
+ colorLookupTable->GetTableValue( iLookTable, rgba1 );
+ colorLookupTable->GetTableValue(NumberOfColors-1-iLookTable, rgba2 );
+ colorLookupTable->SetTableValue(NumberOfColors-1-iLookTable, rgba1[0],rgba1[1],rgba1[2],rgba1[3] );
+ colorLookupTable->SetTableValue( iLookTable, rgba2[0],rgba2[1],rgba2[2],rgba2[3] );
} // for iLookTable
- } // if
- } // firsttime
-
- if (bbGetInputRange().size()==2)
- {
- _colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]);
- } else {
- _colorLookupTable->SetTableRange( 0,1 );
- }
-
- double rgb[3];
- _colorLookupTable->GetColor( bbGetInputScalarValue() , rgb );
- std::vector<double>colorRGB;
- colorRGB.push_back( rgb[0] );
- colorRGB.push_back( rgb[1] );
- colorRGB.push_back( rgb[2] );
-
- bbSetOutputColor( colorRGB );
- bbSetOutputLookupTable(_colorLookupTable);
-
+
+ // Transparency
+ if (bbGetInputType()==0)
+ {
+ // First Element
+ double rgba[4];
+ colorLookupTable->GetTableValue(0,rgba);
+ rgba[3]=0;
+ colorLookupTable->SetTableValue(0,rgba);
+
+ // Middle range
+ int i,iMax=(NumberOfColors/16)*4;
+ for (i=0;i<iMax;i++)
+ {
+ colorLookupTable->GetTableValue(NumberOfColorsHalf+i, rgba);
+ rgba[3]=(double)i/(double)iMax;
+ colorLookupTable->SetTableValue(NumberOfColorsHalf+i,rgba);
+ colorLookupTable->GetTableValue(NumberOfColorsHalf-i, rgba);
+ rgba[3]=(double)i/(double)iMax;
+ colorLookupTable->SetTableValue(NumberOfColorsHalf-i,rgba);
+ } // for
+ } //if Type 0
+
+ colorLookupTable->Modified();
+ _scalarstocolors = colorLookupTable;
+ } // if Type 0 || 100
+
+//EED 2018-06-8 ***********************ARDS Projet***********************************************
+ if ((bbGetInputType()==1) || (bbGetInputType()==101) )
+ {
+ vtkLookupTable *colorLookupTable = vtkLookupTable::New();
+ if (bbGetInputRange().size()==2)
+ {
+ colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]);
+// colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]);
+ colorLookupTable->SetBelowRangeColor(1,1,1,0); // White transparent
+ colorLookupTable->SetAboveRangeColor(1,1,1,0); // White transparent
+ colorLookupTable->UseBelowRangeColorOn();
+ colorLookupTable->UseAboveRangeColorOn();
+
+ } else {
+ colorLookupTable->SetRange(0,255);
+ }
+ colorLookupTable->SetValueRange(0.0, 1.0); // from black to white
+ colorLookupTable->SetSaturationRange(0.0, 0.0); // no color saturation
+ colorLookupTable->SetRampToLinear();
+ colorLookupTable->Build();
+ // Transparency
+ if (bbGetInputType()==1)
+ {
+ // First Element
+ double rgba[4];
+ colorLookupTable->GetTableValue(0,rgba);
+ rgba[3]=0;
+ colorLookupTable->SetTableValue(0,rgba);
+ } // if Type 1
+ _scalarstocolors = colorLookupTable;
+ } // If Type 1 || 101
+
+
+ if (bbGetInputType()==2) // Direction Color Vector
+ {
+ vtkLookupTableDirectionVector2 *_LutEED = vtkLookupTableDirectionVector2::New();
+ _LutEED->SetVectorModeToRGBColors();
+ _LutEED->SetTypeTable(0);
+ _scalarstocolors = _LutEED;
+ } // If Type 2
+
+ if (bbGetInputType()==3) // Componets image rgb [0 255]
+ {
+ vtkLookupTableDirectionVector2 *_LutEED = vtkLookupTableDirectionVector2::New();
+ _LutEED->SetVectorModeToRGBColors();
+ _LutEED->SetTypeTable(1); // for components image
+ _scalarstocolors = _LutEED;
+ } // If Type 3
+
+
+// } // firsttime
+ double rgb[3];
+ std::vector<double>colorRGB;
+ _scalarstocolors->GetColor( bbGetInputScalarValue() , rgb );
+ colorRGB.push_back( rgb[0] );
+ colorRGB.push_back( rgb[1] );
+ colorRGB.push_back( rgb[2] );
+ bbSetOutputColor( colorRGB );
+ bbSetOutputLookupTable( _scalarstocolors );
+
+
}
//=====
// 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)
range.push_back( 1 );
bbSetInputRange(range);
bbSetInputScalarValue(0);
- firsttime=true;
-
- _colorLookupTable=NULL;
+// firsttime = true;
+ _scalarstocolors = NULL;
}
//=====
// 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)