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,
170 double min1,
double max1,
double zero1 );
175 void paletteCoords(
double val0,
double val1,
int & px,
int & py )
const;
176 void paletteCoord(
int dim,
double val0,
int & px )
const;
205 template<
typename T>
inline
207 const T & maxi,
const T & mini2,
209 double min1,
double max1,
double zero1,
210 double min2,
double max2,
double zero2 )
211 : _traitstype( pal, mini, maxi, mini2, maxi2, min1, max1, zero1,
217 template<
typename T>
inline
219 const T & maxi,
double min1,
double max1,
221 : _traitstype( pal, mini, maxi, min1, max1, zero1 )
225 template <
typename T>
inline
228 return _traitstype.color( in );
231 template <
typename T>
inline
234 return _traitstype.neutralColor();
237 template <
typename T>
inline
239 int & px,
int & py )
const
241 _traitstype.paletteCoords( val0, val1, px, py );
245 template <
typename T>
inline
248 _traitstype.paletteCoord( dim, val0, px );
252 template <
typename T>
inline
255 _traitstype.paletteCoord0( val0, px );
259 template <
typename T>
inline
262 _traitstype.paletteCoord1( val0, px );
267 template<
typename T>
inline
269 const T &,
const T &,
274 template <
typename T>
inline
281 template <
typename T>
inline
296 template <
typename T>
inline
311 setup( mini, maxi, mini2, maxi2, min1, max1, zero1, min2, max2, zero2 );
315 template <
typename T>
inline
325 setup( mini, maxi, mini, maxi, min1, max1, zero1, 0., 1., 0. );
329 template <
typename T>
inline
331 double val0,
double val1,
int & ival0,
int & ival1 )
const
338 template <
typename T>
inline
340 int dim,
double val0,
int & ival0 )
const
349 template <
typename T>
inline
351 double val0,
int & ival0 )
const
355 if( !palette->zeroCenteredAxis1() )
358 fval0 = scale0 * val0 + decal0;
360 if( fval0 > cmin0 && fval0 < cmax0 )
362 ival0 =
static_cast<int>( fval0 );
364 else if( fval0 <= cmin0 )
366 else if( fval0 >= cmax0 )
375 fval0 = scale0 * val0 + decal0;
376 if( fval0 > cmin0 && fval0 < cmax0 )
377 ival0 =
static_cast<int>( fval0 );
378 else if( fval0 <= cmin0 )
380 else if( fval0 >= cmax0 )
387 fval0 = scalen0 * val0 + decaln0;
388 if( fval0 > cminn0 && fval0 < cmaxn0 )
389 ival0 =
static_cast<int>( fval0 );
390 else if( fval0 <= cminn0 )
392 else if( fval0 >= cmaxn0 )
401 template <
typename T>
inline
403 double val0,
int & ival0 )
const
405 if( ( !palette->is2dMode()
407 || colors->getSizeY() == 1 )
413 if( !palette->zeroCenteredAxis2() )
416 fval0 = scale1 * val0 + decal1;
418 if( fval0 > cmin1 && fval0 < cmax1 )
420 ival0 =
static_cast<int>( fval0 );
422 else if( fval0 <= cmin1 )
424 else if( fval0 >= cmax1 )
433 fval0 = scale1 * val0 + decal1;
434 if( fval0 > cmin1 && fval0 < cmax1 )
435 ival0 =
static_cast<int>( fval0 );
436 else if( fval0 <= cmin1 )
438 else if( fval0 >= cmax1 )
445 fval0 = scalen1 * val0 + decaln1;
446 if( fval0 > cminn1 && fval0 < cmaxn1 )
447 ival0 =
static_cast<int>( fval0 );
448 else if( fval0 <= cminn1 )
450 else if( fval0 >= cmaxn1 )
460 template <
typename T>
inline
466 return colors->at( ival0, 0 );
469 template <
typename T>
inline
483 col[0] = colors->at( ival0, 0 )[0];
486 col[1] = colors->at( ival0, 0 )[1];
489 col[2] = colors->at( ival0, 0 )[2];
491 double val =
static_cast<double>( std::sqrt( in.
red() * in.
red()
495 col[3] = colors->at( ival0, 0 )[3];
510 col[0] = colors->at( ival0, 0 )[0];
513 col[1] = colors->at( ival0, 0 )[1];
516 col[2] = colors->at( ival0, 0 )[2];
519 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