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