28 ClassImp(TEveRGBAPalette);
33 TEveRGBAPalette::TEveRGBAPalette() :
34 TObject(), TQObject(),
39 fLowLimit(0), fHighLimit(0), fMinVal(0), fMaxVal(0),
41 fUIDoubleRep (kFALSE),
43 fShowDefValue (kTRUE),
44 fFixColorRange (kFALSE),
45 fUnderflowAction (kLA_Cut),
46 fOverflowAction (kLA_Clip),
52 fNBins(0), fCAMin(0), fCAMax(0), fColorArray(0)
65 TEveRGBAPalette::TEveRGBAPalette(Int_t min, Int_t max, Bool_t interp,
66 Bool_t showdef, Bool_t fixcolrng) :
67 TObject(), TQObject(),
72 fLowLimit(0), fHighLimit(0), fMinVal(0), fMaxVal(0),
74 fUIDoubleRep (kFALSE),
75 fInterpolate (interp),
76 fShowDefValue (showdef),
77 fFixColorRange (fixcolrng),
78 fUnderflowAction (kLA_Cut),
79 fOverflowAction (kLA_Clip),
85 fNBins(0), fCAMin(0), fCAMax(0), fColorArray(0)
98 TEveRGBAPalette::~TEveRGBAPalette()
100 delete [] fColorArray;
106 void TEveRGBAPalette::SetupColor(Int_t val, UChar_t* pixel)
const
108 using namespace TMath;
109 Float_t div = Max(1, fCAMax - fCAMin);
110 Int_t nCol = gStyle->GetNumberOfColors();
113 if (val >= fCAMax) f = nCol - 1;
114 else if (val <= fCAMin) f = 0;
115 else f = (val - fCAMin)/div*(nCol - 1);
118 Int_t bin = (Int_t) f;
119 Float_t f2 = f - bin, f1 = 1.0f - f2;
120 TEveUtil::ColorFromIdx(f1, gStyle->GetColorPalette(bin),
121 f2, gStyle->GetColorPalette(Min(bin + 1, nCol - 1)),
124 TEveUtil::ColorFromIdx(gStyle->GetColorPalette((Int_t) Nint(f)), pixel);
131 void TEveRGBAPalette::SetupColorArray()
const
134 delete [] fColorArray;
136 if (fFixColorRange) {
137 fCAMin = fLowLimit; fCAMax = fHighLimit;
139 fCAMin = fMinVal; fCAMax = fMaxVal;
141 fNBins = fCAMax - fCAMin + 1;
143 fColorArray =
new UChar_t [4 * fNBins];
144 UChar_t* p = fColorArray;
145 for(Int_t v = fCAMin; v <= fCAMax; ++v, p+=4)
152 void TEveRGBAPalette::ClearColorArray()
155 delete [] fColorArray;
157 fNBins = fCAMin = fCAMax = 0;
165 void TEveRGBAPalette::SetLimits(Int_t low, Int_t high)
170 if (fMaxVal < fLowLimit) SetMax(fLowLimit);
171 if (fMinVal < fLowLimit) SetMin(fLowLimit);
172 if (fMinVal > fHighLimit) SetMin(fHighLimit);
173 if (fMaxVal > fHighLimit) SetMax(fHighLimit);
181 void TEveRGBAPalette::SetLimitsScaleMinMax(Int_t low, Int_t high)
183 Float_t rng_old = fHighLimit - fLowLimit;
184 Float_t rng_new = high - low;
186 fMinVal = TMath::Nint(low + (fMinVal - fLowLimit)*rng_new/rng_old);
187 fMaxVal = TMath::Nint(low + (fMaxVal - fLowLimit)*rng_new/rng_old);
197 void TEveRGBAPalette::SetMin(Int_t min)
199 fMinVal = TMath::Min(min, fMaxVal);
206 void TEveRGBAPalette::SetMax(Int_t max)
208 fMaxVal = TMath::Max(max, fMinVal);
215 void TEveRGBAPalette::SetMinMax(Int_t min, Int_t max)
227 void TEveRGBAPalette::SetUIDoubleRep(Bool_t b, Double_t f, Double_t c)
241 void TEveRGBAPalette::SetInterpolate(Bool_t b)
252 void TEveRGBAPalette::SetFixColorRange(Bool_t v)
261 void TEveRGBAPalette::SetDefaultColor(Color_t ci)
264 TEveUtil::ColorFromIdx(ci, fDefaultRGBA, kTRUE);
270 void TEveRGBAPalette::SetDefaultColorPixel(Pixel_t pix)
272 SetDefaultColor(Color_t(TColor::GetColor(pix)));
278 void TEveRGBAPalette::SetDefaultColorRGBA(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
280 fDefaultColor = Color_t(TColor::GetColor(r, g, b));
290 void TEveRGBAPalette::SetUnderColor(Color_t ci)
293 TEveUtil::ColorFromIdx(ci, fUnderRGBA, kTRUE);
299 void TEveRGBAPalette::SetUnderColorPixel(Pixel_t pix)
301 SetUnderColor(Color_t(TColor::GetColor(pix)));
307 void TEveRGBAPalette::SetUnderColorRGBA(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
309 fUnderColor = Color_t(TColor::GetColor(r, g, b));
319 void TEveRGBAPalette::SetOverColor(Color_t ci)
322 TEveUtil::ColorFromIdx(ci, fOverRGBA, kTRUE);
328 void TEveRGBAPalette::SetOverColorPixel(Pixel_t pix)
330 SetOverColor(Color_t(TColor::GetColor(pix)));
336 void TEveRGBAPalette::SetOverColorRGBA(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
338 fOverColor = Color_t(TColor::GetColor(r, g, b));
351 void TEveRGBAPalette::MinMaxValChanged()
353 Emit(
"MinMaxValChanged()");