DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
HueShadeColorMap.ih
1 
30 
31 #include <cstdlib>
33 
35 // IMPLEMENTATION of inline methods.
37 
39 // ----------------------- Standard services ------------------------------
40 
41 
42 template <typename Value, int DefaultCycles>
43 inline
45 ( const Value & amin,
46  const Value & amax,
47  const unsigned int cycles )
48  : myMin( amin ), myMax( amax ), myCycles( cycles )
49 { }
50 
51 
52 template <typename Value, int DefaultCycles>
53 inline
56  : myMin( other.myMin ), myMax( other.myMax ), myCycles( other.myCycles )
57 {
58 }
59 
60 template <typename Value, int DefaultCycles>
61 inline
63 {
64 }
65 
66 template <typename Value, int DefaultCycles>
70 {
71  if ( &other != this ) {
72  myMin = other.myMin;
73  myMax = other.myMax;
74  myCycles = other.myCycles;
75  }
76  return *this;
77 }
78 
80 // Interface - public :
81 
82 template<typename Value, int DefaultCycles>
83 inline
84 const Value &
86 {
87  return myMin;
88 }
89 
90 template<typename Value, int DefaultCycles>
91 inline
92 const Value &
94 {
95  return myMax;
96 }
97 
98 template<typename Value, int DefaultCycles>
99 inline
100 void
102 {
103  myCycles = cycles;
104 }
105 
106 
107 template<typename Value, int DefaultCycles>
108 inline
109 Color
111  ( const Value & value ) const
112 {
113  return getColor( myCycles, myMin, myMax, value );
114 }
115 
120 template <typename Value, int DefaultCycles>
121 inline
122 void
124 {
125  out << "[HueShadeColorMap "
126  << " min=" << myMin
127  << " max=" << myMax
128  << " cycles=" << myCycles
129  << " ]";
130 }
131 
136 template <typename Value, int DefaultCycles>
137 inline
138 bool
140 {
141  return true;
142 }
143 
144 template <typename Value, int DefaultCycles>
145 inline
146 Color
148 ( const unsigned int cycles,
149  const Value & min,
150  const Value & max,
151  const Value & value )
152 {
153  const double scale = ( value - min ) / static_cast<double>( max - min );
154  const double hue = 360 * ( scale * cycles - floor(scale * cycles));
155  double red, green, blue;
156  HueShadeColorMap<Value,DefaultCycles>::HSVtoRGB( red, green, blue, hue, 0.9, 1.0 );
157  return Color( static_cast<int>( red * 255),
158  static_cast<int>( green * 255),
159  static_cast<int>( blue * 255) );
160 }
161 
163 // Implementation of inline functions //
164 
165 template <typename Value, int DefaultCycles>
166 inline
167 std::ostream&
168 DGtal::operator<< ( std::ostream & out,
170 {
171  object.selfDisplay( out );
172  return out;
173 }
174 
175 // //
177 
178 
180 // Interface - private :
181 
182 template <typename Value, int DefaultCycles>
183 inline
184 void
186 ( double & r, double & g, double & b,
187  const double h, const double s, const double v)
188 {
189  int i;
190  double f, p, q, t;
191  if( s == 0 ) { // achromatic (gray)
192  r = g = b = v;
193  return;
194  }
195  i = static_cast<int>( floor( h / 60 ) );
196  f = ( h / 60 ) - i; // factorial part of h
197  p = v * ( 1.0 - s );
198  q = v * ( 1.0 - s * f );
199  t = v * ( 1.0 - s * ( 1.0 - f ) );
200  switch( i ) {
201  case 0:
202  r = v; g = t; b = p;
203  break;
204  case 1:
205  r = q; g = v; b = p;
206  break;
207  case 2:
208  r = p; g = v; b = t;
209  break;
210  case 3:
211  r = p; g = q; b = v;
212  break;
213  case 4:
214  r = t; g = p; b = v;
215  break;
216  default: // case 5:
217  r = v; g = p; b = q;
218  break;
219  }
220 }
221 
222