35#ifndef ANA_COLOR_COLORTRAITS_H
36#define ANA_COLOR_COLORTRAITS_H
39#include <aims/def/general.h>
41#include <aims/rgb/rgb.h>
50 const T & maxi,
const T & mini2,
52 double min1,
double max1,
double zero1,
53 double min2,
double max2,
double zero2 );
56 double min1,
double max1,
double zero1 );
58 void setup(
const T & mini,
const T & maxi,
59 const T & mini2,
const T & maxi2,
60 double min1,
double max1,
double zero1,
61 double min2,
double max2,
double zero2 );
62 void setup1D(
int dim,
const T & mini,
const T & maxi,
63 double min1,
double max1,
double zero );
65 void paletteCoords(
double val0,
double val1,
int & px,
int & py )
const;
66 void paletteCoord(
int dim,
double val0,
int & px )
const;
100 const T & maxi,
double min,
double max );
135 const T & mini2,
const T & maxi2,
136 double min1,
double max1,
double zero1,
double min2,
double max2,
173 double min1,
double max1,
double zero1 );
178 void paletteCoords(
double val0,
double val1,
int & px,
int & py )
const;
179 void paletteCoord(
int dim,
double val0,
int & px )
const;
208 template<
typename T>
inline
210 const T & maxi,
const T & mini2,
212 double min1,
double max1,
double zero1,
213 double min2,
double max2,
double zero2 )
214 : _traitstype( pal, mini, maxi, mini2, maxi2, min1, max1, zero1,
220 template<
typename T>
inline
222 const T & maxi,
double min1,
double max1,
224 : _traitstype( pal, mini, maxi, min1, max1, zero1 )
228 template <
typename T>
inline
231 return _traitstype.color( in );
234 template <
typename T>
inline
237 return _traitstype.neutralColor();
240 template <
typename T>
inline
242 int & px,
int & py )
const
244 _traitstype.paletteCoords( val0, val1, px, py );
248 template <
typename T>
inline
251 _traitstype.paletteCoord( dim, val0, px );
255 template <
typename T>
inline
258 _traitstype.paletteCoord0( val0, px );
262 template <
typename T>
inline
265 _traitstype.paletteCoord1( val0, px );
270 template<
typename T>
inline
272 const T &,
const T &,
277 template <
typename T>
inline
284 template <
typename T>
inline
299 template <
typename T>
inline
314 setup( mini, maxi, mini2, maxi2, min1, max1, zero1, min2, max2, zero2 );
318 template <
typename T>
inline
328 setup( mini, maxi, mini, maxi, min1, max1, zero1, 0., 1., 0. );
332 template <
typename T>
inline
334 double val0,
double val1,
int & ival0,
int & ival1 )
const
341 template <
typename T>
inline
343 int dim,
double val0,
int & ival0 )
const
352 template <
typename T>
inline
354 double val0,
int & ival0 )
const
358 if( !palette->zeroCenteredAxis1() )
361 fval0 = scale0 * val0 + decal0;
363 if( fval0 > cmin0 && fval0 < cmax0 )
365 ival0 =
static_cast<int>( fval0 );
367 else if( fval0 <= cmin0 )
369 else if( fval0 >= cmax0 )
378 fval0 = scale0 * val0 + decal0;
379 if( fval0 > cmin0 && fval0 < cmax0 )
380 ival0 =
static_cast<int>( fval0 );
381 else if( fval0 <= cmin0 )
383 else if( fval0 >= cmax0 )
390 fval0 = scalen0 * val0 + decaln0;
391 if( fval0 > cminn0 && fval0 < cmaxn0 )
392 ival0 =
static_cast<int>( fval0 );
393 else if( fval0 <= cminn0 )
395 else if( fval0 >= cmaxn0 )
404 template <
typename T>
inline
406 double val0,
int & ival0 )
const
408 if( ( !palette->is2dMode()
410 || colors->getSizeY() == 1 )
416 if( !palette->zeroCenteredAxis2() )
419 fval0 = scale1 * val0 + decal1;
421 if( fval0 > cmin1 && fval0 < cmax1 )
423 ival0 =
static_cast<int>( fval0 );
425 else if( fval0 <= cmin1 )
427 else if( fval0 >= cmax1 )
436 fval0 = scale1 * val0 + decal1;
437 if( fval0 > cmin1 && fval0 < cmax1 )
438 ival0 =
static_cast<int>( fval0 );
439 else if( fval0 <= cmin1 )
441 else if( fval0 >= cmax1 )
448 fval0 = scalen1 * val0 + decaln1;
449 if( fval0 > cminn1 && fval0 < cmaxn1 )
450 ival0 =
static_cast<int>( fval0 );
451 else if( fval0 <= cminn1 )
453 else if( fval0 >= cmaxn1 )
463 template <
typename T>
inline
469 return colors->at( ival0, 0 );
472 template <
typename T>
inline
486 col[0] = colors->at( ival0, 0 )[0];
489 col[1] = colors->at( ival0, 0 )[1];
492 col[2] = colors->at( ival0, 0 )[2];
494 double val =
static_cast<double>( std::sqrt( in.
red() * in.
red()
498 col[3] = colors->at( ival0, 0 )[3];
513 col[0] = colors->at( ival0, 0 )[0];
516 col[1] = colors->at( ival0, 0 )[1];
519 col[2] = colors->at( ival0, 0 )[2];
522 col[3] = colors->at( ival0, 0 )[3];
AimsRGBA color(const T &) const
ColorNoPaletteTraits(const AObjectPalette *, const T &mini, const T &maxi, double min, double max)
void setup(const T &mini, const T &maxi, const T &mini2, const T &maxi2, double min1, double max1, double zero1, double min2, double max2, double zero2)
void paletteCoord(int dim, double val0, int &px) const
void paletteCoord0(double val0, int &px) const
void paletteCoord1(double val0, int &px) const
AimsRGBA color(const T &) const
void setup1D(int dim, const T &mini, const T &maxi, double min1, double max1, double zero)
void paletteCoords(double val0, double val1, int &px, int &py) const
ColorScalarPaletteTraits(const AObjectPalette *pal, const T &mini, const T &maxi, const T &mini2, const T &maxi2, double min1, double max1, double zero1, double min2, double max2, double zero2)
void paletteCoords(double val0, double val1, int &px, int &py) const
T neutralColor() const
returns a black / transparent / zero color
void paletteCoord0(double val0, int &px) const
void paletteCoord1(double val0, int &px) const
ColorTraits(const AObjectPalette *palette, const T &mini, const T &maxi, const T &mini2, const T &maxi2, double min1, double max1, double zero1, double min2, double max2, double zero2)
Constructor for 2D palettes.
AimsRGBA color(const T &) const
void paletteCoord(int dim, double val0, int &px) const
const uint8_t & alpha() const
const uint8_t & blue() const
const uint8_t & red() const
const uint8_t & green() const
const uint8_t & red() const
const uint8_t & green() const
const uint8_t & blue() const
T min(const Volume< T > &vol)
T max(const Volume< T > &vol)
carto::VoxelRGBA AimsRGBA
switch to the right color traits type
ColorScalarPaletteTraits< T > traitstype