Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

BinToMovingBrkPt.cxx

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

Generated for HippoDraw-1.14.8.5 by doxygen 1.4.3