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

BinToUsrDefinedScale.cxx

Go to the documentation of this file.
00001 
00012 #include "BinToUsrDefinedScale.h"
00013 
00014 #include <cassert>
00015 
00016 BinToUsrDefinedScale::
00017 BinToUsrDefinedScale ( const char * name )
00018   : BinToColor ( name )
00019 {
00020   m_control_points.push_back(0.5);
00021   m_control_points.push_back(0.25);
00022 }
00023 
00024 BinToUsrDefinedScale::
00025 BinToUsrDefinedScale ( const std::string & model_name )
00026   : BinToColor ( model_name )
00027 {
00028   m_control_points.push_back( 0.5 );
00029   m_control_points.push_back( 0.25 );
00030 }
00031 
00032 BinToUsrDefinedScale::
00033 BinToUsrDefinedScale ( const BinToUsrDefinedScale & bin_to_color )
00034   : BinToColor ( bin_to_color )
00035 {
00036  
00037   if(m_control_points.size()==0)
00038     {
00039       m_control_points.push_back(0.5);
00040       m_control_points.push_back(0.25);
00041     }
00042 }
00043 
00044 BinToColor * BinToUsrDefinedScale:: clone () const
00045 {
00046   return new BinToUsrDefinedScale ( *this );
00047 }
00048 
00049 
00050 void
00051 BinToUsrDefinedScale::
00052 doubleToColor ( double value, Color & color ) const
00053 {
00054 
00055    double r = 1; double g = 1; double b = 1;   
00056    double dv = m_range.length ();
00057    double vmin = m_range.low ();
00058    double v = value;
00059  
00060    assert(m_control_points.size()!=0);
00061    double brk_pt = m_control_points[0];
00062    double flat = m_control_points[1];
00063  
00064    if ( brk_pt <= (1 - brk_pt))
00065      flat = flat * ( brk_pt);
00066    else flat = flat * ( 1 - brk_pt);
00067 
00068 
00069 
00070    if ( v < ( vmin + ( 1.25 * brk_pt - 0.5 * flat ) * dv ) ) 
00071       r = 0;
00072 
00073    else if( v > ( vmin + ( 1.25 * brk_pt + 0.5 * flat ) * dv ) ) 
00074       r = 1;  
00075 
00076    else r = ( v - vmin - ( 1.25 * brk_pt - 0.5 * flat ) * dv ) / 
00077           ( ( (flat+0.001) ) * dv );
00078 
00079  
00080 
00081 
00082    if ( v < (vmin + (brk_pt - flat) * dv ))
00083       g = (v - vmin) / ( (0.001+brk_pt - flat) * dv );
00084 
00085    else if ( v > ( vmin + (brk_pt + flat) * dv ))      
00086 
00087      g =  1 - ( v - vmin - ( brk_pt + flat )*dv)/
00088        ( (1.001 - brk_pt - flat) * dv );
00089    
00090    else g = 1;
00091 
00092 
00093 
00094 
00095    if ( v < (vmin + ( 0.75 * brk_pt -  0.5 * flat ) * dv ) ) 
00096       b = 1;
00097 
00098    else if( v > (vmin + ( 0.75 * brk_pt  +  0.5 * flat ) * dv ) ) 
00099       b = 0;  
00100 
00101    else b = 1 - ( v - vmin - ( 0.75 * brk_pt - 0.5 * flat)*dv ) / 
00102           ( ( (flat + 0.001) ) * dv );
00103 
00104  
00105 
00106 
00107    int red   = static_cast < int > ( r * 255. );
00108    int green = static_cast < int > ( g * 255. );
00109    int blue  = static_cast < int > ( b * 255. );
00110    
00111 
00112    assert ( red < 256 && green < 256 && blue < 256 );
00113    color.setColor ( red, green, blue );
00114 }
00115 
00116 bool
00117 BinToUsrDefinedScale::
00118 hasControlPoints () const
00119 {
00120   return false;
00121 }

Generated for HippoDraw-1.14.8.5 by doxygen 1.4.3