//===== // 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) //===== #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); //===== // 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::Process() { // THE MAIN PROCESSING METHOD BODY // Here we simply set the input 'In' value to the output 'Out' // And print out the output value // INPUT/OUTPUT ACCESSORS ARE OF THE FORM : // void bbSet{Input|Output}NAME(const TYPE&) // const TYPE& bbGet{Input|Output}NAME() const // Where : // * NAME is the name of the input/output // (the one provided in the attribute 'name' of the tag 'input') // * TYPE is the C++ type of the input/output // (the one provided in the attribute 'type' of the tag 'input') // bbSetOutputOut( bbGetInputIn() ); // std::cout << "Output value = " <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; iLookTableGetTableValue( 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 // 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;iGetTableValue(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::vectorcolorRGB; _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) //===== void ScalarsToColors::bbUserSetDefaultValues() { // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX // Here we initialize the input 'In' to 0 bbSetInputType(0); std::vectorrange; range.push_back( 0 ); range.push_back( 1 ); bbSetInputRange(range); bbSetInputScalarValue(0); // 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 } //===== // 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