X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk_creaVtk_PKG%2Fsrc%2FbbcreaVtkScalarsToColors.cxx;h=871319a1f1b6ecc7e1121cee11612110a26cc9eb;hb=refs%2Fheads%2Fvtk8itk4wx3-mingw64;hp=f3c8c99a6970658ca415372ebb89ab2528107d33;hpb=b14773c04cfae41766a01441d155225c9fc4668f;p=creaVtk.git diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkScalarsToColors.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkScalarsToColors.cxx index f3c8c99..871319a 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkScalarsToColors.cxx +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkScalarsToColors.cxx @@ -4,9 +4,205 @@ #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: ["<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 +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(input[0]); + diry = static_cast(input[1]); + dirz = static_cast(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(input[0]); // red + *output++ = static_cast(input[1]); // green + *output++ = static_cast(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(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); //===== @@ -30,54 +226,50 @@ void ScalarsToColors::Process() // bbSetOutputOut( bbGetInputIn() ); // std::cout << "Output value = " <SetRange( bbGetInputRange()[0],bbGetInputRange()[1]); -// _colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]); + colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]); +// colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]); } else { - _colorLookupTable->SetRange(0,255); + colorLookupTable->SetRange(0,255); } - _colorLookupTable->SetNumberOfTableValues(1000); - _colorLookupTable->Build(); + colorLookupTable->SetNumberOfTableValues(1000); + colorLookupTable->Build(); double rgba1[4]; double rgba2[4]; int iLookTable; for (iLookTable = 0; iLookTable<500; 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(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]); } // for iLookTable double rgba[4]; - _colorLookupTable->GetTableValue(0,rgba); + colorLookupTable->GetTableValue(0,rgba); rgba[3]=0; - _colorLookupTable->SetTableValue(0,rgba); - + colorLookupTable->SetTableValue(0,rgba); int i,iMax; - iMax=(1000/16)*4; for (i=0;iGetTableValue(500+i, rgba); + colorLookupTable->GetTableValue(500+i, rgba); rgba[3]=(double)i/(double)iMax; - _colorLookupTable->SetTableValue(500+i,rgba); - _colorLookupTable->GetTableValue(500-i, rgba); + colorLookupTable->SetTableValue(500+i,rgba); + colorLookupTable->GetTableValue(500-i, rgba); rgba[3]=(double)i/(double)iMax; - _colorLookupTable->SetTableValue(500-i,rgba); - + colorLookupTable->SetTableValue(500-i,rgba); } // for - - /* iMax=100; for (i=0;iSetTableValue(500-i,rgba); } // for */ - - - + _scalarstocolors = colorLookupTable; } // if Type 0 //EED 2018-06-8 ***********************ARDS Projet*********************************************** if (bbGetInputType()==1) { - _colorLookupTable = vtkLookupTable::New(); + vtkLookupTable *colorLookupTable = vtkLookupTable::New(); if (bbGetInputRange().size()==2) { - _colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]); -// _colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]); + colorLookupTable->SetRange( bbGetInputRange()[0],bbGetInputRange()[1]); +// colorLookupTable->SetTableRange( bbGetInputRange()[0],bbGetInputRange()[1]); } else { - _colorLookupTable->SetRange(0,255); + 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(); + 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); + colorLookupTable->GetTableValue(0,rgba); rgba[3]=0; - _colorLookupTable->SetTableValue(0,rgba); - } // IF + colorLookupTable->SetTableValue(0,rgba); + _scalarstocolors = colorLookupTable; + } // If Type 1 + 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 + } // firsttime double rgb[3]; std::vectorcolorRGB; - _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); + bbSetOutputLookupTable( _scalarstocolors ); + +printf("EED ScalarsToColors::Process End\n"); -printf("EED ScalarsToColors::Process End\n"); } //===== @@ -160,9 +366,8 @@ void ScalarsToColors::bbUserSetDefaultValues() 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)