BinToMovingBrkPt.cxx

Go to the documentation of this file.
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

Generated for HippoDraw Class Library by doxygen