#ifndef ROOT_TEveRGBAPalette
#define ROOT_TEveRGBAPalette
#include "TEveUtil.h"
#include "TObject.h"
class TEveRGBAPalette : public TObject, public TEveRefCnt
{
friend class TEveRGBAPaletteEditor;
friend class TEveRGBAPaletteSubEditor;
public:
enum ELimitAction_e { kLA_Cut, kLA_Mark, kLA_Clip, kLA_Wrap };
private:
TEveRGBAPalette(const TEveRGBAPalette&);
TEveRGBAPalette& operator=(const TEveRGBAPalette&);
protected:
Int_t fLowLimit;
Int_t fHighLimit;
Int_t fMinVal;
Int_t fMaxVal;
Int_t fNBins;
Bool_t fInterpolate;
Bool_t fShowDefValue;
Int_t fUnderflowAction;
Int_t fOverflowAction;
Color_t fDefaultColor;
UChar_t fDefaultRGBA[4];
Color_t fUnderColor;
UChar_t fUnderRGBA[4];
Color_t fOverColor;
UChar_t fOverRGBA[4];
mutable UChar_t* fColorArray;
void SetupColor(Int_t val, UChar_t* pix) const;
static TEveRGBAPalette* fgDefaultPalette;
public:
TEveRGBAPalette();
TEveRGBAPalette(Int_t min, Int_t max, Bool_t interp=kFALSE, Bool_t showdef=kTRUE);
virtual ~TEveRGBAPalette();
void SetupColorArray() const;
void ClearColorArray();
Bool_t WithinVisibleRange(Int_t val) const;
const UChar_t* ColorFromValue(Int_t val) const;
void ColorFromValue(Int_t val, UChar_t* pix, Bool_t alpha=kTRUE) const;
Bool_t ColorFromValue(Int_t val, Int_t defVal, UChar_t* pix, Bool_t alpha=kTRUE) const;
Int_t GetMinVal() const { return fMinVal; }
Int_t GetMaxVal() const { return fMaxVal; }
void SetLimits(Int_t low, Int_t high);
void SetLimitsScaleMinMax(Int_t low, Int_t high);
void SetMinMax(Int_t min, Int_t max);
void SetMin(Int_t min);
void SetMax(Int_t max);
Int_t GetLowLimit() const { return fLowLimit; }
Int_t GetHighLimit() const { return fHighLimit; }
Bool_t GetInterpolate() const { return fInterpolate; }
void SetInterpolate(Bool_t b);
Bool_t GetShowDefValue() const { return fShowDefValue; }
void SetShowDefValue(Bool_t v) { fShowDefValue = v; }
Int_t GetUnderflowAction() const { return fUnderflowAction; }
Int_t GetOverflowAction() const { return fOverflowAction; }
void SetUnderflowAction(Int_t a) { fUnderflowAction = a; }
void SetOverflowAction(Int_t a) { fOverflowAction = a; }
Color_t GetDefaultColor() const { return fDefaultColor; }
Color_t* PtrDefaultColor() { return &fDefaultColor; }
UChar_t* GetDefaultRGBA() { return fDefaultRGBA; }
const UChar_t* GetDefaultRGBA() const { return fDefaultRGBA; }
void SetDefaultColor(Color_t ci);
void SetDefaultColor(Pixel_t pix);
void SetDefaultColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
Color_t GetUnderColor() const { return fUnderColor; }
Color_t* PtrUnderColor() { return &fUnderColor; }
UChar_t* GetUnderRGBA() { return fUnderRGBA; }
const UChar_t* GetUnderRGBA() const { return fUnderRGBA; }
void SetUnderColor(Color_t ci);
void SetUnderColor(Pixel_t pix);
void SetUnderColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
Color_t GetOverColor() const { return fOverColor; }
Color_t* PtrOverColor() { return &fOverColor; }
UChar_t* GetOverRGBA() { return fOverRGBA; }
const UChar_t* GetOverRGBA() const { return fOverRGBA; }
void SetOverColor(Color_t ci);
void SetOverColor(Pixel_t pix);
void SetOverColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
ClassDef(TEveRGBAPalette, 1);
};
inline Bool_t TEveRGBAPalette::WithinVisibleRange(Int_t val) const
{
if ((val < fMinVal && fUnderflowAction == kLA_Cut) ||
(val > fMaxVal && fOverflowAction == kLA_Cut))
return kFALSE;
else
return kTRUE;
}
inline const UChar_t* TEveRGBAPalette::ColorFromValue(Int_t val) const
{
if (!fColorArray) SetupColorArray();
if (val < fMinVal) {
if (fUnderflowAction == kLA_Wrap)
val = (val+1-fMinVal)%fNBins + fMaxVal;
else if (fUnderflowAction == kLA_Clip)
val = fMinVal;
else
return fUnderRGBA;
}
else if(val > fMaxVal) {
if (fOverflowAction == kLA_Wrap)
val = (val-1-fMaxVal)%fNBins + fMinVal;
else if (fOverflowAction == kLA_Clip)
val = fMaxVal;
else
return fOverRGBA;
}
return fColorArray + 4 * (val - fMinVal);
}
inline void TEveRGBAPalette::ColorFromValue(Int_t val, UChar_t* pix, Bool_t alpha) const
{
const UChar_t* c = ColorFromValue(val);
pix[0] = c[0]; pix[1] = c[1]; pix[2] = c[2];
if (alpha) pix[3] = c[3];
}
inline Bool_t TEveRGBAPalette::ColorFromValue(Int_t val, Int_t defVal, UChar_t* pix, Bool_t alpha) const
{
if (val == defVal) {
if (fShowDefValue) {
pix[0] = fDefaultRGBA[0];
pix[1] = fDefaultRGBA[1];
pix[2] = fDefaultRGBA[2];
if (alpha) pix[3] = fDefaultRGBA[3];
return kTRUE;
} else {
return kFALSE;
}
}
if (WithinVisibleRange(val)) {
ColorFromValue(val, pix, alpha);
return kTRUE;
} else {
return kFALSE;
}
}
#endif
Last change: Wed Jun 25 08:37:53 2008
Last generated: 2008-06-25 08:37
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.