00001 00012 #include "BinToMovingBrkPt.h" 00013 00014 #include <cassert> 00015 00016 namespace hippodraw { 00017 00018 BinToMovingBrkPt:: 00019 BinToMovingBrkPt ( const char * name ) 00020 : BinToColor ( name ) 00021 { 00022 m_control_points.push_back(0.5); 00023 m_control_points.push_back(0.5); 00024 m_control_points.push_back(0.5); 00025 } 00026 00027 BinToMovingBrkPt::BinToMovingBrkPt ( const BinToMovingBrkPt & bin_to_color ) 00028 : BinToColor ( bin_to_color ) 00029 { 00030 00031 if(m_control_points.size()==0) 00032 { 00033 m_control_points.push_back(0.5); 00034 m_control_points.push_back(0.5); 00035 m_control_points.push_back(0.5); 00036 } 00037 } 00038 00039 BinToColor * BinToMovingBrkPt:: clone () const 00040 { 00041 return new BinToMovingBrkPt ( *this ); 00042 } 00043 00044 void BinToMovingBrkPt::doubleToColor ( double value, Color & color ) const 00045 { 00046 double r=1;double g = 1;double b =1; 00047 // double dv = m_range.length (); 00048 // double vmin = m_range.low (); 00049 double v = value; 00050 assert(m_control_points.size()!=0); 00051 00052 double brk_pt = m_control_points[0]; 00053 double flat = m_control_points[1]; 00054 00055 if ( brk_pt < (1 - brk_pt)) 00056 flat = flat * ( brk_pt); 00057 else flat = flat * ( 1 - brk_pt); 00058 00059 if ( v < (m_vmin + brk_pt * m_dv)) 00060 r = 0; 00061 else r = ( v - m_vmin - brk_pt*m_dv ) / ( ( 1.05 - brk_pt ) * m_dv ); 00062 00063 00064 if ( v < (m_vmin + (brk_pt - flat) * m_dv )) 00065 g = (v - m_vmin) / ( (0.05+brk_pt - flat) * m_dv ); 00066 else if ( v > ( m_vmin + (brk_pt + flat) * m_dv )) 00067 g = 1 - ( v - m_vmin - ( brk_pt + flat )*m_dv) / 00068 ( (1.05 - brk_pt - flat) * m_dv ); 00069 else g = 1; 00070 00071 00072 if ( v < ( m_vmin + brk_pt *m_dv)) 00073 b = ( m_vmin + brk_pt*m_dv - v ) / ( (brk_pt+0.05) * m_dv ); 00074 else b = 0; 00075 00076 00077 int red = static_cast < int > ( r * 255. ); 00078 int green = static_cast < int > ( g * 255. ); 00079 int blue = static_cast < int > ( b * 255. ); 00080 00081 00082 assert ( red < 256 && green < 256 && blue < 256 ); 00083 color.setColor ( red, green, blue ); 00084 } 00085 00086 bool 00087 BinToMovingBrkPt:: 00088 hasControlPoints () const 00089 { 00090 return true; 00091 } 00092 00093 } // namespace hippodraw