35 #ifndef ANA_COLOR_COLORTRAITS_H 
   36 #define ANA_COLOR_COLORTRAITS_H 
   52     void setup( 
const T & mini, 
const T & maxi );
 
  125   template<
typename T> 
inline 
  128     : _traitstype( pal, mini, maxi )
 
  132   template <
typename T> 
inline 
  135     return _traitstype.color( in );
 
  138   template <
typename T> 
inline 
  141     return _traitstype.neutralColor();
 
  146   template<
typename T> 
inline 
  148                                                  const T &, 
const T & )
 
  152   template <
typename T> 
inline 
  159   template <
typename T> 
inline 
  174   template <
typename T> 
inline 
  184   template <
typename T> 
inline 
  188     double fval0, fval1, val = 
static_cast<double>( in );
 
  191     fval0 = scale0 * val + decal0;
 
  192     if( fval0 > cmin0 && fval0 < cmax0 )
 
  194       ival0 = 
static_cast<int>( fval0 );
 
  196     else if( fval0 <= cmin0 )
 
  198     else if( fval0 >= cmax0 )
 
  204         colors->getSizeY() == 1 )
 
  208         fval1 = scale1 * val + decal1;
 
  209         if( fval1 > cmin1 && fval1 < cmax1 )
 
  211           ival1 = 
static_cast<int>( fval1 );
 
  213         else if( fval1 <= cmin1 )
 
  215         else if( fval1 >= cmax1 )
 
  221     return colors->at( ival0, ival1 );
 
  224   template <
typename T> 
inline 
  236     float fval0, fval1, val = 
static_cast<float>( in.
red() );
 
  238     fval0 = scale0 * val + decal0;
 
  239     if( fval0 > cmin0 && fval0 < cmax0 )
 
  241       ival0 = 
static_cast<int>( fval0 );
 
  243     else if( fval0 <= cmin0 )
 
  245     else if( fval0 >= cmax0 )
 
  251         colors->getSizeY() == 1 )
 
  255         fval1 = scale1 * val + decal1;
 
  256         if( fval1 > cmin1 && fval1 < cmax1 )
 
  258           ival1 = 
static_cast<int>( fval1 );
 
  260         else if( fval1 <= cmin1 )
 
  262         else if( fval1 >= cmax1 )
 
  268     col[0] = colors->at( ival0, ival1 )[0];
 
  270     val = 
static_cast<float>( in.
green() );
 
  272     fval0 = scale0 * val + decal0;
 
  273     if( fval0 > cmin0 && fval0 < cmax0 )
 
  275       ival0 = 
static_cast<int>( fval0 );
 
  277     else if( fval0 <= cmin0 )
 
  279     else if( fval0 >= cmax0 )
 
  285         colors->getSizeY() == 1 )
 
  289         fval1 = scale1 * val + decal1;
 
  290         if( fval1 > cmin1 && fval1 < cmax1 ) {
 
  291           ival1 = 
static_cast<int>( fval1 );
 
  292         } 
else if( fval1 <= cmin1 )
 
  294         else if( fval1 >= cmax1 )
 
  300     col[1] = colors->at( ival0, ival1 )[1];
 
  302     val = 
static_cast<float>( in.
blue() );
 
  304     fval0 = scale0 * val + decal0;
 
  305     if( fval0 > cmin0 && fval0 < cmax0 )
 
  307       ival0 = 
static_cast<int>( fval0 );
 
  309     else if( fval0 <= cmin0 )
 
  311     else if( fval0 >= cmax0 )
 
  317         colors->getSizeY() == 1 )
 
  321         fval1 = scale1 * val + decal1;
 
  322         if( fval1 > cmin1 && fval1 < cmax1 ) {
 
  323           ival1 = 
static_cast<int>( fval1 );
 
  324         } 
else if( fval1 <= cmin1 )
 
  326         else if( fval1 >= cmax1 )
 
  332     col[2] = colors->at( ival0, ival1 )[2];
 
  334     val = 
static_cast<float>( std::sqrt( in.
red() * in.
red()
 
  338     fval0 = scale0 * val + decal0;
 
  339     if( fval0 > cmin0 && fval0 < cmax0 ) {
 
  340       ival0 = 
static_cast<int>( fval0 );
 
  341     } 
else if( fval0 <= cmin0 )
 
  343     else if( fval0 >= cmax0 )
 
  349         colors->getSizeY() == 1 )
 
  353         fval1 = scale1 * val + decal1;
 
  354         if( fval1 > cmin1 && fval1 < cmax1 ) {
 
  355           ival1 = 
static_cast<int>( fval1 );
 
  356         } 
else if( fval1 <= cmin1 )
 
  358         else if( fval1 >= cmax1 )
 
  364     col[3] = colors->at( ival0, ival1 )[3];
 
  377     float fval0, fval1, val = 
static_cast<float>( in.
red() );
 
  379     fval0 = scale0 * val + decal0;
 
  380     if( fval0 > cmin0 && fval0 < cmax0 )
 
  382       ival0 = 
static_cast<int>( fval0 );
 
  384     else if( fval0 <= cmin0 )
 
  386     else if( fval0 >= cmax0 )
 
  392         colors->getSizeY() == 1 )
 
  396         fval1 = scale1 * val + decal1;
 
  397         if( fval1 > cmin1 && fval1 < cmax1 )
 
  399           ival1 = 
static_cast<int>( fval1 );
 
  401         else if( fval1 <= cmin1 )
 
  403         else if( fval1 >= cmax1 )
 
  409     col[0] = colors->at( ival0, ival1 )[0];
 
  411     val = 
static_cast<float>( in.
green() );
 
  413     fval0 = scale0 * val + decal0;
 
  414     if( fval0 > cmin0 && fval0 < cmax0 )
 
  416       ival0 = 
static_cast<int>( fval0 );
 
  418     else if( fval0 <= cmin0 )
 
  420     else if( fval0 >= cmax0 )
 
  426         colors->getSizeY() == 1 )
 
  430         fval1 = scale1 * val + decal1;
 
  431         if( fval1 > cmin1 && fval1 < cmax1 )
 
  433           ival1 = 
static_cast<int>( fval1 );
 
  435         else if( fval1 <= cmin1 )
 
  437         else if( fval1 >= cmax1 )
 
  443     col[1] = colors->at( ival0, ival1 )[1];
 
  445     val = 
static_cast<float>( in.
blue() );
 
  447     fval0 = scale0 * val + decal0;
 
  448     if( fval0 > cmin0 && fval0 < cmax0 )
 
  450       ival0 = 
static_cast<int>( fval0 );
 
  452     else if( fval0 <= cmin0 )
 
  454     else if( fval0 >= cmax0 )
 
  460         colors->getSizeY() == 1 )
 
  464         fval1 = scale1 * val + decal1;
 
  465         if( fval1 > cmin1 && fval1 < cmax1 )
 
  467           ival1 = 
static_cast<int>( fval1 );
 
  469         else if( fval1 <= cmin1 )
 
  471         else if( fval1 >= cmax1 )
 
  477     col[2] = colors->at( ival0, ival1 )[2];
 
  479     val = 
static_cast<float>( in.
alpha() );
 
  481     fval0 = scale0 * val + decal0;
 
  482     if( fval0 > cmin0 && fval0 < cmax0 )
 
  484       ival0 = 
static_cast<int>( fval0 );
 
  486     else if( fval0 <= cmin0 )
 
  488     else if( fval0 >= cmax0 )
 
  494         colors->getSizeY() == 1 )
 
  498         fval1 = scale1 * val + decal1;
 
  499         if( fval1 > cmin1 && fval1 < cmax1 )
 
  501           ival1 = 
static_cast<int>( fval1 );
 
  503         else if( fval1 <= cmin1 )
 
  505         else if( fval1 >= cmax1 )
 
  511     col[3] = colors->at( ival0, ival1 )[3];
 
AimsRGBA color(const T &) const
ColorNoPaletteTraits(const AObjectPalette *, const T &mini, const T &maxi)
void setup(const T &mini, const T &maxi)
AimsRGBA color(const T &) const
ColorScalarPaletteTraits(const AObjectPalette *pal, const T &mini, const T &maxi)
Converter value -> RGBA (high-level)
T neutralColor() const
returns a black / transparent / zero color
ColorTraits(const AObjectPalette *, const T &mini, const T &maxi)
AimsRGBA color(const T &) const
const uint8_t & green() const
const uint8_t & blue() const
const uint8_t & alpha() const
const uint8_t & red() const
const uint8_t & red() const
const uint8_t & blue() const
const uint8_t & green() const
switch to the right color traits type
ColorScalarPaletteTraits< T > traitstype