+//----------------------------------------------------------------------------
+void ColorLayerImageView::SetDefaultGreyLevelBoundary()
+{
+ // CM Sets the default behaviour concerning the lookup table keeping the base colors already set.
+ _grey_level_boundary.clear();
+
+ // This avoids a potential division by 0 through delta during the lookup table configuration.
+ if (_range[1]==0)
+ {
+ _range[1]=255;
+ }
+
+ // Grey level extrema are set by default to the image grey level extrema.
+ int minTot = floor (_range[0]);
+ int maxTot = ceil (_range[1]);
+
+ _grey_level_boundary.push_back((double)minTot);
+
+ // By default, the histogram is split into BaseColorNb areas of equal width.
+ double delta = (maxTot - minTot)/GetBaseColorNb();
+ for (int i = 1; i <= GetBaseColorNb() ; i ++)
+ {
+ _grey_level_boundary.push_back((double)minTot + i * delta);
+ }
+}
+
+//----------------------------------------------------------------------------
+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(1.0);
+ // Yellow.
+ _base_color.push_back(1.0);
+ _base_color.push_back(1.0);
+ _base_color.push_back(0.0);
+ // Red.
+ _base_color.push_back(1.0);
+ _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;
+ }
+
+ int minTot = floor (_range[0]);
+ int maxTot = ceil (_range[1]);
+
+ _grey_level_boundary.push_back((double)minTot);
+
+ // By default, the histogram is split into three areas of equal width.
+ double delta = (maxTot - minTot)/3.0;
+ _grey_level_boundary.push_back(minTot + delta);
+ _grey_level_boundary.push_back(minTot + 2*delta);
+
+ _grey_level_boundary.push_back((double)maxTot);
+}
+
+//----------------------------------------------------------------------------
+void ColorLayerImageView::ConfigLookupTable() // virtual
+{
+ // CM
+ // Grey level extrema retrieved from the image grey level extrema.
+
+/*
+printf("ERROR: EED ColorLayerImageView::ConfigLookupTable ------_range----------------\n");
+ _range[0]=0;
+ _range[1]=4000;
+*/
+ GetImage()->GetScalarRange(_range);
+
+ // ------------------ 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();
+
+ // 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.
+ else
+ if (GetBaseColorNb() != (_grey_level_boundary.size() - 1) )
+ {
+ 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;
+ std::cout << "CM The default values for the base colors and the grey level boundaries will be set." << std::endl;
+ SetDefaultGreyLevelBoundary();
+ }
+ // ------------------ End Of Setting Default Values
+
+
+ // ------------------ Defining the Threshold Table
+ vtkLookupTable* thresholdTable = GetThresholdTable();
+
+ // CM Number of table values consistent with the effective number of values (see loop below).
+ double thresholdTable_range[2];
+ thresholdTable_range[1]= std::max( GetGreyLevelBoundaries( GetBaseColorNb() ), ceil(_range[1]) );
+ thresholdTable_range[0]= std::min( GetGreyLevelBoundaries(0), floor(_range[0]) );
+ thresholdTable->SetNumberOfTableValues(thresholdTable_range[1] - thresholdTable_range[0] + 1);
+ thresholdTable->SetTableRange(thresholdTable_range);
+ thresholdTable->SetAlphaRange(0, 1);
+ thresholdTable->SetValueRange(0, 1);
+ thresholdTable->SetSaturationRange(0, 0);
+ thresholdTable->SetRampToLinear( );
+
+ // 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.
+ for (int i = floor(_range[0]); i <= GetGreyLevelBoundaries(0); i++)
+ {
+ thresholdTable -> SetTableValue( i, 0, 0, 0, 0);
+ }
+ for (int i = GetGreyLevelBoundaries( GetBaseColorNb() ) + 1 ; i <= ceil(_range[1]); i++)
+ {
+ thresholdTable -> SetTableValue( i, 0, 0, 0, 0);
+ }
+
+ int delta;
+
+ // _color_type true, i.e. plain colors.
+ // Sets the plain color for each grey level interval.
+ if (_color_type)
+ {
+ for (int i = 0; i < GetBaseColorNb(); i++)
+ {
+ delta = GetGreyLevelBoundaries(i+1) - GetGreyLevelBoundaries(i);
+ for (int ii = 1; ii <= delta; ii++)
+ {
+ thresholdTable->SetTableValue(GetGreyLevelBoundaries(i) + ii,
+ GetBaseColors(i*3),
+ GetBaseColors(i*3 + 1),
+ GetBaseColors(i*3 + 2),
+ 1);
+ }
+ }
+ } // End Of if (_color_type)
+
+
+ // _color_type false, i.e. gradient color
+ else
+ {
+ // First color:
+ // Creates a linear range from white to the first color.
+ delta = GetGreyLevelBoundaries(1) - GetGreyLevelBoundaries(0);
+ for (int ii = 1; ii <= delta ; ii++)
+ {
+ thresholdTable->SetTableValue( GetGreyLevelBoundaries(0) + ii, GetBaseColors(0) * ii/delta,
+ GetBaseColors(1) * ii/delta, GetBaseColors(2) * ii/delta, 1);
+ }
+
+ // If other colors exist:
+ // Creates linear ranges between one color and the following in the color vector.
+ if (GetBaseColorNb() > 1)
+ {
+ for (int i = 1; i < GetBaseColorNb(); i++)
+ {
+ delta = GetGreyLevelBoundaries(i+1) - GetGreyLevelBoundaries(i);
+ for (int ii = 1; ii <= delta; ii++)
+ {
+ // Color computation : previous_color + (current_color - previous_color)/delta * ii
+ thresholdTable->SetTableValue(GetGreyLevelBoundaries(i) + ii,
+ GetBaseColors((i-1)*3) + (GetBaseColors(i*3) - GetBaseColors((i-1)*3)) / delta * ii ,
+ GetBaseColors((i-1)*3 + 1) + (GetBaseColors(i*3 + 1) - GetBaseColors((i-1)*3 + 1)) / delta * ii ,
+ GetBaseColors((i-1)*3 + 2) + (GetBaseColors(i*3 + 2) - GetBaseColors((i-1)*3 + 2)) / delta * ii ,
+ 1);
+ }
+ }
+ }
+ } // End Of if (!_color_type)
+
+ thresholdTable->Build( );
+ // ------------------ End Of Defining the Threshold Table
+
+ //EO CM
+}