12 #ifndef ROOT_TEveRGBAPalette
13 #define ROOT_TEveRGBAPalette
22 class TEveRGBAPalette :
public TObject,
26 friend class TEveRGBAPaletteEditor;
27 friend class TEveRGBAPaletteSubEditor;
29 friend class TEveRGBAPaletteOverlay;
32 enum ELimitAction_e { kLA_Cut, kLA_Mark, kLA_Clip, kLA_Wrap };
35 TEveRGBAPalette(
const TEveRGBAPalette&);
36 TEveRGBAPalette& operator=(
const TEveRGBAPalette&);
50 Bool_t fFixColorRange;
51 Int_t fUnderflowAction;
52 Int_t fOverflowAction;
54 Color_t fDefaultColor;
55 UChar_t fDefaultRGBA[4];
57 UChar_t fUnderRGBA[4];
64 mutable UChar_t* fColorArray;
66 void SetupColor(Int_t val, UChar_t* pix)
const;
68 Double_t IntToDouble(Int_t i)
const {
return fUIf*i + fUIc; }
69 Int_t DoubleToInt(Double_t d)
const {
return TMath::Nint((d - fUIc) / fUIf); }
71 Double_t GetCAMinAsDouble()
const {
return IntToDouble(fCAMin); }
72 Double_t GetCAMaxAsDouble()
const {
return IntToDouble(fCAMax); }
74 static TEveRGBAPalette* fgDefaultPalette;
78 TEveRGBAPalette(Int_t min, Int_t max, Bool_t interp=kTRUE,
79 Bool_t showdef=kTRUE, Bool_t fixcolrng=kFALSE);
80 virtual ~TEveRGBAPalette();
82 void SetupColorArray()
const;
83 void ClearColorArray();
85 Bool_t WithinVisibleRange(Int_t val)
const;
86 const UChar_t* ColorFromValue(Int_t val)
const;
87 void ColorFromValue(Int_t val, UChar_t* pix, Bool_t alpha=kTRUE)
const;
88 Bool_t ColorFromValue(Int_t val, Int_t defVal, UChar_t* pix, Bool_t alpha=kTRUE)
const;
90 Int_t GetMinVal()
const {
return fMinVal; }
91 Int_t GetMaxVal()
const {
return fMaxVal; }
93 void SetLimits(Int_t low, Int_t high);
94 void SetLimitsScaleMinMax(Int_t low, Int_t high);
95 void SetMinMax(Int_t min, Int_t max);
96 void SetMin(Int_t min);
97 void SetMax(Int_t max);
99 Int_t GetLowLimit()
const {
return fLowLimit; }
100 Int_t GetHighLimit()
const {
return fHighLimit; }
104 Bool_t GetUIDoubleRep()
const {
return fUIDoubleRep; }
105 void SetUIDoubleRep(Bool_t b, Double_t f=1, Double_t c=0);
107 Bool_t GetInterpolate()
const {
return fInterpolate; }
108 void SetInterpolate(Bool_t b);
110 Bool_t GetShowDefValue()
const {
return fShowDefValue; }
111 void SetShowDefValue(Bool_t v) { fShowDefValue = v; }
113 Bool_t GetFixColorRange()
const {
return fFixColorRange; }
114 void SetFixColorRange(Bool_t v);
116 Int_t GetUnderflowAction()
const {
return fUnderflowAction; }
117 Int_t GetOverflowAction()
const {
return fOverflowAction; }
118 void SetUnderflowAction(Int_t a) { fUnderflowAction = a; }
119 void SetOverflowAction(Int_t a) { fOverflowAction = a; }
123 Color_t GetDefaultColor()
const {
return fDefaultColor; }
124 Color_t* PtrDefaultColor() {
return &fDefaultColor; }
125 UChar_t* GetDefaultRGBA() {
return fDefaultRGBA; }
126 const UChar_t* GetDefaultRGBA()
const {
return fDefaultRGBA; }
128 void SetDefaultColor(Color_t ci);
129 void SetDefaultColorPixel(Pixel_t pix);
130 void SetDefaultColorRGBA(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
134 Color_t GetUnderColor()
const {
return fUnderColor; }
135 Color_t* PtrUnderColor() {
return &fUnderColor; }
136 UChar_t* GetUnderRGBA() {
return fUnderRGBA; }
137 const UChar_t* GetUnderRGBA()
const {
return fUnderRGBA; }
139 void SetUnderColor(Color_t ci);
140 void SetUnderColorPixel(Pixel_t pix);
141 void SetUnderColorRGBA(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
145 Color_t GetOverColor()
const {
return fOverColor; }
146 Color_t* PtrOverColor() {
return &fOverColor; }
147 UChar_t* GetOverRGBA() {
return fOverRGBA; }
148 const UChar_t* GetOverRGBA()
const {
return fOverRGBA; }
150 void SetOverColor(Color_t ci);
151 void SetOverColorPixel(Pixel_t pix);
152 void SetOverColorRGBA(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
156 void MinMaxValChanged();
158 ClassDef(TEveRGBAPalette, 0);
167 inline Bool_t TEveRGBAPalette::WithinVisibleRange(Int_t val)
const
169 if ((val < fMinVal && fUnderflowAction == kLA_Cut) ||
170 (val > fMaxVal && fOverflowAction == kLA_Cut))
177 inline const UChar_t* TEveRGBAPalette::ColorFromValue(Int_t val)
const
182 if (!fColorArray) SetupColorArray();
186 if (fUnderflowAction == kLA_Wrap)
187 val = (val+1-fCAMin)%fNBins + fCAMax;
188 else if (fUnderflowAction == kLA_Clip)
193 else if(val > fMaxVal)
195 if (fOverflowAction == kLA_Wrap)
196 val = (val-1-fCAMax)%fNBins + fCAMin;
197 else if (fOverflowAction == kLA_Clip)
203 return fColorArray + 4 * (val - fCAMin);
207 inline void TEveRGBAPalette::ColorFromValue(Int_t val, UChar_t* pix, Bool_t alpha)
const
209 const UChar_t* c = ColorFromValue(val);
210 pix[0] = c[0]; pix[1] = c[1]; pix[2] = c[2];
211 if (alpha) pix[3] = c[3];
215 inline Bool_t TEveRGBAPalette::ColorFromValue(Int_t val, Int_t defVal, UChar_t* pix, Bool_t alpha)
const
219 pix[0] = fDefaultRGBA[0];
220 pix[1] = fDefaultRGBA[1];
221 pix[2] = fDefaultRGBA[2];
222 if (alpha) pix[3] = fDefaultRGBA[3];
229 if (WithinVisibleRange(val)) {
230 ColorFromValue(val, pix, alpha);