From 41887020212dbf73ca6c182e5aafab6b0ea596a3 Mon Sep 17 00:00:00 2001 From: Eduardo DAVILA Date: Mon, 17 Feb 2020 13:52:54 +0100 Subject: [PATCH] #3363 creaMaracasVisu Feature New - Normal ViewerNV with color RGB images --- .../bbcreaMaracasVisuReadCreaContourFile.cxx | 2 +- .../wxWindows/widgets/vtkImageViewer2_XYZ.cxx | 205 +++++++++++++++++- .../wxWindows/widgets/vtkImageViewer2_XYZ.h | 9 +- 3 files changed, 206 insertions(+), 10 deletions(-) diff --git a/bbtk/src/bbcreaMaracasVisuReadCreaContourFile.cxx b/bbtk/src/bbcreaMaracasVisuReadCreaContourFile.cxx index 202e5cb..a3fafa0 100644 --- a/bbtk/src/bbcreaMaracasVisuReadCreaContourFile.cxx +++ b/bbtk/src/bbcreaMaracasVisuReadCreaContourFile.cxx @@ -79,7 +79,7 @@ void ReadCreaContourFile::Process() fscanf(ff,"%s",tmp); // fscanf(ff,"%s",tmp); // TypeModel fscanf(ff,"%d",&TypeModel); // - if (TypeModel==1) + if ((TypeModel==1) || (TypeModel==6) ) { fscanf(ff,"%s",tmp); // NumberOfControlPoints fscanf(ff,"%d",&NumberOfControlPoints); // diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkImageViewer2_XYZ.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkImageViewer2_XYZ.cxx index 69a183f..b03173e 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkImageViewer2_XYZ.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkImageViewer2_XYZ.cxx @@ -27,12 +27,183 @@ #include "vtkRenderer.h" #include "vtkImageActor.h" #include "vtkImageData.h" + + + +#include "vtkLookupTable.h" +#include "vtkObjectFactory.h" + +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); + +protected: + double TableRange[2]; + vtkLookupTableDirectionVector2(int sze=256, int ext=256); + ~vtkLookupTableDirectionVector2(); + +private: + 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; +} + +//---------------------------------------------------------------------------- +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]); +} + +//---------------------------------------------------------------------------- +// 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 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 + +} + + +//---------------------------------------------------------------------------- +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); + 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); +} + + + + //------------------------------------------------------------------- //------------------------------------------------------------------- //------------------------------------------------------------------- vtkImageViewer2_XYZ::vtkImageViewer2_XYZ() { - _vtkimageviewer2= vtkImageViewer2::New(); + _vtkimageviewer2 = vtkImageViewer2::New(); _vtkimageviewer2->GetRenderer()->GradientBackgroundOn(); _vtkimageviewer2->GetRenderer()->SetBackground( 0.33 , 0.33 , 0.33 ); _vtkimageviewer2->GetRenderer()->SetBackground2( 0.66 , 0.66 , 0.66 ); @@ -112,13 +283,37 @@ vtkImageViewer2 *vtkImageViewer2_XYZ::GetVtkImageViewer2() { return _vtkimageviewer2; } + //------------------------------------------------------------------- void vtkImageViewer2_XYZ::setColorTransferFunction(vtkColorTransferFunction* colortable) { - vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _vtkimageviewer2->GetWindowLevel(); - if(colortable!=NULL&&colortable->GetSize()>0 && _colortable != colortable) + if(colortable!=NULL && colortable->GetSize()>0 && _colortable!=colortable) + { + _colortable = colortable; + vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _vtkimageviewer2->GetWindowLevel(); + imagemaptowindowlevel->SetLookupTable(_colortable); + } // if colortable +} + +//------------------------------------------------------------------- +void vtkImageViewer2_XYZ::setScalarsToColors(vtkScalarsToColors* colortable, int outputformat) +{ +/* outputformat VTK-8.1.1/Common/Core/vtkSystemIncludes.h + VTK_LUMINANCE 1 + VTK_LUMINANCE_ALPHA 2 + VTK_RGB 3 + VTK_RGBA 4 +*/ + if( _colortable!=colortable) { _colortable = colortable; - imagemaptowindowlevel->SetLookupTable(colortable); - } + _vtkimageviewer2->GetWindowLevel()->SetOutputFormat( outputformat ); + _vtkimageviewer2->GetWindowLevel()->SetLookupTable(colortable); +// _vtkimageviewer2->GetWindowLevel()->SetOutputFormatToRGB(); +// vtkLookupTableDirectionVector2 *_LutEED = vtkLookupTableDirectionVector2::New(); +// _LutEED->SetVectorModeToRGBColors(); +// _vtkimageviewer2->GetWindowLevel()->SetLookupTable(_LutEED); + } // if colortable } + + diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkImageViewer2_XYZ.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkImageViewer2_XYZ.h index 82acd44..b20ea78 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkImageViewer2_XYZ.h +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkImageViewer2_XYZ.h @@ -46,12 +46,13 @@ public: int GetXSlice(); int GetYSlice(); int GetZSlice(); - void setColorTransferFunction(vtkColorTransferFunction* colortable); + void setColorTransferFunction(vtkColorTransferFunction* colortable); + void setScalarsToColors(vtkScalarsToColors* colortable, int outputformat); vtkImageViewer2 *GetVtkImageViewer2(); private: - int _x1,_x2,_y1,_y2,_z1,_z2; - vtkImageViewer2 *_vtkimageviewer2; - vtkColorTransferFunction* _colortable; + int _x1,_x2,_y1,_y2,_z1,_z2; + vtkImageViewer2 *_vtkimageviewer2; + vtkScalarsToColors *_colortable; protected: }; -- 2.47.1