+ delta = (maxTot - minTot)/GetBaseColorNb();
+ // By default, the histogram is split into BaseColorNb areas of equal width.
+ for (i = 0; i <= GetBaseColorNb() ; i ++)
+ {
+ _grey_level_boundary.push_back(minTot + i * delta);
+ } // for
+ } else {
+ delta = (maxTot - minTot)/(GetBaseColorNb()-1);
+ for (i = 0; i < GetBaseColorNb() ; i ++)
+ {
+ _grey_level_boundary.push_back(minTot + i * delta);
+ } // for
+ } // if
+}
+
+//----------------------------------------------------------------------------
+void ColorLayerImageView::SetDefaultBaseColorAndGreyLevelBoundary()
+{
+
+ // CM Sets the default behaviour concerning the lookup table.
+ _grey_level_boundary.clear();
+ _base_color.clear();
+ // Base colors are set to blue, yellow and red.
+ // Blue.
+ _base_color.push_back(0.0);
+ _base_color.push_back(0.0);
+ _base_color.push_back(0.5);
+
+ _base_color.push_back(0.0);
+ _base_color.push_back(0.0);
+ _base_color.push_back(1.0);
+
+ _base_color.push_back(0.0);
+ _base_color.push_back(1.0);
+ _base_color.push_back(1.0);
+
+ _base_color.push_back(1.0);
+ _base_color.push_back(1.0);
+ _base_color.push_back(0.0);
+
+ _base_color.push_back(1.0);
+ _base_color.push_back(0.0);
+ _base_color.push_back(0.0);
+
+ _base_color.push_back(0.5);
+ _base_color.push_back(0.0);
+ _base_color.push_back(0.0);
+
+
+ // This avoids a potential division by 0 through delta during the lookup table configuration.
+ if (_range[1]==0)
+ {
+ _range[1]=255;
+ }
+
+// double minTot = floor (_range[0]);
+// double maxTot = ceil (_range[1]);
+ double minTot = _range[0];
+ double maxTot = _range[1];
+
+ double delta = (maxTot - minTot)/8.0;
+ // By default, the histogram is split into three areas of equal width.
+
+ _grey_level_boundary.push_back(minTot + delta*0);
+ _grey_level_boundary.push_back(minTot + delta*1);
+// _grey_level_boundary.push_back(minTot + delta*2);
+ _grey_level_boundary.push_back(minTot + delta*3);
+// _grey_level_boundary.push_back(minTot + delta*4);
+ _grey_level_boundary.push_back(minTot + delta*5);
+ // _grey_level_boundary.push_back(minTot + delta*6);
+ _grey_level_boundary.push_back(minTot + delta*7);
+ _grey_level_boundary.push_back(minTot + delta*8);
+}
+
+//----------------------------------------------------------------------------
+void ColorLayerImageView::ConfigLookupTable() // virtual
+{
+
+ // CM 2014
+ // EED 28/01/2015
+ // Grey level extrema retrieved from the image grey level extrema.
+//EED 20 oct 2015
+// GetImage()->GetScalarRange(_range);
+ GetImageScalarRange();
+ double minRange = _range[0];
+ double maxRange = _range[1];
+
+ // ------------------ Setting Default Values
+ // Checks the size consistency of vectors _base_color and _grey_level_boundary.
+ // In case of inconsistency, an exception should be thrown. Instead, the default values are set.
+
+ if (GetBaseColorNb() == 0)
+ {
+ SetDefaultBaseColorAndGreyLevelBoundary();
+ } else { // If at least one color has been set, set the grey level boundaries to build an equipartition of the image grey levels, keeping the base colors defined.
+ if (_color_type==true) // Plain
+ {
+ if (GetBaseColorNb() != (int)_grey_level_boundary.size()-1)
+ {
+//EED std::cout << "CM ColorLayerImageView::ConfigLookupTable : ERROR!!! Inconsistency between the sizes of vectors _base_color and _grey_level_boundary. _base_color.size()/3 (=" <<_base_color.size()/3 << ") should be equal to _grey_level_boundary.size()+1 (=" << _grey_level_boundary.size()<<"+1)." << std::endl;
+//EED std::cout << "CM The default values for the base colors and the grey level boundaries will be set." << std::endl;
+ SetDefaultGreyLevelBoundary();
+ } // if
+ } // _color_type
+
+ if (_color_type==false) // Gradiant
+ {
+ if (GetBaseColorNb() != (int)_grey_level_boundary.size())
+ {
+//EED std::cout << "CM ColorLayerImageView::ConfigLookupTable : ERROR!!! Inconsistency between the sizes of vectors _base_color and _grey_level_boundary. _base_color.size()/3 (=" <<_base_color.size()/3 << ") should be equal to _grey_level_boundary.size() (=" << _grey_level_boundary.size()<<")." << std::endl;
+//EED std::cout << "CM The default values for the base colors and the grey level boundaries will be set." << std::endl;
+ SetDefaultGreyLevelBoundary();
+ } // if
+ } // _color_type
+
+ }
+ // ------------------ End Of Setting Default Values
+
+ int iTransparence,transparenceSize = _transparence_level_boundary.size();
+ for (iTransparence=transparenceSize ; iTransparence < GetBaseColorNb(); iTransparence++ )
+ {
+ _transparence_level_boundary.push_back(1);
+ }
+
+
+ // ------------------ Defining the Threshold Table
+ vtkLookupTable* thresholdTable = GetThresholdTable();
+
+ double thresholdTable_range[2];
+ double r1,r2,g1,g2,b1,b2,t1,t2;
+ int start,end;
+
+ // CM Number of table values consistent with the effective number of values (see loop below).
+ thresholdTable_range[1]= std::max( GetGreyLevelBoundaries( _grey_level_boundary.size()-1 ) , ceil(maxRange) );
+ thresholdTable_range[0]= std::min( GetGreyLevelBoundaries(0), floor(minRange) );
+
+ thresholdTable_range[1]= GetGreyLevelBoundaries( _grey_level_boundary.size()-1 );
+ thresholdTable_range[0]= GetGreyLevelBoundaries(0);
+
+ thresholdTable->SetTableRange(thresholdTable_range);
+ thresholdTable->SetAlphaRange( 0,1 );
+ thresholdTable->SetValueRange( 0,1 );
+
+ thresholdTable->SetSaturationRange( 0,0 );
+ thresholdTable->SetRampToLinear( );
+
+ maxColorsThresholdTable = 1000;
+ thresholdTable->SetNumberOfTableValues( maxColorsThresholdTable+1 );
+ thresholdTable->SetNanColor(0,0,0,0);
+
+
+ // Defines the lookup table.
+ // If the image has a degradation in one (or both) extremum (lower or higher),
+ // sets the corresponding grey levels as transparent white in the lookup table.
+
+ // _color_type true, i.e. plain colors.
+ // Sets the plain color for each grey level interval.
+ if (_color_type) // Plain
+ {
+ if ( minRange<GetGreyLevelBoundaries(0) )
+ {
+ start = 0;
+ end = GrayLevel_TO_colorTableIndex( GetGreyLevelBoundaries(0) );
+ FillColorTable(start,end, 0,0,0, 0,0,0, 0,0);
+ }
+
+ if ( maxRange>GetGreyLevelBoundaries( _grey_level_boundary.size()-1 ) )
+ {
+ start = GrayLevel_TO_colorTableIndex( GetGreyLevelBoundaries( _grey_level_boundary.size()-1 ) );
+ end = GrayLevel_TO_colorTableIndex( maxRange );
+ FillColorTable(start,end, 0,0,0, 0,0,0, 0,0);
+ }
+ for (int iColor = 0; iColor < GetBaseColorNb(); iColor++)