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