BBTK_DECLARE_INPUT(lstBaseColor,std::vector<double>);
BBTK_DECLARE_INPUT(lstGreyLevelBoundaries,std::vector<double>);
BBTK_DECLARE_INPUT(lstTransparenceBoundaries,std::vector<double>);
+ BBTK_DECLARE_INPUT(lstRangeForColorBar,std::vector<double>);
BBTK_DECLARE_INPUT(PlainOrGradientColor,bool);
BBTK_DECLARE_INPUT(FittingMode,int);
BBTK_PROCESS(Process);
BBTK_INPUT(ColorLayerImageView,WxVtkBaseView," 0 creaMaracasVisuViewer viewer XY,YZ ou XZ",wxVtkBaseView*,"");
BBTK_INPUT(ColorLayerImageView,WxVtkBaseView1," 1 creaMaracasVisuViewer viewer XY,YZ ou XZ",wxVtkBaseView*,"");
BBTK_INPUT(ColorLayerImageView,WxVtkBaseView2," 2 creaMaracasVisuViewer viewer XY,YZ ou XZ",wxVtkBaseView*,"");
- BBTK_INPUT(ColorLayerImageView,lstBaseColor,"List of Base Colors in RGB format to define the color map. Requirement: must be of a size being a multiple of 3, with values between 0 and 1. For example, for 2 colors: \"1 0 0 0 0 1\". If not provided as required, the histogram is equally split into three areas, blue, yellow and red.",std::vector<double>,"");
+ BBTK_INPUT(ColorLayerImageView,lstBaseColor,"???EED List of Base Colors in RGB format to define the color map. Requirement: must be of a size being a multiple of 3, with values between 0 and 1. For example, for 2 colors: \"1 0 0 0 0 1\". If not provided as required, the histogram is equally split into three areas, blue, yellow and red.",std::vector<double>,"");
BBTK_INPUT(ColorLayerImageView,lstTransparenceBoundaries,"Transparence vector. (The same size of color lst).",std::vector<double>,"");
- BBTK_INPUT(ColorLayerImageView,lstGreyLevelBoundaries,"List of the Grey Level Boundaries to define the color map (grey level outside the color boundaries will not be disayed). Requirement: Must have one more element than the number of colours. For example, for 2 colors: \"50 150 250\". If not provided as required, the histogram is equally split into areas, which number corresponds to the number of colors provided (3 by default).",std::vector<double>,"");
+ BBTK_INPUT(ColorLayerImageView,lstGreyLevelBoundaries,"???EED List of the Grey Level Boundaries to define the color map (grey level outside the color boundaries will not be disayed). Requirement: Must have one more element than the number of colours. For example, for 2 colors: \"50 150 250\". If not provided as required, the histogram is equally split into areas, which number corresponds to the number of colors provided (3 by default).",std::vector<double>,"");
+
+ BBTK_INPUT(ColorLayerImageView,lstRangeForColorBar,"??? EED ",std::vector<double>,"");
BBTK_INPUT(ColorLayerImageView,PlainOrGradientColor,"Choose between Plain (true) or Gradient (false) colors. Default is false.",bool,"");
_range[1]=255;
}
+ int i;
+ double delta;
// Grey level extrema are set by default to the image grey level extrema.
double minTot = _range[0];
double maxTot = _range[1];
- _grey_level_boundary.push_back(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(minTot + i * delta);
- } // for
+ if (_color_type)
+ {
+ 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
+
}
//----------------------------------------------------------------------------
_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);
- // Yellow.
+
+ _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);
- // Red.
+
_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 = floor (_range[0]);
+// double maxTot = ceil (_range[1]);
+ double minTot = _range[0];
+ double maxTot = _range[1];
- _grey_level_boundary.push_back(minTot);
-
+ double delta = (maxTot - minTot)/8.0;
// 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(maxTot);
+ _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);
}
//----------------------------------------------------------------------------
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 (GetBaseColorNb() != ((int)_grey_level_boundary.size() - 1) )
+ if (GetBaseColorNb() != (int)_grey_level_boundary.size() )
{
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;
// ------------------ End Of Setting Default Values
int iTransparence,transparenceSize = _transparence_level_boundary.size();
- for (iTransparence= transparenceSize ; iTransparence < GetBaseColorNb(); iTransparence++ )
+ for (iTransparence=transparenceSize ; iTransparence < GetBaseColorNb(); iTransparence++ )
{
_transparence_level_boundary.push_back(1);
}
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(_range[1]) );
- thresholdTable_range[0]= std::min( GetGreyLevelBoundaries(0) , floor(_range[0]) );
+ thresholdTable_range[1]= std::max( GetGreyLevelBoundaries( _grey_level_boundary.size()-1 ) , ceil(maxRange) );
+ thresholdTable_range[0]= std::min( GetGreyLevelBoundaries(0), floor(minRange) );
thresholdTable->SetTableRange(thresholdTable_range);
- thresholdTable->SetAlphaRange(0, 1);
- thresholdTable->SetValueRange(0, 1);
+ thresholdTable->SetAlphaRange( 0,1 );
+ thresholdTable->SetValueRange( 0,1 );
- thresholdTable->SetSaturationRange(0, 0);
+ thresholdTable->SetSaturationRange( 0,0 );
thresholdTable->SetRampToLinear( );
maxColorsThresholdTable = 1000;
// _color_type true, i.e. plain colors.
// Sets the plain color for each grey level interval.
- if (_color_type)
+ if (_color_type) // Plain
{
-
if ( minRange<GetGreyLevelBoundaries(0) )
{
start = 0;
end = GrayLevel_TO_colorTableIndex( maxRange );
FillColorTable(start,end, 0,0,0, 0,0,0, 0,0);
}
-
for (int iColor = 0; iColor < GetBaseColorNb(); iColor++)
{
r1 = GetBaseColors(iColor*3+0);
start = GrayLevel_TO_colorTableIndex( GetGreyLevelBoundaries(iColor) );
end = GrayLevel_TO_colorTableIndex( GetGreyLevelBoundaries(iColor+1) );
t1 = _transparence_level_boundary[iColor];
- t2 = _transparence_level_boundary[iColor+1];
- FillColorTable(start,end, r1,g1,b1,r1,g1,b1,t1,t2);
+// t2 = _transparence_level_boundary[iColor+1];
+ FillColorTable(start,end, r1,g1,b1,r1,g1,b1,t1,t1);
} // for i
- } // End Of if (_color_type)
-
- // _color_type false, i.e. gradient color
- else
- {
-//EED 28/01/2015
+ } else { // _color_type false, i.e. gradient color
if (GetBaseColorNb() > 1)
{
- for (int iColor = 0; iColor < GetBaseColorNb(); iColor++)
+ for (int iColor = 0; iColor < GetBaseColorNb()-1; iColor++)
{
- if (iColor==0)
- {
- r1 = 0;
- g1 = 0;
- b1 = 0;
- r1 = GetBaseColors((iColor-1)*3+0);
- g1 = GetBaseColors((iColor-1)*3+1);
- b1 = GetBaseColors((iColor-1)*3+2);
- } else {
- r1 = GetBaseColors((iColor-1)*3+0);
- g1 = GetBaseColors((iColor-1)*3+1);
- b1 = GetBaseColors((iColor-1)*3+2);
- } // if iColor == 0
-
- r2 = GetBaseColors(iColor*3+0);
- g2 = GetBaseColors(iColor*3+1);
- b2 = GetBaseColors(iColor*3+2);
+ r1 = GetBaseColors( (iColor+0)*3+0 );
+ g1 = GetBaseColors( (iColor+0)*3+1 );
+ b1 = GetBaseColors( (iColor+0)*3+2 );
+ r2 = GetBaseColors( (iColor+1)*3+0);
+ g2 = GetBaseColors( (iColor+1)*3+1);
+ b2 = GetBaseColors( (iColor+1)*3+2);
start = GrayLevel_TO_colorTableIndex( GetGreyLevelBoundaries(iColor) );
end = GrayLevel_TO_colorTableIndex( GetGreyLevelBoundaries(iColor+1) );
t1 = _transparence_level_boundary[iColor];
t2 = _transparence_level_boundary[iColor+1];
- FillColorTable( start,end, r1,g1,b1, r2,g2,b2, t1,t1 );
+ FillColorTable( start,end, r1,g1,b1, r2,g2,b2, t1,t2 );
}// for
} //if
} // End Of if (!_color_type)
- thresholdTable->SetRange( minRange, maxRange );
- thresholdTable->SetValueRange( 0.0, 1.0 );
+ double minRangeForColorBar, maxRangeForColorBar;
+ GetRangeForColorBar( minRangeForColorBar, maxRangeForColorBar );
+ thresholdTable->SetRange( minRangeForColorBar, maxRangeForColorBar );
+
+// thresholdTable->SetTableRange( minRange, maxRange );
+// thresholdTable->SetValueRange( 0.0, 1.0 );
+// thresholdTable->SetAboveRangeColor(0,0,0,0);
+// thresholdTable->SetBelowRangeColor(0,0,0,0);
thresholdTable->Build( );
//----------------------------------------------------------------------------
int ColorLayerImageView::GrayLevel_TO_colorTableIndex( double VALUE )
{
+ GetImage()->Update();
GetImage()->GetScalarRange(_range);
double minRange = _range[0];
double maxRange = _range[1];
thresholdTable->SetTableValue( iTable+start , r1+dr*iTable, g1+dg*iTable, b1+db*iTable,t1+dt*iTable);
} // for iTable
-// if (start==0) thresholdTable->SetTableValue( start , r1, g1, b1,0); // The first color in the table is transparent
}