00001 00012 #include "BinToColorScale.h" 00013 00014 #include <cassert> 00015 00016 BinToColorScale:: 00017 BinToColorScale ( const char * name ) 00018 : BinToColor ( name ) 00019 { 00020 00021 } 00022 00023 BinToColorScale::BinToColorScale ( const BinToColorScale & bin_to_color ) 00024 : BinToColor ( bin_to_color ) 00025 { 00026 00027 } 00028 00029 BinToColor * BinToColorScale:: clone () const 00030 { 00031 return new BinToColorScale ( *this ); 00032 } 00033 00034 00035 00036 00037 00038 void 00039 BinToColorScale:: 00040 doubleToColor ( double value, Color & color ) const 00041 { 00042 double r=1; 00043 double g=1; 00044 double b=1; 00045 double dv = m_range.length (); 00046 double vmin = m_range.low (); 00047 double v = value; 00048 00049 00050 00051 00052 if (v < (vmin + 0.25 * dv)) { 00053 r = 0; 00054 g = 4 * (v - vmin) / dv; 00055 } else if (v < (vmin + 0.5 * dv)) { 00056 r = 0; 00057 b = 1 + 4 * (vmin + 0.25 * dv - v) / dv; 00058 } else if (v < (vmin + 0.75 * dv)) { 00059 r = 4 * (v - vmin - 0.5 * dv) / dv; 00060 b = 0; 00061 } else { 00062 g = 1 + 4 * (vmin + 0.75 * dv - v) / dv; 00063 b = 0; 00064 } 00065 int red = static_cast < int > ( r * 255. ); 00066 int green = static_cast < int > ( g * 255. ); 00067 int blue = static_cast < int > ( b * 255. ); 00068 00069 assert ( red < 256 && green < 256 && blue < 256 ); 00070 color.setColor ( red, green, blue ); 00071 }