00001 00012 #include "BinToFullColorScale.h" 00013 00014 #include <cassert> 00015 00016 namespace hippodraw { 00017 00018 BinToFullColorScale:: 00019 BinToFullColorScale ( const char * name ) 00020 : BinToColor ( name ) 00021 { 00022 } 00023 00024 BinToFullColorScale:: 00025 BinToFullColorScale ( const BinToFullColorScale & bin_to_color ) 00026 : BinToColor ( bin_to_color ) 00027 { 00028 } 00029 00030 BinToColor * BinToFullColorScale:: clone () const 00031 { 00032 return new BinToFullColorScale ( *this ); 00033 } 00034 00035 void 00036 BinToFullColorScale:: 00037 doubleToColor ( double value, Color & color ) const 00038 { 00039 double r=1; 00040 double g=1; 00041 double b=1; 00042 double v = value; 00043 00044 if (v < (m_vmin + ( 0.1667 ) * m_dv)) { 00045 r = 0; 00046 g = 6 * (v - m_vmin) / m_dv; 00047 00048 } else if (v < (m_vmin + (0.3333) * m_dv)) { 00049 r = 0; 00050 b = 1 + 6 * (m_vmin + (0.1667) * m_dv - v) / m_dv; 00051 00052 } else if (v < (m_vmin + (0.5) * m_dv)) { 00053 r = 6 * (v - m_vmin - (0.3333) * m_dv) / m_dv; 00054 b = 0; 00055 00056 } else if (v < (m_vmin + (0.6667) * m_dv) ) { 00057 g = 1 + 6 * (m_vmin + (0.5) * m_dv - v) / m_dv; 00058 b = 0; 00059 00060 } else if (v < (m_vmin + (0.8333) * m_dv) ) { 00061 g = 0; 00062 b = 6 * (v- m_vmin - (0.6667)*m_dv) /m_dv; 00063 00064 } else if (v < (m_vmin + m_dv )){ 00065 g=0; 00066 r = 1 + 6 * ( m_vmin + (0.8333)*m_dv - v) / m_dv; 00067 } else{ //this else is for guarding against numerical errors 00068 g = 0; 00069 r = 0; 00070 } 00071 00072 00073 int red = static_cast < int > ( r * 255. ); 00074 int green = static_cast < int > ( g * 255. ); 00075 int blue = static_cast < int > ( b * 255. ); 00076 00077 assert ( red < 256 && green < 256 && blue < 256 ); 00078 color.setColor ( red, green, blue ); 00079 } 00080 00081 } // namespace hippodraw 00082