#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;
-printf("EED ScalarsToColors::Process Start\n");
- 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();
+ vtkLookupTable *colorLookupTable = vtkLookupTable::New();
if (bbGetInputRange().size()==2)
{
- _colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]);
-// _colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]);
- } else {
- _colorLookupTable->SetRange(0,255);
+ colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]);
+// colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]);
+ } else if (bbGetInputWindowColorLevel().size()==2) {
+ double w = bbGetInputWindowColorLevel()[0] / 2;
+ double c = bbGetInputWindowColorLevel()[1];
+ colorLookupTable->SetRange( c-w , c+w );
+ }else {
+ colorLookupTable->SetRange(0,255);
}
- _colorLookupTable->SetNumberOfTableValues(1000);
- _colorLookupTable->Build();
+
+ colorLookupTable->UseBelowRangeColorOn();
+ colorLookupTable->UseAboveRangeColorOn();
+
+ int NumberOfColors=1000;
+ int NumberOfColorsHalf=NumberOfColors/2;
+ colorLookupTable->SetNumberOfTableValues( NumberOfColors );
+ colorLookupTable->Build();
double rgba1[4];
double rgba2[4];
int iLookTable;
- for (iLookTable = 0; iLookTable<500; iLookTable++)
+ for (iLookTable = 0; iLookTable<NumberOfColorsHalf; iLookTable++)
{
- _colorLookupTable->GetTableValue( iLookTable, rgba1);
- _colorLookupTable->GetTableValue(1000-1-iLookTable, rgba2);
- _colorLookupTable->SetTableValue(1000-1-iLookTable , rgba1[0],rgba1[1],rgba1[2],rgba1[3]);
- _colorLookupTable->SetTableValue( iLookTable , rgba2[0],rgba2[1],rgba2[2],rgba2[3]);
+ 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
- double rgba[4];
- _colorLookupTable->GetTableValue(0,rgba);
- rgba[3]=0;
- _colorLookupTable->SetTableValue(0,rgba);
-
- int i,iMax=200;
- for (i=0;i<iMax;i++)
- {
- _colorLookupTable->GetTableValue(500+100+i, rgba);
- rgba[3]=(double)i/(double)iMax;
- _colorLookupTable->SetTableValue(500+100+i,rgba);
- _colorLookupTable->GetTableValue(500-100-i, rgba);
- rgba[3]=(double)i/(double)iMax;
- _colorLookupTable->SetTableValue(500-100-i,rgba);
- } // for
-
- iMax=100;
- for (i=0;i<iMax;i++)
+
+ // Transparency
+ if (bbGetInputType()==0)
{
- _colorLookupTable->GetTableValue(500+i, rgba);
+ // First Element
+ double rgba[4];
+ colorLookupTable->GetTableValue(0,rgba);
rgba[3]=0;
- _colorLookupTable->SetTableValue(500+i,rgba);
- _colorLookupTable->GetTableValue(500-i, rgba);
- rgba[3]=0;
- _colorLookupTable->SetTableValue(500-i,rgba);
- } // for
+ colorLookupTable->SetTableValue(0,rgba);
- } // if Type 0
+ colorLookupTable->UseBelowRangeColorOn();
+ colorLookupTable->UseAboveRangeColorOn();
+ if (bbGetInputBelowAboveRangeTransparence()==true)
+ {
+ colorLookupTable->SetBelowRangeColor(1,1,1,0); // White transparent
+ colorLookupTable->SetAboveRangeColor(1,1,1,0); // White transparent
+ } else {
+ colorLookupTable->SetBelowRangeColor(0,0,0,1); // White transparent
+ colorLookupTable->SetAboveRangeColor(1,1,1,1); // White transparent
+ }
+
+ // 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)
+ if ((bbGetInputType()==1) || (bbGetInputType()==101) )
{
- _colorLookupTable = vtkLookupTable::New();
- if (bbGetInputRange().size()==2)
- {
- _colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]);
-// _colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]);
- } 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();
- double rgba[4];
- _colorLookupTable->GetTableValue(0,rgba);
- rgba[3]=0;
- _colorLookupTable->SetTableValue(0,rgba);
- } // IF
+ vtkLookupTable *colorLookupTable = vtkLookupTable::New();
+ if (bbGetInputRange().size()==2)
+ {
+ colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]);
+// colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]);
+ } else if (bbGetInputWindowColorLevel().size()==2) {
+ double w = bbGetInputWindowColorLevel()[0] / 2;
+ double c = bbGetInputWindowColorLevel()[1];
+ colorLookupTable->SetRange( c-w , c+w );
+ }else {
+ colorLookupTable->SetRange(0,255);
+ }
+
+ colorLookupTable->UseBelowRangeColorOn();
+ colorLookupTable->UseAboveRangeColorOn();
+ if (bbGetInputBelowAboveRangeTransparence()==true)
+ {
+ colorLookupTable->SetBelowRangeColor(1,1,1,0); // White transparent
+ colorLookupTable->SetAboveRangeColor(1,1,1,0); // White transparent
+ } else {
+ colorLookupTable->SetBelowRangeColor(0,0,0,1); // White transparent
+ colorLookupTable->SetAboveRangeColor(1,1,1,1); // White transparent
+ }
+ 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
- } // firsttime
+ 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;
- _colorLookupTable->GetColor( bbGetInputScalarValue() , rgb );
+ _scalarstocolors->GetColor( bbGetInputScalarValue() , rgb );
colorRGB.push_back( rgb[0] );
colorRGB.push_back( rgb[1] );
colorRGB.push_back( rgb[2] );
bbSetOutputColor( colorRGB );
- bbSetOutputLookupTable(_colorLookupTable);
-
-printf("EED ScalarsToColors::Process End\n");
-
+ 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)
//=====
void ScalarsToColors::bbUserSetDefaultValues()
{
-
// SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
// Here we initialize the input 'In' to 0
bbSetInputType(0);
- std::vector<double>range;
- range.push_back( 0 );
- range.push_back( 1 );
- bbSetInputRange(range);
+// std::vector<double>range;
+// range.push_back( 0 );
+// range.push_back( 1 );
+// bbSetInputRange(range);
bbSetInputScalarValue(0);
- firsttime=true;
-
- _colorLookupTable=NULL;
+ bbSetInputBelowAboveRangeTransparence(true);
+// 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)
//=====
void ScalarsToColors::bbUserInitializeProcessing()
{
-
// THE INITIALIZATION METHOD BODY :
// Here does nothing
// but this is where you should allocate the internal/output pointers
-// if any
-
-
+// if any
}
+
//=====
// 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)
//=====
void ScalarsToColors::bbUserFinalizeProcessing()
{
-
// THE FINALIZATION METHOD BODY :
// Here does nothing
// but this is where you should desallocate the internal/output pointers
// if any
-
}
-}
-// EO namespace bbcreaVtk
+
+}// EO namespace bbcreaVtk