00001 00012 #include "BinToColorMap.h" 00013 00014 #include <cmath> 00015 using std :: string; 00016 00017 #include <cassert> 00018 00019 namespace hippodraw { 00020 00021 BinToColorMap::BinToColorMap ( const char * name ) 00022 : BinToColor ( name ) 00023 { 00024 m_control_points.push_back ( .5 ); 00025 calcGamma ( ); 00026 } 00027 00028 bool 00029 BinToColorMap:: 00030 hasControlPoints () const 00031 { 00032 return true; 00033 } 00034 00035 void 00036 BinToColorMap:: 00037 setControlPoints ( const std::vector < double > & points ) 00038 { 00039 m_control_points[0] = points[0]; 00040 calcGamma ( ); 00041 } 00042 00043 void 00044 BinToColorMap:: 00045 calcGamma ( ) 00046 { 00047 double f = m_control_points[0]; 00048 m_gamma = std::pow ( 100., ( f - 0.5) ); 00049 } 00050 00051 BinToColorMap::BinToColorMap( const BinToColorMap & bin_to_color ) 00052 : BinToColor ( bin_to_color ) 00053 00054 { 00055 m_reds = bin_to_color.m_reds; 00056 m_greens = bin_to_color.m_greens; 00057 m_blues = bin_to_color.m_blues; 00058 m_control_points = bin_to_color.m_control_points; 00059 calcGamma (); 00060 } 00061 00062 00063 00064 BinToColorMap::~BinToColorMap() 00065 { 00066 } 00067 00068 void 00069 BinToColorMap:: 00070 doubleToColor ( double value, Color & color ) const 00071 { 00072 double tmp = ( value - m_vmin ) / m_dv; 00073 int index = static_cast < int > (255. * std::pow( tmp, m_gamma) ); 00074 assert ( index < 256 ); 00075 color.setColor ( m_reds[index], m_greens[index], m_blues[index] ); 00076 } 00077 00078 } // namespace hippodraw 00079