#include "TEveRGBAPalette.h"
#include "TColor.h"
#include "TStyle.h"
#include "TMath.h"
ClassImp(TEveRGBAPalette)
TEveRGBAPalette::TEveRGBAPalette() :
TObject(),
TEveRefCnt(),
fLowLimit(0), fHighLimit(0), fMinVal(0), fMaxVal(0), fNBins(0),
fInterpolate (kFALSE),
fShowDefValue (kTRUE),
fUnderflowAction (kLA_Cut),
fOverflowAction (kLA_Clip),
fDefaultColor(0),
fUnderColor (1),
fOverColor (2),
fColorArray (0)
{
SetLimits(0, 1024);
SetMinMax(0, 512);
}
TEveRGBAPalette::TEveRGBAPalette(Int_t min, Int_t max, Bool_t interp, Bool_t showdef) :
TObject(),
TEveRefCnt(),
fLowLimit(0), fHighLimit(0), fMinVal(0), fMaxVal(0), fNBins(0),
fInterpolate (interp),
fShowDefValue (showdef),
fUnderflowAction (kLA_Cut),
fOverflowAction (kLA_Clip),
fDefaultColor(0),
fUnderColor (1),
fOverColor (2),
fColorArray (0)
{
SetLimits(min, max);
SetMinMax(min, max);
}
TEveRGBAPalette::~TEveRGBAPalette()
{
delete [] fColorArray;
}
void TEveRGBAPalette::SetupColor(Int_t val, UChar_t* pixel) const
{
using namespace TMath;
Float_t div = Max(1, fMaxVal - fMinVal);
Int_t nCol = gStyle->GetNumberOfColors();
Float_t f;
if (val >= fMaxVal) f = nCol - 1;
else if (val <= fMinVal) f = 0;
else f = (val - fMinVal)/div*(nCol - 1);
if (fInterpolate) {
Int_t bin = (Int_t) f;
Float_t f1 = f - bin, f2 = 1.0f - f1;
TEveUtil::ColorFromIdx(f1, gStyle->GetColorPalette(bin),
f2, gStyle->GetColorPalette(Min(bin + 1, nCol - 1)),
pixel);
} else {
TEveUtil::ColorFromIdx(gStyle->GetColorPalette((Int_t) Nint(f)), pixel);
}
}
void TEveRGBAPalette::SetupColorArray() const
{
if (fColorArray)
delete [] fColorArray;
fColorArray = new UChar_t [4 * fNBins];
UChar_t* p = fColorArray;
for(Int_t v=fMinVal; v<=fMaxVal; ++v, p+=4)
SetupColor(v, p);
}
void TEveRGBAPalette::ClearColorArray()
{
if (fColorArray) {
delete [] fColorArray;
fColorArray = 0;
}
}
void TEveRGBAPalette::SetLimits(Int_t low, Int_t high)
{
fLowLimit = low;
fHighLimit = high;
Bool_t changed = kFALSE;
if (fMaxVal < fLowLimit) { SetMax(fLowLimit); changed = kTRUE; }
if (fMinVal < fLowLimit) { SetMin(fLowLimit); changed = kTRUE; }
if (fMinVal > fHighLimit) { SetMin(fHighLimit); changed = kTRUE; }
if (fMaxVal > fHighLimit) { SetMax(fHighLimit); changed = kTRUE; }
if (changed)
ClearColorArray();
}
void TEveRGBAPalette::SetLimitsScaleMinMax(Int_t low, Int_t high)
{
Float_t rng_old = fHighLimit - fLowLimit;
Float_t rng_new = high - low;
fMinVal = TMath::Nint(low + (fMinVal - fLowLimit)*rng_new/rng_old);
fMaxVal = TMath::Nint(low + (fMaxVal - fLowLimit)*rng_new/rng_old);
fLowLimit = low;
fHighLimit = high;
fNBins = fMaxVal - fMinVal + 1;
ClearColorArray();
}
void TEveRGBAPalette::SetMin(Int_t min)
{
fMinVal = TMath::Min(min, fMaxVal);
fNBins = fMaxVal - fMinVal + 1;
ClearColorArray();
}
void TEveRGBAPalette::SetMax(Int_t max)
{
fMaxVal = TMath::Max(max, fMinVal);
fNBins = fMaxVal - fMinVal + 1;
ClearColorArray();
}
void TEveRGBAPalette::SetMinMax(Int_t min, Int_t max)
{
fMinVal = min;
fMaxVal = max;
fNBins = fMaxVal - fMinVal + 1;
ClearColorArray();
}
void TEveRGBAPalette::SetInterpolate(Bool_t b)
{
fInterpolate = b;
ClearColorArray();
}
void TEveRGBAPalette::SetDefaultColor(Color_t ci)
{
fDefaultColor = ci;
TEveUtil::ColorFromIdx(ci, fDefaultRGBA, kTRUE);
}
void TEveRGBAPalette::SetDefaultColor(Pixel_t pix)
{
SetDefaultColor(Color_t(TColor::GetColor(pix)));
}
void TEveRGBAPalette::SetDefaultColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
{
fDefaultColor = Color_t(TColor::GetColor(r, g, b));
fDefaultRGBA[0] = r;
fDefaultRGBA[1] = g;
fDefaultRGBA[2] = b;
fDefaultRGBA[3] = a;
}
void TEveRGBAPalette::SetUnderColor(Color_t ci)
{
fUnderColor = ci;
TEveUtil::ColorFromIdx(ci, fUnderRGBA, kTRUE);
}
void TEveRGBAPalette::SetUnderColor(Pixel_t pix)
{
SetUnderColor(Color_t(TColor::GetColor(pix)));
}
void TEveRGBAPalette::SetUnderColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
{
fUnderColor = Color_t(TColor::GetColor(r, g, b));
fUnderRGBA[0] = r;
fUnderRGBA[1] = g;
fUnderRGBA[2] = b;
fUnderRGBA[3] = a;
}
void TEveRGBAPalette::SetOverColor(Color_t ci)
{
fOverColor = ci;
TEveUtil::ColorFromIdx(ci, fOverRGBA, kTRUE);
}
void TEveRGBAPalette::SetOverColor(Pixel_t pix)
{
SetOverColor(Color_t(TColor::GetColor(pix)));
}
void TEveRGBAPalette::SetOverColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
{
fOverColor = Color_t(TColor::GetColor(r, g, b));
fOverRGBA[0] = r;
fOverRGBA[1] = g;
fOverRGBA[2] = b;
fOverRGBA[3] = a;
}
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.