+//----------------------------------------------------------------------------
+void ColorLayerImageView::SetBaseColors(std::vector<double> & base_color)
+{
+ // The base color vector must be of a size multiple of 3, not null.
+ if (base_color.size() != 0 && base_color.size() % 3 == 0)
+ _base_color = base_color;
+ // Otherwise, an exception should be thrown.
+ else if (base_color.size() != 0)
+ std::cout << "CM ColorLayerImageView::SetBaseColors : ERROR!!! The base color vector has an inconsistent size. It must be of a size multiple of 3, different from 0, but its size is: "<< base_color.size() << ". Therefore, the default values will be used as base colors." << std::endl;
+}
+
+//----------------------------------------------------------------------------
+double ColorLayerImageView::GetBaseColors(unsigned int index)
+{
+ if (_base_color.size() > index)
+ return _base_color.at(index);
+ // An exception should be thrown if the index does not exist in the color vector.
+ else
+ {
+ std::cout << "CM ColorLayerImageView::GetBaseColors : ERROR!!! The index " << index << "is out of the base color vector range." << std ::endl;
+ return -1.0;
+ }
+}
+
+//----------------------------------------------------------------------------
+void ColorLayerImageView::SetGreyLevelBoundaries(std::vector<double> & grey_level_boundary)
+{
+ // The size must be greater than or equal to 2 (at least min and max must exist).
+ if ( grey_level_boundary.size() >= 2)
+ {
+ sort ( grey_level_boundary.begin(), grey_level_boundary.end() );
+ _grey_level_boundary = grey_level_boundary;
+ }
+ // Otherwise, an exception should be thrown.
+ else if (grey_level_boundary.size() != 0)
+ std::cout << "CM ColorLayerImageView::SetGreyLevelBoundaries : ERROR!!! The grey level boundaries vector has an inconsistent size. It must be of a size greater than or equal to 2 (at least min and max must exist), but its size is: " << grey_level_boundary.size() << ". Therefore, the histogram will be equally split." << std::endl;
+}
+
+//----------------------------------------------------------------------------
+double ColorLayerImageView::GetGreyLevelBoundaries(unsigned int index)
+{
+ if (_grey_level_boundary.size() > index)
+ return _grey_level_boundary.at(index);
+ // An exception should be thrown if the index does not exist in the grey level boundary vector.
+ else
+ {
+ std::cout << "CM ColorLayerImageView::GetGreyLevelBoundaries : ERROR!!! The index " << index << "is out of the grey level boundaries vector range." << std ::endl;
+ return -1.0;
+ }
+}
+
+//----------------------------------------------------------------------------
+void ColorLayerImageView::SetPlainOrGradientColor(bool color_type)
+{
+ _color_type = color_type;
+}
+
+//----------------------------------------------------------------------------
+int ColorLayerImageView::GetBaseColorNb()
+{
+ return _base_color.size()/3;
+}
+
+//----------------------------------------------------------------------------
+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);
+}