ROOT logo
// @(#)root/gl:$Id: TGLPlotPainter.cxx 31671 2009-12-08 15:22:31Z matevz $
// Author:  Timur Pocheptsov  14/06/2006

/*************************************************************************
 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/
#include <iostream>
#include <cstdio>

#include "TVirtualPad.h"
#include "TVirtualPS.h"
#include "TVirtualX.h"
#include "TGaxis.h"
#include "TGraph.h"
#include "TStyle.h"
#include "TError.h"
#include "TColor.h"
#include "TAxis.h"
#include "TMath.h"
#include "TH1.h"
#include "TH3.h"
#include "TF3.h"

#include "TGLPlotPainter.h"
#include "TGLPlotCamera.h"
#include "TGLIncludes.h"
#include "TGLAdapter.h"
#include "TGLOutput.h"
#include "TGL5D.h"
#include "gl2ps.h"

//______________________________________________________________________________
//
// Base class for plot-painters that provide GL rendering of various
// 2D and 3D histograms, functions and parametric surfaces.

ClassImp(TGLPlotPainter)

//______________________________________________________________________________
TGLPlotPainter::TGLPlotPainter(TH1 *hist, TGLPlotCamera *camera, TGLPlotCoordinates *coord,
                               Bool_t xoy, Bool_t xoz, Bool_t yoz)
                  : fPadColor(0),
                    fPadPhi(45.),
                    fPadTheta(0.),
                    fHist(hist),
                    fXAxis(hist->GetXaxis()),
                    fYAxis(hist->GetYaxis()),
                    fZAxis(hist->GetZaxis()),
                    fCoord(coord),
                    fCamera(camera),
                    fUpdateSelection(kTRUE),
                    fSelectionPass(kFALSE),
                    fSelectedPart(0),
                    fXOZSectionPos(0.),
                    fYOZSectionPos(0.),
                    fXOYSectionPos(0.),
                    fBackBox(xoy, xoz, yoz),
                    fBoxCut(&fBackBox),
                    fHighColor(kFALSE),
                    fSelectionBase(kTrueColorSelectionBase),
                    fDrawPalette(kFALSE)
{
   //TGLPlotPainter's ctor.
   if (gPad) {
      fPadPhi   = gPad->GetPhi();
      fPadTheta = gPad->GetTheta();
   }
}

//______________________________________________________________________________
TGLPlotPainter::TGLPlotPainter(TGL5DDataSet *data, TGLPlotCamera *camera, TGLPlotCoordinates *coord)
                  : fPadColor(0),
                    fPadPhi(45.),
                    fPadTheta(0.),
                    fHist(0),
                    fXAxis(data->GetXAxis()),
                    fYAxis(data->GetYAxis()),
                    fZAxis(data->GetZAxis()),
                    fCoord(coord),
                    fCamera(camera),
                    fUpdateSelection(kTRUE),
                    fSelectionPass(kFALSE),
                    fSelectedPart(0),
                    fXOZSectionPos(0.),
                    fYOZSectionPos(0.),
                    fXOYSectionPos(0.),
                    fBackBox(kFALSE, kFALSE, kFALSE),
                    fBoxCut(&fBackBox),
                    fHighColor(kFALSE),
                    fSelectionBase(kTrueColorSelectionBase),
                    fDrawPalette(kFALSE)
{
   //TGLPlotPainter's ctor.
   if (gPad) {
      fPadPhi   = gPad->GetPhi();
      fPadTheta = gPad->GetTheta();
   }
}

//______________________________________________________________________________
TGLPlotPainter::TGLPlotPainter(TGLPlotCamera *camera)
                  : fPadColor(0),
                    fPadPhi(45.),
                    fPadTheta(0.),
                    fHist(0),
                    fXAxis(0),
                    fYAxis(0),
                    fZAxis(0),
                    fCoord(0),
                    fCamera(camera),
                    fUpdateSelection(kTRUE),
                    fSelectionPass(kFALSE),
                    fSelectedPart(0),
                    fXOZSectionPos(0.),
                    fYOZSectionPos(0.),
                    fXOYSectionPos(0.),
                    fBackBox(kFALSE, kFALSE, kFALSE),
                    fBoxCut(&fBackBox),
                    fHighColor(kFALSE),
                    fSelectionBase(kTrueColorSelectionBase),
                    fDrawPalette(kFALSE)
{
   //TGLPlotPainter's ctor.
   if (gPad) {
      fPadPhi   = gPad->GetPhi();
      fPadTheta = gPad->GetTheta();
   }
}

//______________________________________________________________________________
void TGLPlotPainter::Paint()
{
   //Draw lego/surf/whatever you can.
   fHighColor = kFALSE;
   fSelectionBase = fHighColor ? kHighColorSelectionBase : kTrueColorSelectionBase;

   int vp[4] = {};
   glGetIntegerv(GL_VIEWPORT, vp);
      
   //GL pad painter does not use depth test,
   //so, switch it on now.
   glDepthMask(GL_TRUE);//[0
   //
   InitGL();
   //Save material/light properties in a stack.
   glPushAttrib(GL_LIGHTING_BIT);

   //Save projection and modelview matrix, used by glpad.
   SaveProjectionMatrix();
   SaveModelviewMatrix();
      
   //glOrtho etc.
   fCamera->SetCamera();
   //
   glClear(GL_DEPTH_BUFFER_BIT);
   //
/*   if (fCamera->ViewportChanged()) {
      std::cout<<"Set need update\n";
      fUpdateSelection = kTRUE;
   }*/
   //Set light.
   const Float_t pos[] = {0.f, 0.f, 0.f, 1.f};
   glLightfv(GL_LIGHT0, GL_POSITION, pos);
   //Set transformation - shift and rotate the scene.
   fCamera->Apply(fPadPhi, fPadTheta);
   fBackBox.FindFrontPoint();
   
   if (gVirtualPS)
      PrintPlot();
   DrawPlot();
   //Restore material properties from stack.
   glPopAttrib();
   //
   DeInitGL();//Disable/enable, what concrete plot painter enabled/disabled

   //Restore projection and modelview matrices.
   RestoreProjectionMatrix();
   RestoreModelviewMatrix();

   glViewport(vp[0], vp[1], vp[2], vp[3]);
   //GL pad painter does not use depth test, so,
   //switch it off now.
   glDepthMask(GL_FALSE);//0]
   
   if (fCoord && fCoord->GetCoordType() == kGLCartesian) {
   
      Bool_t old = gPad->TestBit(TGraph::kClipFrame);
      if (!old)
         gPad->SetBit(TGraph::kClipFrame);
      const Int_t viewport[] = {fCamera->GetX(), fCamera->GetY(), fCamera->GetWidth(), fCamera->GetHeight()};
      Rgl::DrawAxes(fBackBox.GetFrontPoint(), viewport, fBackBox.Get2DBox(), fCoord, fXAxis, fYAxis, fZAxis);
      if (fDrawPalette)
         DrawPaletteAxis();
         
      if (!old)
         gPad->ResetBit(TGraph::kClipFrame);
   } else if(fDrawPalette)
      DrawPaletteAxis();
}

//______________________________________________________________________________
void TGLPlotPainter::PrintPlot()const
{
   // Generate PS using gl2ps
   using namespace std;
   
   TGLOutput::StartEmbeddedPS();
   FILE *output = fopen(gVirtualPS->GetName(), "a");
   Int_t gl2psFormat = GL2PS_EPS;
   Int_t gl2psSort   = GL2PS_BSP_SORT;
   Int_t buffsize    = 0;
   Int_t state       = GL2PS_OVERFLOW;
   GLint gl2psoption = GL2PS_USE_CURRENT_VIEWPORT | 
                       GL2PS_SILENT               |
                       GL2PS_BEST_ROOT            |
                       GL2PS_OCCLUSION_CULL       |
                       0;

   while (state == GL2PS_OVERFLOW) {
      buffsize += 1024*1024;
      gl2psBeginPage ("ROOT Scene Graph", "ROOT", NULL,
                      gl2psFormat, gl2psSort, gl2psoption,
                      GL_RGBA, 0, NULL,0, 0, 0,
                      buffsize, output, NULL);
      DrawPlot();
      state = gl2psEndPage();
   }

   fclose(output);
   TGLOutput::CloseEmbeddedPS();
   glFlush();
}

//______________________________________________________________________________
Bool_t TGLPlotPainter::PlotSelected(Int_t px, Int_t py)
{
   //Read color buffer content to find selected object
   if (fUpdateSelection) {
      //Save projection and modelview matrix, used by glpad.
      glMatrixMode(GL_PROJECTION);//[1
      glPushMatrix();
      glMatrixMode(GL_MODELVIEW);//[2
      glPushMatrix();
   
      fSelectionPass = kTRUE;
      fCamera->SetCamera();
      
      glDepthMask(GL_TRUE);
      glClearColor(0.f, 0.f, 0.f, 0.f);
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      
      fCamera->Apply(fPadPhi, fPadTheta);
      DrawPlot();
      
      glFinish();
      //fSelection.ReadColorBuffer(fCamera->GetWidth(), fCamera->GetHeight());
      fSelection.ReadColorBuffer(fCamera->GetX(), fCamera->GetY(), fCamera->GetWidth(), fCamera->GetHeight());
      fSelectionPass   = kFALSE;
      fUpdateSelection = kFALSE;
      
      glDepthMask(GL_FALSE);
      glDisable(GL_DEPTH_TEST);
      
      //Restore projection and modelview matrices.
      glMatrixMode(GL_PROJECTION);//1]
      glPopMatrix();
      glMatrixMode(GL_MODELVIEW);//2]
      glPopMatrix();
   }
   
   //Convert from window top-bottom into gl bottom-top.
   px -= Int_t(gPad->GetXlowNDC() * gPad->GetWw());
   py -= Int_t(gPad->GetWh() - gPad->YtoAbsPixel(gPad->GetY1()));
   //py = fCamera->GetHeight() - py;
   //Y is a number of a row, x - column.
   std::swap(px, py);
   Int_t newSelected(Rgl::ColorToObjectID(fSelection.GetPixelColor(px, py), fHighColor));

   if (newSelected != fSelectedPart) {
      //New object was selected (or surface deselected) - re-paint.
      fSelectedPart = newSelected;
      gPad->Update();
   }

   return fSelectedPart ? kTRUE : kFALSE;
}

/*
//______________________________________________________________________________
void TGLPlotPainter::SetGLContext(Int_t context)
{
   //One plot can be painted in several gl contexts.
//   fGLContext = context;
}
 */
//______________________________________________________________________________
void TGLPlotPainter::SetPadColor(const TColor *c)
{
   //Used in a pad.
   fPadColor = c;
}

//______________________________________________________________________________
void TGLPlotPainter::SetFrameColor(const TColor *c)
{
   //Set plot's back box color.
   fBackBox.SetFrameColor(c);
}

//______________________________________________________________________________
void TGLPlotPainter::InvalidateSelection()
{
   //Selection must be updated.
   fUpdateSelection = kTRUE;
}

//______________________________________________________________________________
const TColor *TGLPlotPainter::GetPadColor()const
{
   //Get pad color.
   return fPadColor;
}

//______________________________________________________________________________
void TGLPlotPainter::MoveSection(Int_t px, Int_t py)
{
   //Create dynamic profile using selected plane
   const TGLVertex3 *frame = fBackBox.Get3DBox();
   const Int_t frontPoint  = fBackBox.GetFrontPoint();

   if (fSelectedPart == 1) {
      fXOYSectionPos = frame[0].Z();
      fSelectedPart = 6;
   } else if (fSelectedPart == 2) {
      if (frontPoint == 2) {
         fXOZSectionPos = frame[0].Y();
         fSelectedPart = 4;
      } else if (!frontPoint) {
         fXOZSectionPos = frame[2].Y();
         fSelectedPart = 4;
      } else if (frontPoint == 1) {
         fYOZSectionPos = frame[0].X();
         fSelectedPart = 5;
      } else if (frontPoint == 3) {
         fYOZSectionPos = frame[1].X();
         fSelectedPart = 5;
      }
   } else if (fSelectedPart == 3) {
      if (frontPoint == 2) {
         fYOZSectionPos = frame[0].X();
         fSelectedPart = 5;
      } else if (!frontPoint) {
         fYOZSectionPos = frame[1].X();
         fSelectedPart = 5;
      } else if (frontPoint == 1) {
         fXOZSectionPos = frame[2].Y();
         fSelectedPart = 4;
      } else if (frontPoint == 3) {
         fXOZSectionPos = frame[0].Y();
         fSelectedPart = 4;
      }
   }

   Double_t mv[16] = {0.};
   glGetDoublev(GL_MODELVIEW_MATRIX, mv);
   Double_t pr[16] = {0.};
   glGetDoublev(GL_PROJECTION_MATRIX, pr);
   Int_t vp[4] = {0};
   glGetIntegerv(GL_VIEWPORT, vp);
   Double_t winVertex[3] = {0.};

   if (fSelectedPart == 6)
      gluProject(0., 0., fXOYSectionPos, mv, pr, vp, &winVertex[0], &winVertex[1], &winVertex[2]);
   else
      gluProject(fSelectedPart == 5 ? fYOZSectionPos : 0.,
                 fSelectedPart == 4 ? fXOZSectionPos : 0.,
                 0., mv, pr, vp,
                 &winVertex[0], &winVertex[1], &winVertex[2]);
   winVertex[0] += px - fMousePosition.fX;
   winVertex[1] += py - fMousePosition.fY;
   Double_t newPoint[3] = {0.};
   gluUnProject(winVertex[0], winVertex[1], winVertex[2], mv, pr, vp,
                newPoint, newPoint + 1, newPoint + 2);

   if (fSelectedPart == 4)
      fXOZSectionPos = newPoint[1];
   else if (fSelectedPart == 5)
      fYOZSectionPos = newPoint[0];
   else
      fXOYSectionPos = newPoint[2];
}

//______________________________________________________________________________
void TGLPlotPainter::DrawSections()const
{
   //Draw sections (if any).
   const TGLVertex3 *frame = fBackBox.Get3DBox();

   if (fXOZSectionPos > frame[0].Y()) {
      if (fXOZSectionPos > frame[2].Y())
         fXOZSectionPos = frame[2].Y();
      const TGLVertex3 v1(frame[0].X(), fXOZSectionPos, frame[0].Z());
      const TGLVertex3 v2(frame[4].X(), fXOZSectionPos, frame[4].Z());
      const TGLVertex3 v3(frame[5].X(), fXOZSectionPos, frame[5].Z());
      const TGLVertex3 v4(frame[1].X(), fXOZSectionPos, frame[1].Z());

      if (fSelectionPass)
         Rgl::ObjectIDToColor(4, fHighColor);
      else if (fSelectedPart == 4)
         glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, Rgl::gBlueEmission);

      glEnable(GL_POLYGON_OFFSET_FILL);
      glPolygonOffset(1.f, 1.f);
      Rgl::DrawQuadFilled(v1, v2, v3, v4, TGLVector3(0., 1., 0.));
      glDisable(GL_POLYGON_OFFSET_FILL);
      //Zlevels here.
      if (!fSelectionPass) {
         if (fSelectedPart == 4)
            glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, Rgl::gNullEmission);
         const TGLDisableGuard lightGuard(GL_LIGHTING);
         const TGLEnableGuard  blendGuard(GL_BLEND);
         const TGLEnableGuard  lineSmooth(GL_LINE_SMOOTH);
         glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
         glDepthMask(GL_FALSE);
         DrawSectionXOZ();
         //Draw z-levels
         const TGLEnableGuard stippleGuard(GL_LINE_STIPPLE);//[1-1]
         const UShort_t stipple = 0x5555;
         glLineStipple(1, stipple);

         glColor3d(0., 0., 0.);
         glBegin(GL_LINES);
         for (UInt_t i = 0; i < fZLevels.size(); ++i) {
            glVertex3d(fBackBox.Get3DBox()[1].X(), fXOZSectionPos, fZLevels[i]);
            glVertex3d(fBackBox.Get3DBox()[0].X(), fXOZSectionPos, fZLevels[i]);
         }
         glEnd();
         glDepthMask(GL_TRUE);
      }
   }

   if (fYOZSectionPos > frame[0].X()) {
      if (fYOZSectionPos > frame[1].X())
         fYOZSectionPos = frame[1].X();
      TGLVertex3 v1(fYOZSectionPos, frame[0].Y(), frame[0].Z());
      TGLVertex3 v2(fYOZSectionPos, frame[3].Y(), frame[3].Z());
      TGLVertex3 v3(fYOZSectionPos, frame[7].Y(), frame[7].Z());
      TGLVertex3 v4(fYOZSectionPos, frame[4].Y(), frame[4].Z());

      if (fSelectionPass) {
         Rgl::ObjectIDToColor(5, fHighColor);
      } else if (fSelectedPart == 5)
         glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, Rgl::gBlueEmission);

      glEnable(GL_POLYGON_OFFSET_FILL);
      glPolygonOffset(1.f, 1.f);
      Rgl::DrawQuadFilled(v1, v2, v3, v4, TGLVector3(1., 0., 0.));
      glDisable(GL_POLYGON_OFFSET_FILL);

      if (!fSelectionPass) {
         if (fSelectedPart == 5)
            glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, Rgl::gNullEmission);
         const TGLDisableGuard lightHuard(GL_LIGHTING);
         const TGLEnableGuard blendGuard(GL_BLEND);
         const TGLEnableGuard lineSmooth(GL_LINE_SMOOTH);
         glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
         glDepthMask(GL_FALSE);
         DrawSectionYOZ();
         //Draw z-levels
         const TGLEnableGuard stippleGuard(GL_LINE_STIPPLE);//[1-1]
         glLineStipple(1, 0x5555);

         glColor3d(0., 0., 0.);
         glBegin(GL_LINES);
         for (UInt_t i = 0; i < fZLevels.size(); ++i) {
            glVertex3d(fYOZSectionPos, fBackBox.Get3DBox()[3].Y(), fZLevels[i]);
            glVertex3d(fYOZSectionPos, fBackBox.Get3DBox()[0].Y(), fZLevels[i]);
         }
         glEnd();
         glDepthMask(GL_TRUE);
      }
   }

   if (fXOYSectionPos > frame[0].Z()) {
      if (fXOYSectionPos > frame[4].Z())
         fXOYSectionPos = frame[4].Z();
      TGLVertex3 v1(frame[0].X(), frame[0].Y(), fXOYSectionPos);
      TGLVertex3 v2(frame[1].X(), frame[1].Y(), fXOYSectionPos);
      TGLVertex3 v3(frame[2].X(), frame[2].Y(), fXOYSectionPos);
      TGLVertex3 v4(frame[3].X(), frame[3].Y(), fXOYSectionPos);

      if (fSelectionPass) {
         Rgl::ObjectIDToColor(6, fHighColor);
      } else if (fSelectedPart == 6)
         glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, Rgl::gBlueEmission);

      glEnable(GL_POLYGON_OFFSET_FILL);
      glPolygonOffset(1.f, 1.f);
      //if (fSelectionPass || fSelectedPart == 6)
      Rgl::DrawQuadFilled(v1, v2, v3, v4, TGLVector3(0., 0., 1.));
      glDisable(GL_POLYGON_OFFSET_FILL);

      if (!fSelectionPass) {
         if (fSelectedPart == 6)
            glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, Rgl::gNullEmission);
         const TGLDisableGuard lightGuard(GL_LIGHTING);
         const TGLEnableGuard blendGuard(GL_BLEND);
         const TGLEnableGuard lineSmooth(GL_LINE_SMOOTH);
         glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
         glDepthMask(GL_FALSE);
         DrawSectionXOY();
         glDepthMask(GL_TRUE);
      }
   }
}

//______________________________________________________________________________
void TGLPlotPainter::ClearBuffers()const
{
/*
   // Clear buffer.
   Float_t rgb[3] = {1.f, 1.f, 1.f};
   if (const TColor *color = GetPadColor())
      color->GetRGB(rgb[0], rgb[1], rgb[2]);
   glClearColor(rgb[0], rgb[1], rgb[2], 1.);
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   */
}

//______________________________________________________________________________
void TGLPlotPainter::DrawPaletteAxis()const
{
   //Draw. Palette. Axis.
}

//______________________________________________________________________________
void TGLPlotPainter::SaveModelviewMatrix()const
{
   glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
}

//______________________________________________________________________________
void TGLPlotPainter::SaveProjectionMatrix()const
{
   glMatrixMode(GL_PROJECTION);
   glPushMatrix();
}

//______________________________________________________________________________
void TGLPlotPainter::RestoreModelviewMatrix()const
{
   glMatrixMode(GL_MODELVIEW);
   glPopMatrix();
}

//______________________________________________________________________________
void TGLPlotPainter::RestoreProjectionMatrix()const
{
   glMatrixMode(GL_PROJECTION);
   glPopMatrix();
}

//______________________________________________________________________________
//
// Helper class for plot-painters holding information about axis
// ranges, numbers of bins and flags if certain axis is logartihmic.

ClassImp(TGLPlotCoordinates)

//______________________________________________________________________________
TGLPlotCoordinates::TGLPlotCoordinates()
                        : fCoordType(kGLCartesian),
                          fXScale(1.),
                          fYScale(1.),
                          fZScale(1.),
                          fXLog(kFALSE),
                          fYLog(kFALSE),
                          fZLog(kFALSE),
                          fModified(kFALSE),
                          fFactor(1.)
{
   //Constructor.
}

//______________________________________________________________________________
TGLPlotCoordinates::~TGLPlotCoordinates()
{
   //Destructor.
}

//______________________________________________________________________________
void TGLPlotCoordinates::SetCoordType(EGLCoordType type)
{
   //If coord type was changed, plot must reset sections (if any),
   //set fModified.
   if (fCoordType != type) {
      fModified = kTRUE;
      fCoordType = type;
   }
}

//______________________________________________________________________________
EGLCoordType TGLPlotCoordinates::GetCoordType()const
{
   // Get coordinates type.

   return fCoordType;
}

//______________________________________________________________________________
void TGLPlotCoordinates::SetXLog(Bool_t xLog)
{
   //If log changed, sections must be reset,
   //set fModified.
   if (fXLog != xLog) {
      fXLog = xLog;
      fModified = kTRUE;
   }
}

//______________________________________________________________________________
Bool_t TGLPlotCoordinates::GetXLog()const
{
   // Get X log.

   return fXLog;
}

//______________________________________________________________________________
void TGLPlotCoordinates::SetYLog(Bool_t yLog)
{
   //If log changed, sections must be reset,
   //set fModified.
   if (fYLog != yLog) {
      fYLog = yLog;
      fModified = kTRUE;
   }
}

//______________________________________________________________________________
Bool_t TGLPlotCoordinates::GetYLog()const
{
   // Get Y log.

   return fYLog;
}

//______________________________________________________________________________
void TGLPlotCoordinates::SetZLog(Bool_t zLog)
{
   //If log changed, sections must be reset,
   //set fModified.
   if (fZLog != zLog) {
      fZLog = zLog;
      fModified = kTRUE;
   }
}

//______________________________________________________________________________
Bool_t TGLPlotCoordinates::GetZLog()const
{
   // Get Z log.

   return fZLog;
}

//______________________________________________________________________________
void TGLPlotCoordinates::ResetModified()
{
   // Reset modified.

   fModified = !fModified;//kFALSE;
}

//______________________________________________________________________________
Bool_t TGLPlotCoordinates::Modified()const
{
   // Modified.

   return fModified;
}

//______________________________________________________________________________
Bool_t TGLPlotCoordinates::SetRanges(const TH1 *hist, Bool_t errors, Bool_t zBins)
{
   //Set bin ranges, ranges.
   switch (fCoordType) {
   case kGLPolar:
      return SetRangesPolar(hist);
   case kGLCylindrical:
      return SetRangesCylindrical(hist);
   case kGLSpherical:
      return SetRangesSpherical(hist);
   case kGLCartesian:
   default:
      return SetRangesCartesian(hist, errors, zBins);
   }
}

//______________________________________________________________________________
Int_t TGLPlotCoordinates::GetNXBins()const
{
   //Number of X bins.
   return fXBins.second - fXBins.first + 1;
}

//______________________________________________________________________________
Int_t TGLPlotCoordinates::GetNYBins()const
{
   //Number of Y bins.
   return fYBins.second - fYBins.first + 1;
}

//______________________________________________________________________________
Int_t TGLPlotCoordinates::GetNZBins()const
{
   //Number of Z bins.
   return fZBins.second - fZBins.first + 1;
}

//______________________________________________________________________________
const Rgl::BinRange_t &TGLPlotCoordinates::GetXBins()const
{
   //X bins range.
   return fXBins;
}

//______________________________________________________________________________
const Rgl::BinRange_t &TGLPlotCoordinates::GetYBins()const
{
   //Y bins range.
   return fYBins;
}

//______________________________________________________________________________
const Rgl::BinRange_t &TGLPlotCoordinates::GetZBins()const
{
   //Z bins range.
   return fZBins;
}

//______________________________________________________________________________
const Rgl::Range_t &TGLPlotCoordinates::GetXRange()const
{
   //X range.
   return fXRange;
}

//______________________________________________________________________________
Double_t TGLPlotCoordinates::GetXLength()const
{
   //X length.
   return fXRange.second - fXRange.first;
}

//______________________________________________________________________________
const Rgl::Range_t &TGLPlotCoordinates::GetYRange()const
{
   //Y range.
   return fYRange;
}

//______________________________________________________________________________
Double_t TGLPlotCoordinates::GetYLength()const
{
   //Y length.
   return fYRange.second - fYRange.first;
}


//______________________________________________________________________________
const Rgl::Range_t &TGLPlotCoordinates::GetZRange()const
{
   //Z range.
   return fZRange;
}

//______________________________________________________________________________
Double_t TGLPlotCoordinates::GetZLength()const
{
   //Z length.
   return fZRange.second - fZRange.first;
}


//______________________________________________________________________________
const Rgl::Range_t &TGLPlotCoordinates::GetXRangeScaled()const
{
   //Scaled range.
   return fXRangeScaled;
}

//______________________________________________________________________________
const Rgl::Range_t &TGLPlotCoordinates::GetYRangeScaled()const
{
   //Scaled range.
   return fYRangeScaled;
}

//______________________________________________________________________________
const Rgl::Range_t &TGLPlotCoordinates::GetZRangeScaled()const
{
   //Scaled range.
   return fZRangeScaled;
}

//______________________________________________________________________________
Double_t TGLPlotCoordinates::GetFactor()const
{
   // Get factor.

   return fFactor;
}

namespace {

   Bool_t FindAxisRange(const TAxis *axis, Bool_t log, Rgl::BinRange_t &bins, Rgl::Range_t &range);
   Bool_t FindAxisRange(const TH1 *hist, Bool_t logZ, const Rgl::BinRange_t &xBins,
                        const Rgl::BinRange_t &yBins, Rgl::Range_t &zRange,
                        Double_t &factor, Bool_t errors);

}

//______________________________________________________________________________
Bool_t TGLPlotCoordinates::SetRangesCartesian(const TH1 *hist, Bool_t errors, Bool_t zAsBins)
{
   //Set bin ranges, ranges, etc.
   Rgl::BinRange_t xBins;
   Rgl::Range_t    xRange;
   if (!FindAxisRange(hist->GetXaxis(), fXLog, xBins, xRange)) {
      Error("TGLPlotCoordinates::SetRangesCartesian", "Cannot set X axis to log scale");
      return kFALSE;
   }

   Rgl::BinRange_t yBins;
   Rgl::Range_t    yRange;
   if (!FindAxisRange(hist->GetYaxis(), fYLog, yBins, yRange)) {
      Error("TGLPlotCoordinates::SetRangesCartesian", "Cannot set Y axis to log scale");
      return kFALSE;
   }

   Rgl::BinRange_t zBins;
   Rgl::Range_t zRange;
   Double_t factor = 1.;

   if (zAsBins) {
      if (!FindAxisRange(hist->GetZaxis(), fZLog, zBins, zRange)) {
         Error("TGLPlotCoordinates::SetRangesCartesian", "Cannot set Z axis to log scale");
         return kFALSE;
      }
   } else if (!FindAxisRange(hist, fZLog, xBins, yBins, zRange, factor, errors)) {
      Error("TGLPlotCoordinates::SetRangesCartesian",
            "Log scale is requested for Z, but maximum less or equal 0. (%f)", zRange.second);
      return kFALSE;
   }

   //Finds the maximum dimension and adjust scale coefficients
   const Double_t x = xRange.second - xRange.first;
   const Double_t y = yRange.second - yRange.first;
   const Double_t z = zRange.second - zRange.first;

   if (!x || !y || !z) {
      Error("TGLPlotCoordinates::SetRangesCartesian", "Zero axis range.");
      return kFALSE;
   }

   if (xRange != fXRange || yRange != fYRange || zRange != fZRange ||
       xBins != fXBins || yBins != fYBins || zBins != fZBins || fFactor != factor)
   {
      fModified = kTRUE;
   }

   fXRange = xRange, fXBins = xBins, fYRange = yRange, fYBins = yBins, fZRange = zRange, fZBins = zBins;
   fFactor = factor;
   /*
   const Double_t maxDim = TMath::Max(TMath::Max(x, y), z);
   fXScale = maxDim / x;
   fYScale = maxDim / y;
   fZScale = maxDim / z;
   */
   fXScale = 1. / x;
   fYScale = 1. / y;
   fZScale = 1. / z;

   fXRangeScaled.first = fXRange.first * fXScale, fXRangeScaled.second = fXRange.second * fXScale;
   fYRangeScaled.first = fYRange.first * fYScale, fYRangeScaled.second = fYRange.second * fYScale;
   fZRangeScaled.first = fZRange.first * fZScale, fZRangeScaled.second = fZRange.second * fZScale;

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGLPlotCoordinates::SetRanges(const TAxis *xAxis, const TAxis *yAxis, const TAxis *zAxis)
{
   //Set bin ranges, ranges, etc.
   Rgl::BinRange_t xBins;
   Rgl::Range_t    xRange;

   FindAxisRange(xAxis, kFALSE, xBins, xRange);

   Rgl::BinRange_t yBins;
   Rgl::Range_t    yRange;

   FindAxisRange(yAxis, kFALSE, yBins, yRange);

   Rgl::BinRange_t zBins;
   Rgl::Range_t zRange;
   Double_t factor = 1.;

   FindAxisRange(zAxis, kFALSE, zBins, zRange);

   //Finds the maximum dimension and adjust scale coefficients
   const Double_t x = xRange.second - xRange.first;
   const Double_t y = yRange.second - yRange.first;
   const Double_t z = zRange.second - zRange.first;

   if (!x || !y || !z) {
      Error("TGLPlotCoordinates::SetRangesCartesian", "Zero axis range.");
      return kFALSE;
   }

   if (xRange != fXRange || yRange != fYRange || zRange != fZRange ||
       xBins != fXBins || yBins != fYBins || zBins != fZBins || fFactor != factor)
   {
      fModified = kTRUE;
   }

   fXRange = xRange, fXBins = xBins, fYRange = yRange, fYBins = yBins, fZRange = zRange, fZBins = zBins;
   fFactor = factor;

/*   const Double_t maxDim = TMath::Max(TMath::Max(x, y), z);
   fXScale = maxDim / x;
   fYScale = maxDim / y;
   fZScale = maxDim / z;*/

   fXScale = 1. / x;
   fYScale = 1. / y;
   fZScale = 1. / z;

   fXRangeScaled.first = fXRange.first * fXScale, fXRangeScaled.second = fXRange.second * fXScale;
   fYRangeScaled.first = fYRange.first * fYScale, fYRangeScaled.second = fYRange.second * fYScale;
   fZRangeScaled.first = fZRange.first * fZScale, fZRangeScaled.second = fZRange.second * fZScale;

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGLPlotCoordinates::SetRangesPolar(const TH1 *hist)
{
   //Set bin ranges, ranges, etc.
   Rgl::BinRange_t xBins;
   Rgl::Range_t phiRange;
   const TAxis *xAxis = hist->GetXaxis();
   FindAxisRange(xAxis, kFALSE, xBins, phiRange);
   if (xBins.second - xBins.first + 1 > 360) {
      Error("TGLPlotCoordinates::SetRangesPolar", "To many PHI sectors");
      return kFALSE;
   }

   Rgl::BinRange_t yBins;
   Rgl::Range_t roRange;
   const TAxis *yAxis = hist->GetYaxis();
   FindAxisRange(yAxis, kFALSE, yBins, roRange);

   Rgl::Range_t zRange;
   Double_t factor = 1.;
   if (!FindAxisRange(hist, fZLog, xBins, yBins, zRange, factor, kFALSE))
   {
      Error("TGLPlotCoordinates::SetRangesPolar",
            "Log scale is requested for Z, but maximum less or equal 0. (%f)", zRange.second);
      return kFALSE;
   }

   const Double_t z = zRange.second - zRange.first;
   if (!z || !(phiRange.second - phiRange.first) || !(roRange.second - roRange.first)) {
      Error("TGLPlotCoordinates::SetRangesPolar", "Zero axis range.");
      return kFALSE;
   }

   if (phiRange != fXRange || roRange != fYRange || zRange != fZRange ||
       xBins != fXBins || yBins != fYBins || fFactor != factor)
   {
      fModified = kTRUE;
      fXRange = phiRange, fXBins = xBins;
      fYRange = roRange,  fYBins = yBins;
      fZRange = zRange;
      fFactor = factor;
   }

   //const Double_t maxDim = TMath::Max(2., z);
   fXScale = 0.5;//maxDim / 2.;
   fYScale = 0.5;//maxDim / 2.;
   fZScale = 1. / z;//maxDim / z;
   fXRangeScaled.first = -fXScale, fXRangeScaled.second = fXScale;
   fYRangeScaled.first = -fYScale, fYRangeScaled.second = fYScale;
   fZRangeScaled.first = fZRange.first * fZScale, fZRangeScaled.second = fZRange.second * fZScale;

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGLPlotCoordinates::SetRangesCylindrical(const TH1 *hist)
{
   // Set ranges cylindrical.

   Rgl::BinRange_t xBins, yBins;
   Rgl::Range_t angleRange, heightRange, radiusRange;
   const TAxis *xAxis = hist->GetXaxis();
   const TAxis *yAxis = hist->GetYaxis();
   Double_t factor = 1.;

   FindAxisRange(xAxis, kFALSE, xBins, angleRange);
   if (xBins.second - xBins.first + 1 > 360) {
      Error("TGLPlotCoordinates::SetRangesCylindrical", "To many PHI sectors");
      return kFALSE;
   }
   if (!FindAxisRange(yAxis, fYLog, yBins, heightRange)) {
      Error("TGLPlotCoordinates::SetRangesCylindrical", "Cannot set Y axis to log scale");
      return kFALSE;
   }
   FindAxisRange(hist, kFALSE, xBins, yBins, radiusRange, factor, kFALSE);

   const Double_t x = angleRange.second  - angleRange.first;
   const Double_t y = heightRange.second - heightRange.first;
   const Double_t z = radiusRange.second - radiusRange.first;

   if (!x || !y || !z) {
      Error("TGLPlotCoordinates::SetRangesCylindrical", "Zero axis range.");
      return kFALSE;
   }

   if (angleRange != fXRange  || heightRange != fYRange ||
       radiusRange != fZRange || xBins != fXBins ||
       yBins != fYBins || fFactor != factor)
   {
      fModified = kTRUE;
      fXRange = angleRange,  fXBins = xBins;
      fYRange = heightRange, fYBins = yBins;
      fZRange = radiusRange;
      fFactor = factor;
   }

   // const Double_t maxDim = TMath::Max(2., y);
   fXScale = 0.5;//maxDim / 2.;
   fYScale = 1. / y;//maxDim / y;
   fZScale = 0.5;//maxDim / 2.;
   fXRangeScaled.first = -fXScale, fXRangeScaled.second = fXScale;
   fYRangeScaled.first = fYRange.first * fYScale, fYRangeScaled.second = fYRange.second * fYScale;
   fZRangeScaled.first = -fZScale, fZRangeScaled.second = fZScale;

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGLPlotCoordinates::SetRangesSpherical(const TH1 *hist)
{
   // Set ranges spherical.

   Rgl::BinRange_t xBins;
   Rgl::Range_t phiRange;
   FindAxisRange(hist->GetXaxis(), kFALSE, xBins, phiRange);
   if (xBins.second - xBins.first + 1 > 360) {
      Error("TGLPlotCoordinates::SetRangesSpherical", "To many PHI sectors");
      return kFALSE;
   }

   Rgl::BinRange_t yBins;
   Rgl::Range_t thetaRange;
   FindAxisRange(hist->GetYaxis(), kFALSE, yBins, thetaRange);
   if (yBins.second - yBins.first + 1 > 180) {
      Error("TGLPlotCoordinates::SetRangesSpherical", "To many THETA sectors");
      return kFALSE;
   }

   Rgl::Range_t radiusRange;
   Double_t factor = 1.;
   FindAxisRange(hist, kFALSE, xBins, yBins, radiusRange, factor, kFALSE);

   if (xBins != fXBins || yBins != fYBins ||
       phiRange != fXRange || thetaRange != fYRange ||
       radiusRange != fZRange || fFactor != factor)
   {
      fModified = kTRUE;
      fXBins    = xBins;
      fYBins    = yBins;
      fXRange   = phiRange;
      fYRange   = thetaRange,
      fZRange   = radiusRange;
      fFactor   = factor;
   }

   fXScale = 0.5;
   fYScale = 0.5;
   fZScale = 0.5;
   fXRangeScaled.first = -fXScale, fXRangeScaled.second = fXScale;
   fYRangeScaled.first = -fYScale, fYRangeScaled.second = fYScale;
   fZRangeScaled.first = -fZScale, fZRangeScaled.second = fZScale;

   return kTRUE;
}

namespace {

   //______________________________________________________________________________
   Double_t FindMinBinWidth(const TAxis *axis)
   {
      // Find minimal bin width.

      Int_t currBin = axis->GetFirst();
      Double_t width = axis->GetBinWidth(currBin);

      if (!axis->IsVariableBinSize())//equal bins
         return width;

      ++currBin;
      //variable size bins
      for (const Int_t lastBin = axis->GetLast(); currBin <= lastBin; ++currBin)
         width = TMath::Min(width, axis->GetBinWidth(currBin));

      return width;
   }

   //______________________________________________________________________________
   Bool_t FindAxisRange(const TAxis *axis, Bool_t log, Rgl::BinRange_t &bins, Rgl::Range_t &range)
   {
      //"Generic" function, can be used for X/Y/Z axis.
      //[low edge of first ..... up edge of last]
      //If log is true, at least up edge of last MUST be positive or function fails (1).
      //If log is true and low edge is negative, try to find bin with positive low edge, bin number
      //must be less or equal to last (2). If no such bin, function failes.
      //When looking for a such bin, I'm trying to find value which is 0.01 of
      //MINIMUM bin width (3) (if bins are equidimensional, first's bin width is OK).
      //But even such lookup can fail, so, it's a stupid idea to have negative ranges
      //and logarithmic scale :)

      bins.first = axis->GetFirst(), bins.second = axis->GetLast();
      range.first = axis->GetBinLowEdge(bins.first), range.second = axis->GetBinUpEdge(bins.second);

      if (log) {
         if (range.second <= 0.)
            return kFALSE;//(1)

         range.second = TMath::Log10(range.second);

         if (range.first <= 0.) {//(2)
            Int_t bin = axis->FindFixBin(FindMinBinWidth(axis) * 0.01);//(3)
            //Overflow or something stupid.
            if (bin > bins.second)
               return kFALSE;

            if (axis->GetBinLowEdge(bin) <= 0.) {
               ++bin;
               if (bin > bins.second)//Again, something stupid.
                  return kFALSE;
            }

            bins.first = bin;
            range.first = axis->GetBinLowEdge(bin);
         }

         range.first = TMath::Log10(range.first);
      }

      return kTRUE;
   }

   //______________________________________________________________________________
   Bool_t FindAxisRange(const TH1 *hist, Bool_t logZ, const Rgl::BinRange_t &xBins,
                        const Rgl::BinRange_t &yBins, Rgl::Range_t &zRange,
                        Double_t &factor, Bool_t errors)
   {
      //First, look through hist to find minimum and maximum values.
      const Bool_t minimum = hist->GetMinimumStored() != -1111;
      const Bool_t maximum = hist->GetMaximumStored() != -1111;
      const Double_t margin = gStyle->GetHistTopMargin();

      zRange.second = hist->GetCellContent(xBins.first, yBins.first), zRange.first = zRange.second;
      Double_t summ = 0.;

      for (Int_t i = xBins.first; i <= xBins.second; ++i) {
         for (Int_t j = yBins.first; j <= yBins.second; ++j) {
            Double_t val = hist->GetCellContent(i, j);
            if (val > 0. && errors)
               val = TMath::Max(val, val + hist->GetCellError(i, j));
            zRange.second = TMath::Max(val, zRange.second);
            zRange.first = TMath::Min(val, zRange.first);
            summ += val;
         }
      }

      if (hist->GetMaximumStored() != -1111)
         zRange.second = hist->GetMaximumStored();
      if (hist->GetMinimumStored() != -1111)
         zRange.first = hist->GetMinimumStored();

      if (logZ && zRange.second <= 0.)
         return kFALSE;//cannot setup logarithmic scale

      if (zRange.first >= zRange.second)
         zRange.first = 0.001 * zRange.second;

      factor = hist->GetNormFactor() > 0. ? hist->GetNormFactor() : summ;
      if (summ) factor /= summ;
      if (!factor) factor = 1.;
      if (factor < 0.)
         Warning("TGLPlotPainter::ExtractAxisZInfo",
               "Negative factor, negative ranges - possible incorrect behavior");

      zRange.second *= factor;
      zRange.first  *= factor;

      if (logZ) {
         if (zRange.first <= 0.)
            zRange.first = TMath::Min(1., 0.001 * zRange.second);
         zRange.first = TMath::Log10(zRange.first);
         if (!minimum)
            zRange.first += TMath::Log10(0.5);
         zRange.second = TMath::Log10(zRange.second);
         if (!maximum)
            zRange.second += TMath::Log10(2*(0.9/0.95));//This magic numbers are from THistPainter.
         return kTRUE;
      }

      if (!maximum)
         zRange.second += margin * (zRange.second - zRange.first);
      if (!minimum) {
         if (gStyle->GetHistMinimumZero())
            zRange.first >= 0 ? zRange.first = 0. : zRange.first -= margin * (zRange.second - zRange.first);
         else
            zRange.first >= 0 && zRange.first - margin * (zRange.second - zRange.first) <= 0 ?
               zRange.first = 0 : zRange.first -= margin * (zRange.second - zRange.first);
      }

      return kTRUE;
   }

}

//______________________________________________________________________________
//
// Used by plot-painters to determine the area of the plot that
// is cut away.

ClassImp(TGLBoxCut)

//______________________________________________________________________________
TGLBoxCut::TGLBoxCut(const TGLPlotBox *box)
               : fXLength(0.),
                 fYLength(0.),
                 fZLength(0.),
                 fPlotBox(box),
                 fActive(kFALSE),
                 fFactor(1.)
{
   //Constructor.
}

//______________________________________________________________________________
TGLBoxCut::~TGLBoxCut()
{
   //Destructor.
}

//______________________________________________________________________________
void TGLBoxCut::TurnOnOff()
{
   //Turn the box cut on/off.
   //If it's on, it will be placed in front point of a plot.
   fActive = !fActive;

   if (fActive) {
      ResetBoxGeometry();
   }
}

//______________________________________________________________________________
void TGLBoxCut::SetActive(Bool_t a)
{
   //Turn the box cut on/off.
   if (a == fActive)
      return;
   TurnOnOff();
}

//______________________________________________________________________________
void TGLBoxCut::ResetBoxGeometry()
{
   //Set geometry using plot's back box.

   const Int_t frontPoint = fPlotBox->GetFrontPoint();
   const TGLVertex3 *box = fPlotBox->Get3DBox();
   const TGLVertex3 center((box[0].X() + box[1].X()) / 2, (box[0].Y() + box[2].Y()) / 2,
                           (box[0].Z() + box[4].Z()) / 2);
   fXLength = fFactor * (box[1].X() - box[0].X());
   fYLength = fFactor * (box[2].Y() - box[0].Y());
   fZLength = fFactor * (box[4].Z() - box[0].Z());

   switch(frontPoint){
   case 0:
      fCenter.X() = box[0].X();
      fCenter.Y() = box[0].Y();
      break;
   case 1:
      fCenter.X() = box[1].X();
      fCenter.Y() = box[0].Y();
      break;
   case 2:
      fCenter.X() = box[2].X();
      fCenter.Y() = box[2].Y();
      break;
   case 3:
      fCenter.X() = box[0].X();
      fCenter.Y() = box[2].Y();
      break;
   }

   fCenter.Z() = box[0].Z() * 0.5 + box[4].Z() * 0.5;
   AdjustBox();
}

//______________________________________________________________________________
void TGLBoxCut::DrawBox(Bool_t selectionPass, Int_t selected)const
{
   //Draw cut as a semi-transparent box.
   if (!selectionPass) {
      glDisable(GL_LIGHTING);
      glLineWidth(3.f);

      selected == TGLPlotPainter::kXAxis ? glColor3d(1., 1., 0.) : glColor3d(1., 0., 0.);
      glBegin(GL_LINES);
      glVertex3d(fXRange.first, (fYRange.first + fYRange.second) / 2, (fZRange.first + fZRange.second) / 2);
      glVertex3d(fXRange.second, (fYRange.first + fYRange.second) / 2, (fZRange.first + fZRange.second) / 2);
      glEnd();

      selected == TGLPlotPainter::kYAxis ? glColor3d(1., 1., 0.) : glColor3d(0., 1., 0.);
      glBegin(GL_LINES);
      glVertex3d((fXRange.first + fXRange.second) / 2, fYRange.first, (fZRange.first + fZRange.second) / 2);
      glVertex3d((fXRange.first + fXRange.second) / 2, fYRange.second, (fZRange.first + fZRange.second) / 2);
      glEnd();

      selected == TGLPlotPainter::kZAxis ? glColor3d(1., 1., 0.) : glColor3d(0., 0., 1.);
      glBegin(GL_LINES);
      glVertex3d((fXRange.first + fXRange.second) / 2, (fYRange.first + fYRange.second) / 2, fZRange.first);
      glVertex3d((fXRange.first + fXRange.second) / 2, (fYRange.first + fYRange.second) / 2, fZRange.second);
      glEnd();

      glLineWidth(1.f);
      glEnable(GL_LIGHTING);

      GLboolean oldBlendState = kFALSE;
      glGetBooleanv(GL_BLEND, &oldBlendState);

      if (!oldBlendState)
         glEnable(GL_BLEND);

      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);


      const Float_t diffuseColor[] = {0.f, 0.f, 1.f, 0.1f};
      glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuseColor);

      Rgl::DrawBoxFront(fXRange.first, fXRange.second, fYRange.first, fYRange.second,
                        fZRange.first, fZRange.second, fPlotBox->GetFrontPoint());

      if (!oldBlendState)
         glDisable(GL_BLEND);
   } else {
      glLineWidth(5.f);
      Rgl::ObjectIDToColor(TGLPlotPainter::kXAxis, kFALSE);
      glBegin(GL_LINES);
      glVertex3d(fXRange.first, (fYRange.first + fYRange.second) / 2, (fZRange.first + fZRange.second) / 2);
      glVertex3d(fXRange.second, (fYRange.first + fYRange.second) / 2, (fZRange.first + fZRange.second) / 2);
      glEnd();

      Rgl::ObjectIDToColor(TGLPlotPainter::kYAxis, kFALSE);
      glBegin(GL_LINES);
      glVertex3d((fXRange.first + fXRange.second) / 2, fYRange.first, (fZRange.first + fZRange.second) / 2);
      glVertex3d((fXRange.first + fXRange.second) / 2, fYRange.second, (fZRange.first + fZRange.second) / 2);
      glEnd();

      Rgl::ObjectIDToColor(TGLPlotPainter::kZAxis, kFALSE);
      glBegin(GL_LINES);
      glVertex3d((fXRange.first + fXRange.second) / 2, (fYRange.first + fYRange.second) / 2, fZRange.first);
      glVertex3d((fXRange.first + fXRange.second) / 2, (fYRange.first + fYRange.second) / 2, fZRange.second);
      glEnd();
      glLineWidth(1.f);
   }
}

//______________________________________________________________________________
void TGLBoxCut::StartMovement(Int_t px, Int_t py)
{
   //Start cut's movement
   fMousePos.fX = px;
   fMousePos.fY = py;
}

//______________________________________________________________________________
void TGLBoxCut::MoveBox(Int_t px, Int_t py, Int_t axisID)
{
   //Move box cut along selected direction.
   Double_t mv[16] = {0.};
   glGetDoublev(GL_MODELVIEW_MATRIX, mv);
   Double_t pr[16] = {0.};
   glGetDoublev(GL_PROJECTION_MATRIX, pr);
   Int_t vp[4] = {0};
   glGetIntegerv(GL_VIEWPORT, vp);
   Double_t winVertex[3] = {0.};

   switch(axisID){
   case TGLPlotPainter::kXAxis :
      gluProject(fCenter.X(), 0., 0., mv, pr, vp, &winVertex[0], &winVertex[1], &winVertex[2]);
      break;
   case TGLPlotPainter::kYAxis :
      gluProject(0., fCenter.Y(), 0., mv, pr, vp, &winVertex[0], &winVertex[1], &winVertex[2]);
      break;
   case TGLPlotPainter::kZAxis :
      gluProject(0., 0., fCenter.Z(), mv, pr, vp, &winVertex[0], &winVertex[1], &winVertex[2]);
      break;
   }

   winVertex[0] += px - fMousePos.fX;
   winVertex[1] += py - fMousePos.fY;
   Double_t newPoint[3] = {0.};
   gluUnProject(winVertex[0], winVertex[1], winVertex[2], mv, pr, vp,
                newPoint, newPoint + 1, newPoint + 2);

   const TGLVertex3 *box = fPlotBox->Get3DBox();

   switch(axisID){
   case TGLPlotPainter::kXAxis :
      if (newPoint[0] >= box[1].X() + 0.4 * fXLength)
         break;
      if (newPoint[0] <= box[0].X() - 0.4 * fXLength)
         break;
      fCenter.X() = newPoint[0];
      break;
   case TGLPlotPainter::kYAxis :
      if (newPoint[1] >= box[2].Y() + 0.4 * fYLength)
         break;
      if (newPoint[1] <= box[0].Y() - 0.4 * fYLength)
         break;
      fCenter.Y() = newPoint[1];
      break;
   case TGLPlotPainter::kZAxis :
      if (newPoint[2] >= box[4].Z() + 0.4 * fZLength)
         break;
      if (newPoint[2] <= box[0].Z() - 0.4 * fZLength)
         break;
      fCenter.Z() = newPoint[2];
      break;
   }

   fMousePos.fX = px;
   fMousePos.fY = py;

   AdjustBox();
}

//______________________________________________________________________________
void TGLBoxCut::AdjustBox()
{
   //Box cut is limited by plot's sizes.
   const TGLVertex3 *box = fPlotBox->Get3DBox();

   fXRange.first  = fCenter.X() - fXLength / 2.;
   fXRange.second = fCenter.X() + fXLength / 2.;
   fYRange.first  = fCenter.Y() - fYLength / 2.;
   fYRange.second = fCenter.Y() + fYLength / 2.;
   fZRange.first  = fCenter.Z() - fZLength / 2.;
   fZRange.second = fCenter.Z() + fZLength / 2.;

   fXRange.first  = TMath::Max(fXRange.first,  box[0].X());
   fXRange.first  = TMath::Min(fXRange.first,  box[1].X());
   fXRange.second = TMath::Min(fXRange.second, box[1].X());
   fXRange.second = TMath::Max(fXRange.second, box[0].X());

   fYRange.first  = TMath::Max(fYRange.first,  box[0].Y());
   fYRange.first  = TMath::Min(fYRange.first,  box[2].Y());
   fYRange.second = TMath::Min(fYRange.second, box[2].Y());
   fYRange.second = TMath::Max(fYRange.second, box[0].Y());

   fZRange.first  = TMath::Max(fZRange.first,  box[0].Z());
   fZRange.first  = TMath::Min(fZRange.first,  box[4].Z());
   fZRange.second = TMath::Min(fZRange.second, box[4].Z());
   fZRange.second = TMath::Max(fZRange.second, box[0].Z());
}

//______________________________________________________________________________
Bool_t TGLBoxCut::IsInCut(Double_t xMin, Double_t xMax, Double_t yMin, Double_t yMax,
                          Double_t zMin, Double_t zMax)const
{
   //Check, if box defined by xmin/xmax etc. is in cut.
   if (((xMin >= fXRange.first && xMin < fXRange.second) || (xMax > fXRange.first && xMax <= fXRange.second)) &&
       ((yMin >= fYRange.first && yMin < fYRange.second) || (yMax > fYRange.first && yMax <= fYRange.second)) &&
       ((zMin >= fZRange.first && zMin < fZRange.second) || (zMax > fZRange.first && zMax <= fZRange.second)))
      return kTRUE;
   return kFALSE;
}


//______________________________________________________________________________
//
// A slice of a TH3.

ClassImp(TGLTH3Slice)

//______________________________________________________________________________
TGLTH3Slice::TGLTH3Slice(const TString &name, const TH3 *hist, const TGLPlotCoordinates *coord,
                         const TGLPlotBox *box, ESliceAxis axis)
               : TNamed(name, name),
                 fAxisType(axis),
                 fAxis(0),
                 fCoord(coord),
                 fBox(box),
                 fSliceWidth(1),
                 fHist(hist),
                 fF3(0)
{
   // Constructor.
   fAxis = fAxisType == kXOZ ? fHist->GetYaxis() : fAxisType == kYOZ ? fHist->GetXaxis() : fHist->GetZaxis();
}

//______________________________________________________________________________
TGLTH3Slice::TGLTH3Slice(const TString &name, const TH3 *hist, const TF3 *fun, const TGLPlotCoordinates *coord,
                         const TGLPlotBox *box, ESliceAxis axis)
               : TNamed(name, name),
                 fAxisType(axis),
                 fAxis(0),
                 fCoord(coord),
                 fBox(box),
                 fSliceWidth(1),
                 fHist(hist),
                 fF3(fun)
{
   // Constructor.
   fAxis = fAxisType == kXOZ ? fHist->GetYaxis() : fAxisType == kYOZ ? fHist->GetXaxis() : fHist->GetZaxis();
}

//______________________________________________________________________________
void TGLTH3Slice::SetSliceWidth(Int_t width)
{
   // Set Slice width.

   if (width <= 0)
      return;

   if (fAxis->GetLast() - fAxis->GetFirst() + 1 <= width)
      fSliceWidth = fAxis->GetLast() - fAxis->GetFirst() + 1;
   else
      fSliceWidth = width;
}

//______________________________________________________________________________
void TGLTH3Slice::DrawSlice(Double_t pos)const
{
   // Draw slice.
   Int_t bin = 0;
   for (Int_t i = fAxis->GetFirst(), e = fAxis->GetLast(); i <= e; ++i) {
      if (pos >= fAxis->GetBinLowEdge(i) && pos <= fAxis->GetBinUpEdge(i)) {
         bin = i;
         break;
      }
   }

   if (bin) {
      Int_t low = 1, up = 2;
      if (bin - fSliceWidth + 1 >= fAxis->GetFirst()) {
         low = bin - fSliceWidth + 1;
         up  = bin + 1;
      } else {
         low = fAxis->GetFirst();
         up  = bin + (fSliceWidth - (bin - fAxis->GetFirst() + 1)) + 1;
      }

      if (!fF3)
         FindMinMax(low, up);

      if (!PreparePalette())
         return;

      PrepareTexCoords(pos, low, up);

      fPalette.EnableTexture(GL_REPLACE);
      const TGLDisableGuard lightGuard(GL_LIGHTING);
      DrawSliceTextured(pos);
      fPalette.DisableTexture();
      //highlight bins in a slice.
      //DrawSliceFrame(low, up);
   }
}

//______________________________________________________________________________
void TGLTH3Slice::FindMinMax(Int_t /*low*/, Int_t /*up*/)const
{
   // Find minimum and maximum for slice.
  /* fMinMax.first = 0.;

   switch (fAxisType) {
   case kXOZ:
      for (Int_t level = low; level < up; ++ level)
         fMinMax.first += fHist->GetBinContent(fCoord->GetFirstXBin(), level, fCoord->GetFirstZBin());
      fMinMax.second = fMinMax.first;
      for (Int_t j = fCoord->GetFirstZBin(), jt = 0, ej = fCoord->GetLastZBin(); j <= ej; ++j, ++jt) {
         for (Int_t i = fCoord->GetFirstXBin(), it = 0, ei = fCoord->GetLastXBin(); i <= ei; ++i, ++it) {
            Double_t val = 0.;
            for (Int_t level = low; level < up; ++ level)
               val += fHist->GetBinContent(i, level, j);
            fMinMax.second = TMath::Max(fMinMax.second, val);
            fMinMax.first = TMath::Min(fMinMax.first, val);
         }
      }
      break;
   case kYOZ:
      for (Int_t level = low; level < up; ++ level)
         fMinMax.first += fHist->GetBinContent(level, fCoord->GetFirstYBin(), fCoord->GetFirstZBin());
      fMinMax.second = fMinMax.first;
      for (Int_t j = fCoord->GetFirstZBin(), jt = 0, ej = fCoord->GetLastZBin(); j <= ej; ++j, ++jt) {
         for (Int_t i = fCoord->GetFirstYBin(), it = 0, ei = fCoord->GetLastYBin(); i <= ei; ++i, ++it) {
            Double_t val = 0.;
            for (Int_t level = low; level < up; ++ level)
               val += fHist->GetBinContent(level, i, j);
            fMinMax.second = TMath::Max(fMinMax.second, val);
            fMinMax.first = TMath::Min(fMinMax.first, val);
         }
      }
      break;
   case kXOY:
      for (Int_t level = low; level < up; ++ level)
         fMinMax.first += fHist->GetBinContent(fCoord->GetFirstXBin(), fCoord->GetFirstYBin(), level);
      fMinMax.second = fMinMax.first;
      for (Int_t i = fCoord->GetFirstXBin(), ir = 0, ei = fCoord->GetLastXBin(); i <= ei; ++i, ++ir) {
         for (Int_t j = fCoord->GetFirstYBin(), jr = 0, ej = fCoord->GetLastYBin(); j <= ej; ++j, ++jr) {
            Double_t val = 0.;
            for (Int_t level = low; level < up; ++ level)
               val += fHist->GetBinContent(i, j, level);
            fMinMax.second = TMath::Max(fMinMax.second, val);
            fMinMax.first = TMath::Min(fMinMax.first, val);
         }
      }
      break;
   }*/
}

//______________________________________________________________________________
Bool_t TGLTH3Slice::PreparePalette()const
{
   //Initialize color palette.
   UInt_t paletteSize = ((TH1 *)fHist)->GetContour();
   if (!paletteSize && !(paletteSize = gStyle->GetNumberContours()))
      paletteSize = 20;

   return fPalette.GeneratePalette(paletteSize, fMinMax);
}

//______________________________________________________________________________
void TGLTH3Slice::PrepareTexCoords(Double_t pos, Int_t low, Int_t up)const
{
   // Prepare TexCoords.
   switch (fAxisType) {
   case kXOZ:
      fTexCoords.resize(fCoord->GetNXBins() * fCoord->GetNZBins());
      fTexCoords.SetRowLen(fCoord->GetNXBins());
      if (!fF3) {

         for (Int_t j = fCoord->GetFirstZBin(), jt = 0, ej = fCoord->GetLastZBin(); j <= ej; ++j, ++jt) {
            for (Int_t i = fCoord->GetFirstXBin(), it = 0, ei = fCoord->GetLastXBin(); i <= ei; ++i, ++it) {
               Double_t val = 0.;
               for (Int_t level = low; level < up; ++ level)
                  val += fHist->GetBinContent(i, level, j);
               fTexCoords[jt][it] = fPalette.GetTexCoord(val);
            }
         }
      } else {
         for (Int_t j = fCoord->GetFirstZBin(), jt = 0, ej = fCoord->GetLastZBin(); j <= ej; ++j, ++jt) {
            for (Int_t i = fCoord->GetFirstXBin(), it = 0, ei = fCoord->GetLastXBin(); i <= ei; ++i, ++it) {
               Double_t val = fF3->Eval(fHist->GetXaxis()->GetBinCenter(i), pos, fHist->GetZaxis()->GetBinCenter(j));
               if (val > fMinMax.second)
                  val = fMinMax.second;
               else if (val < fMinMax.first)
                  val = fMinMax.first;
               fTexCoords[jt][it] = fPalette.GetTexCoord(val);
            }
         }
      }
      break;
   case kYOZ:
      fTexCoords.resize(fCoord->GetNYBins() * fCoord->GetNZBins());
      fTexCoords.SetRowLen(fCoord->GetNYBins());
      if (!fF3) {
         for (Int_t j = fCoord->GetFirstZBin(), jt = 0, ej = fCoord->GetLastZBin(); j <= ej; ++j, ++jt) {
            for (Int_t i = fCoord->GetFirstYBin(), it = 0, ei = fCoord->GetLastYBin(); i <= ei; ++i, ++it) {
               Double_t val = 0.;
               for (Int_t level = low; level < up; ++ level)
                  val += fHist->GetBinContent(level, i, j);
               fTexCoords[jt][it] = fPalette.GetTexCoord(val);
            }
         }
      } else {
         for (Int_t j = fCoord->GetFirstZBin(), jt = 0, ej = fCoord->GetLastZBin(); j <= ej; ++j, ++jt) {
            for (Int_t i = fCoord->GetFirstXBin(), it = 0, ei = fCoord->GetLastXBin(); i <= ei; ++i, ++it) {
               Double_t val = fF3->Eval(pos, fHist->GetYaxis()->GetBinCenter(i), fHist->GetZaxis()->GetBinCenter(j));
               if (val > fMinMax.second)
                  val = fMinMax.second;
               else if (val < fMinMax.first)
                  val = fMinMax.first;
               fTexCoords[jt][it] = fPalette.GetTexCoord(val);
            }
         }
      }
      break;
   case kXOY:
      fTexCoords.resize(fCoord->GetNXBins() * fCoord->GetNYBins());
      fTexCoords.SetRowLen(fCoord->GetNYBins());
      if (!fF3) {
         for (Int_t i = fCoord->GetFirstXBin(), ir = 0, ei = fCoord->GetLastXBin(); i <= ei; ++i, ++ir) {
            for (Int_t j = fCoord->GetFirstYBin(), jr = 0, ej = fCoord->GetLastYBin(); j <= ej; ++j, ++jr) {
               Double_t val = 0.;
               for (Int_t level = low; level < up; ++ level)
                  val += fHist->GetBinContent(i, j, level);
               fTexCoords[ir][jr] = fPalette.GetTexCoord(val);
            }
         }
      } else {
         for (Int_t i = fCoord->GetFirstXBin(), it = 0, ei = fCoord->GetLastXBin(); i <= ei; ++i, ++it) {
            for (Int_t j = fCoord->GetFirstYBin(), jt = 0, ej = fCoord->GetLastYBin(); j <= ej; ++j, ++jt) {
               Double_t val = fF3->Eval(fHist->GetXaxis()->GetBinCenter(i), fHist->GetYaxis()->GetBinCenter(j), pos);
               if (val > fMinMax.second)
                  val = fMinMax.second;
               else if (val < fMinMax.first)
                  val = fMinMax.first;
               fTexCoords[it][jt] = fPalette.GetTexCoord(val);
            }
         }

      }
      break;
   }
}

//______________________________________________________________________________
void TGLTH3Slice::DrawSliceTextured(Double_t pos)const
{
   // Draw slice textured.

   const Double_t xScale = fCoord->GetXScale();
   const Double_t yScale = fCoord->GetYScale();
   const Double_t zScale = fCoord->GetZScale();
   const TAxis *xA = fHist->GetXaxis();
   const TAxis *yA = fHist->GetYaxis();
   const TAxis *zA = fHist->GetZaxis();

   switch (fAxisType) {
   case kXOZ:
      pos *= yScale;
      for (Int_t j = fCoord->GetFirstZBin(), jt = 0, ej = fCoord->GetLastZBin(); j < ej; ++j, ++jt) {
         for (Int_t i = fCoord->GetFirstXBin(), it = 0, ei = fCoord->GetLastXBin(); i < ei; ++i, ++it) {
            const Double_t xMin = xA->GetBinCenter(i) * xScale;
            const Double_t xMax = xA->GetBinCenter(i + 1) * xScale;
            const Double_t zMin = zA->GetBinCenter(j) * zScale;
            const Double_t zMax = zA->GetBinCenter(j + 1) * zScale;
            glBegin(GL_POLYGON);
            glTexCoord1d(fTexCoords[jt][it]);
            glVertex3d(xMin, pos, zMin);
            glTexCoord1d(fTexCoords[jt + 1][it]);
            glVertex3d(xMin, pos, zMax);
            glTexCoord1d(fTexCoords[jt + 1][it + 1]);
            glVertex3d(xMax, pos, zMax);
            glTexCoord1d(fTexCoords[jt][it + 1]);
            glVertex3d(xMax, pos, zMin);
            glEnd();
         }
      }
      break;
   case kYOZ:
      pos *= xScale;
      for (Int_t j = fCoord->GetFirstZBin(), jt = 0, ej = fCoord->GetLastZBin(); j < ej; ++j, ++jt) {
         for (Int_t i = fCoord->GetFirstYBin(), it = 0, ei = fCoord->GetLastYBin(); i < ei; ++i, ++it) {
            const Double_t yMin = yA->GetBinCenter(i) * yScale;
            const Double_t yMax = yA->GetBinCenter(i + 1) * yScale;
            const Double_t zMin = zA->GetBinCenter(j) * zScale;
            const Double_t zMax = zA->GetBinCenter(j + 1) * zScale;
            glBegin(GL_POLYGON);
            glTexCoord1d(fTexCoords[jt][it]);
            glVertex3d(pos, yMin, zMin);
            glTexCoord1d(fTexCoords[jt][it + 1]);
            glVertex3d(pos, yMax, zMin);
            glTexCoord1d(fTexCoords[jt + 1][it + 1]);
            glVertex3d(pos, yMax, zMax);
            glTexCoord1d(fTexCoords[jt + 1][it]);
            glVertex3d(pos, yMin, zMax);
            glEnd();
         }
      }
      break;
   case kXOY:
      pos *= zScale;
      for (Int_t j = fCoord->GetFirstXBin(), jt = 0, ej = fCoord->GetLastXBin(); j < ej; ++j, ++jt) {
         for (Int_t i = fCoord->GetFirstYBin(), it = 0, ei = fCoord->GetLastYBin(); i < ei; ++i, ++it) {
            const Double_t xMin = xA->GetBinCenter(j) * xScale;
            const Double_t xMax = xA->GetBinCenter(j + 1) * xScale;
            const Double_t yMin = yA->GetBinCenter(i) * yScale;
            const Double_t yMax = yA->GetBinCenter(i + 1) * yScale;
            glBegin(GL_POLYGON);
            glTexCoord1d(fTexCoords[jt + 1][it]);
            glVertex3d(xMax, yMin, pos);
            glTexCoord1d(fTexCoords[jt + 1][it + 1]);
            glVertex3d(xMax, yMax, pos);
            glTexCoord1d(fTexCoords[jt][it + 1]);
            glVertex3d(xMin, yMax, pos);
            glTexCoord1d(fTexCoords[jt][it]);
            glVertex3d(xMin, yMin, pos);
            glEnd();
         }
      }
      break;
   }
}

namespace {

   //______________________________________________________________________________
   void DrawBoxOutline(Double_t xMin, Double_t xMax, Double_t yMin,
                       Double_t yMax, Double_t zMin, Double_t zMax)
   {
      glBegin(GL_LINE_LOOP);
      glVertex3d(xMin, yMin, zMin);
      glVertex3d(xMax, yMin, zMin);
      glVertex3d(xMax, yMax, zMin);
      glVertex3d(xMin, yMax, zMin);
      glEnd();

      glBegin(GL_LINE_LOOP);
      glVertex3d(xMin, yMin, zMax);
      glVertex3d(xMax, yMin, zMax);
      glVertex3d(xMax, yMax, zMax);
      glVertex3d(xMin, yMax, zMax);
      glEnd();

      glBegin(GL_LINES);
      glVertex3d(xMin, yMin, zMin);
      glVertex3d(xMin, yMin, zMax);
      glVertex3d(xMax, yMin, zMin);
      glVertex3d(xMax, yMin, zMax);
      glVertex3d(xMax, yMax, zMin);
      glVertex3d(xMax, yMax, zMax);
      glVertex3d(xMin, yMax, zMin);
      glVertex3d(xMin, yMax, zMax);
      glEnd();
   }

}

//______________________________________________________________________________
void TGLTH3Slice::DrawSliceFrame(Int_t low, Int_t up)const
{
   // Draw slice frame.

   glColor3d(1., 0., 0.);
   const TGLVertex3 *box = fBox->Get3DBox();

   switch (fAxisType) {
   case kXOZ:
      DrawBoxOutline(box[0].X(), box[1].X(),
                     fAxis->GetBinLowEdge(low) * fCoord->GetYScale(),
                     fAxis->GetBinUpEdge(up - 1) * fCoord->GetYScale(),
                     box[0].Z(), box[4].Z());
      break;
   case kYOZ:
      DrawBoxOutline(fAxis->GetBinLowEdge(low) * fCoord->GetXScale(),
                     fAxis->GetBinUpEdge(up - 1) * fCoord->GetXScale(),
                     box[0].Y(), box[2].Y(),
                     box[0].Z(), box[4].Z());
      break;
   case kXOY:
      DrawBoxOutline(box[0].X(), box[1].X(),
                     box[0].Y(), box[2].Y(),
                     fAxis->GetBinLowEdge(low) * fCoord->GetZScale(),
                     fAxis->GetBinUpEdge(up - 1) * fCoord->GetZScale());
      break;
   }
}

namespace Rgl {

//______________________________________________________________________________
PlotTranslation::PlotTranslation(const TGLPlotPainter *painter)
                   : fPainter(painter)
{
   const TGLVertex3 *box = fPainter->fBackBox.Get3DBox();
   const Double_t center[] = {(box[0].X() + box[1].X()) / 2,
                              (box[0].Y() + box[2].Y()) / 2,
                              (box[0].Z() + box[4].Z()) / 2};

   fPainter->SaveModelviewMatrix();
   glTranslated(-center[0], -center[1], -center[2]);
}

//______________________________________________________________________________
PlotTranslation::~PlotTranslation()
{
   fPainter->RestoreModelviewMatrix();
}

namespace
{
   const Double_t lr = 0.85;
   const Double_t rr = 0.9;
}

//______________________________________________________________________________
void DrawPalette(const TGLPlotCamera * camera, const TGLLevelPalette & palette)
{
   //Draw. Palette.
   const TGLDisableGuard light(GL_LIGHTING);
   const TGLDisableGuard depth(GL_DEPTH_TEST);
   const TGLEnableGuard blend(GL_BLEND);

   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(0, camera->GetWidth(), 0, camera->GetHeight(), -1., 1.);

   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();

   const Double_t leftX = camera->GetWidth() * lr;
   const Double_t rightX = camera->GetWidth() * rr;
   const Double_t margin = 0.1 * camera->GetHeight();
   const Double_t h = (camera->GetHeight() * 0.8) / palette.GetPaletteSize();

   for (Int_t i = 0, e = palette.GetPaletteSize(); i < e; ++i) {
      glBegin(GL_POLYGON);
      const UChar_t * color = palette.GetColour(i);
      glColor4ub(color[0], color[1], color[2], 150);
      glVertex2d(leftX, margin + i * h);
      glVertex2d(rightX, margin + i * h);
      glVertex2d(rightX, margin + (i + 1) * h);
      glVertex2d(leftX, margin + (i + 1) * h);
      glEnd();
   }

   const TGLEnableGuard  smoothGuard(GL_LINE_SMOOTH);
   glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
   glColor4d(0., 0., 0., 0.5);

   for (Int_t i = 0, e = palette.GetPaletteSize(); i < e; ++i) {
      glBegin(GL_LINE_LOOP);
      glVertex2d(leftX, margin + i * h);
      glVertex2d(rightX, margin + i * h);
      glVertex2d(rightX, margin + (i + 1) * h);
      glVertex2d(leftX, margin + (i + 1) * h);
      glEnd();
   }

}

//______________________________________________________________________________
void DrawPaletteAxis(const TGLPlotCamera * camera, const Range_t & minMax, Bool_t logZ)
{
   const Double_t x = gPad->AbsPixeltoX(Int_t(gPad->GetXlowNDC() * gPad->GetWw() + rr * camera->GetWidth()));
   const Double_t yMin = gPad->AbsPixeltoY(Int_t(camera->GetHeight() - camera->GetHeight() * 0.1
                                           + (1 - gPad->GetHNDC() - gPad->GetYlowNDC())
                                           * gPad->GetWh() + camera->GetY()));
   const Double_t yMax = gPad->AbsPixeltoY(Int_t(camera->GetHeight() - camera->GetHeight() * 0.9
                                           + (1 - gPad->GetHNDC() - gPad->GetYlowNDC())
                                           * gPad->GetWh() + camera->GetY()));
   Double_t zMin = minMax.first;
   Double_t zMax = minMax.second;

   if (logZ) {
      zMin = TMath::Power(10, zMin);
      zMax = TMath::Power(10, zMax);
   }

   //Now, some stupid magic, to force ROOT's painting machine work as I want, not as it wants.
   const Bool_t logX = gPad->GetLogx();
   gPad->SetLogx(kFALSE);
   const Bool_t logY = gPad->GetLogy();
   gPad->SetLogy(kFALSE);

   TGaxis axisPainter(x, yMin, x, yMax, zMin, zMax, 510, logZ ? "G" : "");
   axisPainter.Paint();

   gPad->SetLogx(logX);
   gPad->SetLogy(logY);
}

}

 TGLPlotPainter.cxx:1
 TGLPlotPainter.cxx:2
 TGLPlotPainter.cxx:3
 TGLPlotPainter.cxx:4
 TGLPlotPainter.cxx:5
 TGLPlotPainter.cxx:6
 TGLPlotPainter.cxx:7
 TGLPlotPainter.cxx:8
 TGLPlotPainter.cxx:9
 TGLPlotPainter.cxx:10
 TGLPlotPainter.cxx:11
 TGLPlotPainter.cxx:12
 TGLPlotPainter.cxx:13
 TGLPlotPainter.cxx:14
 TGLPlotPainter.cxx:15
 TGLPlotPainter.cxx:16
 TGLPlotPainter.cxx:17
 TGLPlotPainter.cxx:18
 TGLPlotPainter.cxx:19
 TGLPlotPainter.cxx:20
 TGLPlotPainter.cxx:21
 TGLPlotPainter.cxx:22
 TGLPlotPainter.cxx:23
 TGLPlotPainter.cxx:24
 TGLPlotPainter.cxx:25
 TGLPlotPainter.cxx:26
 TGLPlotPainter.cxx:27
 TGLPlotPainter.cxx:28
 TGLPlotPainter.cxx:29
 TGLPlotPainter.cxx:30
 TGLPlotPainter.cxx:31
 TGLPlotPainter.cxx:32
 TGLPlotPainter.cxx:33
 TGLPlotPainter.cxx:34
 TGLPlotPainter.cxx:35
 TGLPlotPainter.cxx:36
 TGLPlotPainter.cxx:37
 TGLPlotPainter.cxx:38
 TGLPlotPainter.cxx:39
 TGLPlotPainter.cxx:40
 TGLPlotPainter.cxx:41
 TGLPlotPainter.cxx:42
 TGLPlotPainter.cxx:43
 TGLPlotPainter.cxx:44
 TGLPlotPainter.cxx:45
 TGLPlotPainter.cxx:46
 TGLPlotPainter.cxx:47
 TGLPlotPainter.cxx:48
 TGLPlotPainter.cxx:49
 TGLPlotPainter.cxx:50
 TGLPlotPainter.cxx:51
 TGLPlotPainter.cxx:52
 TGLPlotPainter.cxx:53
 TGLPlotPainter.cxx:54
 TGLPlotPainter.cxx:55
 TGLPlotPainter.cxx:56
 TGLPlotPainter.cxx:57
 TGLPlotPainter.cxx:58
 TGLPlotPainter.cxx:59
 TGLPlotPainter.cxx:60
 TGLPlotPainter.cxx:61
 TGLPlotPainter.cxx:62
 TGLPlotPainter.cxx:63
 TGLPlotPainter.cxx:64
 TGLPlotPainter.cxx:65
 TGLPlotPainter.cxx:66
 TGLPlotPainter.cxx:67
 TGLPlotPainter.cxx:68
 TGLPlotPainter.cxx:69
 TGLPlotPainter.cxx:70
 TGLPlotPainter.cxx:71
 TGLPlotPainter.cxx:72
 TGLPlotPainter.cxx:73
 TGLPlotPainter.cxx:74
 TGLPlotPainter.cxx:75
 TGLPlotPainter.cxx:76
 TGLPlotPainter.cxx:77
 TGLPlotPainter.cxx:78
 TGLPlotPainter.cxx:79
 TGLPlotPainter.cxx:80
 TGLPlotPainter.cxx:81
 TGLPlotPainter.cxx:82
 TGLPlotPainter.cxx:83
 TGLPlotPainter.cxx:84
 TGLPlotPainter.cxx:85
 TGLPlotPainter.cxx:86
 TGLPlotPainter.cxx:87
 TGLPlotPainter.cxx:88
 TGLPlotPainter.cxx:89
 TGLPlotPainter.cxx:90
 TGLPlotPainter.cxx:91
 TGLPlotPainter.cxx:92
 TGLPlotPainter.cxx:93
 TGLPlotPainter.cxx:94
 TGLPlotPainter.cxx:95
 TGLPlotPainter.cxx:96
 TGLPlotPainter.cxx:97
 TGLPlotPainter.cxx:98
 TGLPlotPainter.cxx:99
 TGLPlotPainter.cxx:100
 TGLPlotPainter.cxx:101
 TGLPlotPainter.cxx:102
 TGLPlotPainter.cxx:103
 TGLPlotPainter.cxx:104
 TGLPlotPainter.cxx:105
 TGLPlotPainter.cxx:106
 TGLPlotPainter.cxx:107
 TGLPlotPainter.cxx:108
 TGLPlotPainter.cxx:109
 TGLPlotPainter.cxx:110
 TGLPlotPainter.cxx:111
 TGLPlotPainter.cxx:112
 TGLPlotPainter.cxx:113
 TGLPlotPainter.cxx:114
 TGLPlotPainter.cxx:115
 TGLPlotPainter.cxx:116
 TGLPlotPainter.cxx:117
 TGLPlotPainter.cxx:118
 TGLPlotPainter.cxx:119
 TGLPlotPainter.cxx:120
 TGLPlotPainter.cxx:121
 TGLPlotPainter.cxx:122
 TGLPlotPainter.cxx:123
 TGLPlotPainter.cxx:124
 TGLPlotPainter.cxx:125
 TGLPlotPainter.cxx:126
 TGLPlotPainter.cxx:127
 TGLPlotPainter.cxx:128
 TGLPlotPainter.cxx:129
 TGLPlotPainter.cxx:130
 TGLPlotPainter.cxx:131
 TGLPlotPainter.cxx:132
 TGLPlotPainter.cxx:133
 TGLPlotPainter.cxx:134
 TGLPlotPainter.cxx:135
 TGLPlotPainter.cxx:136
 TGLPlotPainter.cxx:137
 TGLPlotPainter.cxx:138
 TGLPlotPainter.cxx:139
 TGLPlotPainter.cxx:140
 TGLPlotPainter.cxx:141
 TGLPlotPainter.cxx:142
 TGLPlotPainter.cxx:143
 TGLPlotPainter.cxx:144
 TGLPlotPainter.cxx:145
 TGLPlotPainter.cxx:146
 TGLPlotPainter.cxx:147
 TGLPlotPainter.cxx:148
 TGLPlotPainter.cxx:149
 TGLPlotPainter.cxx:150
 TGLPlotPainter.cxx:151
 TGLPlotPainter.cxx:152
 TGLPlotPainter.cxx:153
 TGLPlotPainter.cxx:154
 TGLPlotPainter.cxx:155
 TGLPlotPainter.cxx:156
 TGLPlotPainter.cxx:157
 TGLPlotPainter.cxx:158
 TGLPlotPainter.cxx:159
 TGLPlotPainter.cxx:160
 TGLPlotPainter.cxx:161
 TGLPlotPainter.cxx:162
 TGLPlotPainter.cxx:163
 TGLPlotPainter.cxx:164
 TGLPlotPainter.cxx:165
 TGLPlotPainter.cxx:166
 TGLPlotPainter.cxx:167
 TGLPlotPainter.cxx:168
 TGLPlotPainter.cxx:169
 TGLPlotPainter.cxx:170
 TGLPlotPainter.cxx:171
 TGLPlotPainter.cxx:172
 TGLPlotPainter.cxx:173
 TGLPlotPainter.cxx:174
 TGLPlotPainter.cxx:175
 TGLPlotPainter.cxx:176
 TGLPlotPainter.cxx:177
 TGLPlotPainter.cxx:178
 TGLPlotPainter.cxx:179
 TGLPlotPainter.cxx:180
 TGLPlotPainter.cxx:181
 TGLPlotPainter.cxx:182
 TGLPlotPainter.cxx:183
 TGLPlotPainter.cxx:184
 TGLPlotPainter.cxx:185
 TGLPlotPainter.cxx:186
 TGLPlotPainter.cxx:187
 TGLPlotPainter.cxx:188
 TGLPlotPainter.cxx:189
 TGLPlotPainter.cxx:190
 TGLPlotPainter.cxx:191
 TGLPlotPainter.cxx:192
 TGLPlotPainter.cxx:193
 TGLPlotPainter.cxx:194
 TGLPlotPainter.cxx:195
 TGLPlotPainter.cxx:196
 TGLPlotPainter.cxx:197
 TGLPlotPainter.cxx:198
 TGLPlotPainter.cxx:199
 TGLPlotPainter.cxx:200
 TGLPlotPainter.cxx:201
 TGLPlotPainter.cxx:202
 TGLPlotPainter.cxx:203
 TGLPlotPainter.cxx:204
 TGLPlotPainter.cxx:205
 TGLPlotPainter.cxx:206
 TGLPlotPainter.cxx:207
 TGLPlotPainter.cxx:208
 TGLPlotPainter.cxx:209
 TGLPlotPainter.cxx:210
 TGLPlotPainter.cxx:211
 TGLPlotPainter.cxx:212
 TGLPlotPainter.cxx:213
 TGLPlotPainter.cxx:214
 TGLPlotPainter.cxx:215
 TGLPlotPainter.cxx:216
 TGLPlotPainter.cxx:217
 TGLPlotPainter.cxx:218
 TGLPlotPainter.cxx:219
 TGLPlotPainter.cxx:220
 TGLPlotPainter.cxx:221
 TGLPlotPainter.cxx:222
 TGLPlotPainter.cxx:223
 TGLPlotPainter.cxx:224
 TGLPlotPainter.cxx:225
 TGLPlotPainter.cxx:226
 TGLPlotPainter.cxx:227
 TGLPlotPainter.cxx:228
 TGLPlotPainter.cxx:229
 TGLPlotPainter.cxx:230
 TGLPlotPainter.cxx:231
 TGLPlotPainter.cxx:232
 TGLPlotPainter.cxx:233
 TGLPlotPainter.cxx:234
 TGLPlotPainter.cxx:235
 TGLPlotPainter.cxx:236
 TGLPlotPainter.cxx:237
 TGLPlotPainter.cxx:238
 TGLPlotPainter.cxx:239
 TGLPlotPainter.cxx:240
 TGLPlotPainter.cxx:241
 TGLPlotPainter.cxx:242
 TGLPlotPainter.cxx:243
 TGLPlotPainter.cxx:244
 TGLPlotPainter.cxx:245
 TGLPlotPainter.cxx:246
 TGLPlotPainter.cxx:247
 TGLPlotPainter.cxx:248
 TGLPlotPainter.cxx:249
 TGLPlotPainter.cxx:250
 TGLPlotPainter.cxx:251
 TGLPlotPainter.cxx:252
 TGLPlotPainter.cxx:253
 TGLPlotPainter.cxx:254
 TGLPlotPainter.cxx:255
 TGLPlotPainter.cxx:256
 TGLPlotPainter.cxx:257
 TGLPlotPainter.cxx:258
 TGLPlotPainter.cxx:259
 TGLPlotPainter.cxx:260
 TGLPlotPainter.cxx:261
 TGLPlotPainter.cxx:262
 TGLPlotPainter.cxx:263
 TGLPlotPainter.cxx:264
 TGLPlotPainter.cxx:265
 TGLPlotPainter.cxx:266
 TGLPlotPainter.cxx:267
 TGLPlotPainter.cxx:268
 TGLPlotPainter.cxx:269
 TGLPlotPainter.cxx:270
 TGLPlotPainter.cxx:271
 TGLPlotPainter.cxx:272
 TGLPlotPainter.cxx:273
 TGLPlotPainter.cxx:274
 TGLPlotPainter.cxx:275
 TGLPlotPainter.cxx:276
 TGLPlotPainter.cxx:277
 TGLPlotPainter.cxx:278
 TGLPlotPainter.cxx:279
 TGLPlotPainter.cxx:280
 TGLPlotPainter.cxx:281
 TGLPlotPainter.cxx:282
 TGLPlotPainter.cxx:283
 TGLPlotPainter.cxx:284
 TGLPlotPainter.cxx:285
 TGLPlotPainter.cxx:286
 TGLPlotPainter.cxx:287
 TGLPlotPainter.cxx:288
 TGLPlotPainter.cxx:289
 TGLPlotPainter.cxx:290
 TGLPlotPainter.cxx:291
 TGLPlotPainter.cxx:292
 TGLPlotPainter.cxx:293
 TGLPlotPainter.cxx:294
 TGLPlotPainter.cxx:295
 TGLPlotPainter.cxx:296
 TGLPlotPainter.cxx:297
 TGLPlotPainter.cxx:298
 TGLPlotPainter.cxx:299
 TGLPlotPainter.cxx:300
 TGLPlotPainter.cxx:301
 TGLPlotPainter.cxx:302
 TGLPlotPainter.cxx:303
 TGLPlotPainter.cxx:304
 TGLPlotPainter.cxx:305
 TGLPlotPainter.cxx:306
 TGLPlotPainter.cxx:307
 TGLPlotPainter.cxx:308
 TGLPlotPainter.cxx:309
 TGLPlotPainter.cxx:310
 TGLPlotPainter.cxx:311
 TGLPlotPainter.cxx:312
 TGLPlotPainter.cxx:313
 TGLPlotPainter.cxx:314
 TGLPlotPainter.cxx:315
 TGLPlotPainter.cxx:316
 TGLPlotPainter.cxx:317
 TGLPlotPainter.cxx:318
 TGLPlotPainter.cxx:319
 TGLPlotPainter.cxx:320
 TGLPlotPainter.cxx:321
 TGLPlotPainter.cxx:322
 TGLPlotPainter.cxx:323
 TGLPlotPainter.cxx:324
 TGLPlotPainter.cxx:325
 TGLPlotPainter.cxx:326
 TGLPlotPainter.cxx:327
 TGLPlotPainter.cxx:328
 TGLPlotPainter.cxx:329
 TGLPlotPainter.cxx:330
 TGLPlotPainter.cxx:331
 TGLPlotPainter.cxx:332
 TGLPlotPainter.cxx:333
 TGLPlotPainter.cxx:334
 TGLPlotPainter.cxx:335
 TGLPlotPainter.cxx:336
 TGLPlotPainter.cxx:337
 TGLPlotPainter.cxx:338
 TGLPlotPainter.cxx:339
 TGLPlotPainter.cxx:340
 TGLPlotPainter.cxx:341
 TGLPlotPainter.cxx:342
 TGLPlotPainter.cxx:343
 TGLPlotPainter.cxx:344
 TGLPlotPainter.cxx:345
 TGLPlotPainter.cxx:346
 TGLPlotPainter.cxx:347
 TGLPlotPainter.cxx:348
 TGLPlotPainter.cxx:349
 TGLPlotPainter.cxx:350
 TGLPlotPainter.cxx:351
 TGLPlotPainter.cxx:352
 TGLPlotPainter.cxx:353
 TGLPlotPainter.cxx:354
 TGLPlotPainter.cxx:355
 TGLPlotPainter.cxx:356
 TGLPlotPainter.cxx:357
 TGLPlotPainter.cxx:358
 TGLPlotPainter.cxx:359
 TGLPlotPainter.cxx:360
 TGLPlotPainter.cxx:361
 TGLPlotPainter.cxx:362
 TGLPlotPainter.cxx:363
 TGLPlotPainter.cxx:364
 TGLPlotPainter.cxx:365
 TGLPlotPainter.cxx:366
 TGLPlotPainter.cxx:367
 TGLPlotPainter.cxx:368
 TGLPlotPainter.cxx:369
 TGLPlotPainter.cxx:370
 TGLPlotPainter.cxx:371
 TGLPlotPainter.cxx:372
 TGLPlotPainter.cxx:373
 TGLPlotPainter.cxx:374
 TGLPlotPainter.cxx:375
 TGLPlotPainter.cxx:376
 TGLPlotPainter.cxx:377
 TGLPlotPainter.cxx:378
 TGLPlotPainter.cxx:379
 TGLPlotPainter.cxx:380
 TGLPlotPainter.cxx:381
 TGLPlotPainter.cxx:382
 TGLPlotPainter.cxx:383
 TGLPlotPainter.cxx:384
 TGLPlotPainter.cxx:385
 TGLPlotPainter.cxx:386
 TGLPlotPainter.cxx:387
 TGLPlotPainter.cxx:388
 TGLPlotPainter.cxx:389
 TGLPlotPainter.cxx:390
 TGLPlotPainter.cxx:391
 TGLPlotPainter.cxx:392
 TGLPlotPainter.cxx:393
 TGLPlotPainter.cxx:394
 TGLPlotPainter.cxx:395
 TGLPlotPainter.cxx:396
 TGLPlotPainter.cxx:397
 TGLPlotPainter.cxx:398
 TGLPlotPainter.cxx:399
 TGLPlotPainter.cxx:400
 TGLPlotPainter.cxx:401
 TGLPlotPainter.cxx:402
 TGLPlotPainter.cxx:403
 TGLPlotPainter.cxx:404
 TGLPlotPainter.cxx:405
 TGLPlotPainter.cxx:406
 TGLPlotPainter.cxx:407
 TGLPlotPainter.cxx:408
 TGLPlotPainter.cxx:409
 TGLPlotPainter.cxx:410
 TGLPlotPainter.cxx:411
 TGLPlotPainter.cxx:412
 TGLPlotPainter.cxx:413
 TGLPlotPainter.cxx:414
 TGLPlotPainter.cxx:415
 TGLPlotPainter.cxx:416
 TGLPlotPainter.cxx:417
 TGLPlotPainter.cxx:418
 TGLPlotPainter.cxx:419
 TGLPlotPainter.cxx:420
 TGLPlotPainter.cxx:421
 TGLPlotPainter.cxx:422
 TGLPlotPainter.cxx:423
 TGLPlotPainter.cxx:424
 TGLPlotPainter.cxx:425
 TGLPlotPainter.cxx:426
 TGLPlotPainter.cxx:427
 TGLPlotPainter.cxx:428
 TGLPlotPainter.cxx:429
 TGLPlotPainter.cxx:430
 TGLPlotPainter.cxx:431
 TGLPlotPainter.cxx:432
 TGLPlotPainter.cxx:433
 TGLPlotPainter.cxx:434
 TGLPlotPainter.cxx:435
 TGLPlotPainter.cxx:436
 TGLPlotPainter.cxx:437
 TGLPlotPainter.cxx:438
 TGLPlotPainter.cxx:439
 TGLPlotPainter.cxx:440
 TGLPlotPainter.cxx:441
 TGLPlotPainter.cxx:442
 TGLPlotPainter.cxx:443
 TGLPlotPainter.cxx:444
 TGLPlotPainter.cxx:445
 TGLPlotPainter.cxx:446
 TGLPlotPainter.cxx:447
 TGLPlotPainter.cxx:448
 TGLPlotPainter.cxx:449
 TGLPlotPainter.cxx:450
 TGLPlotPainter.cxx:451
 TGLPlotPainter.cxx:452
 TGLPlotPainter.cxx:453
 TGLPlotPainter.cxx:454
 TGLPlotPainter.cxx:455
 TGLPlotPainter.cxx:456
 TGLPlotPainter.cxx:457
 TGLPlotPainter.cxx:458
 TGLPlotPainter.cxx:459
 TGLPlotPainter.cxx:460
 TGLPlotPainter.cxx:461
 TGLPlotPainter.cxx:462
 TGLPlotPainter.cxx:463
 TGLPlotPainter.cxx:464
 TGLPlotPainter.cxx:465
 TGLPlotPainter.cxx:466
 TGLPlotPainter.cxx:467
 TGLPlotPainter.cxx:468
 TGLPlotPainter.cxx:469
 TGLPlotPainter.cxx:470
 TGLPlotPainter.cxx:471
 TGLPlotPainter.cxx:472
 TGLPlotPainter.cxx:473
 TGLPlotPainter.cxx:474
 TGLPlotPainter.cxx:475
 TGLPlotPainter.cxx:476
 TGLPlotPainter.cxx:477
 TGLPlotPainter.cxx:478
 TGLPlotPainter.cxx:479
 TGLPlotPainter.cxx:480
 TGLPlotPainter.cxx:481
 TGLPlotPainter.cxx:482
 TGLPlotPainter.cxx:483
 TGLPlotPainter.cxx:484
 TGLPlotPainter.cxx:485
 TGLPlotPainter.cxx:486
 TGLPlotPainter.cxx:487
 TGLPlotPainter.cxx:488
 TGLPlotPainter.cxx:489
 TGLPlotPainter.cxx:490
 TGLPlotPainter.cxx:491
 TGLPlotPainter.cxx:492
 TGLPlotPainter.cxx:493
 TGLPlotPainter.cxx:494
 TGLPlotPainter.cxx:495
 TGLPlotPainter.cxx:496
 TGLPlotPainter.cxx:497
 TGLPlotPainter.cxx:498
 TGLPlotPainter.cxx:499
 TGLPlotPainter.cxx:500
 TGLPlotPainter.cxx:501
 TGLPlotPainter.cxx:502
 TGLPlotPainter.cxx:503
 TGLPlotPainter.cxx:504
 TGLPlotPainter.cxx:505
 TGLPlotPainter.cxx:506
 TGLPlotPainter.cxx:507
 TGLPlotPainter.cxx:508
 TGLPlotPainter.cxx:509
 TGLPlotPainter.cxx:510
 TGLPlotPainter.cxx:511
 TGLPlotPainter.cxx:512
 TGLPlotPainter.cxx:513
 TGLPlotPainter.cxx:514
 TGLPlotPainter.cxx:515
 TGLPlotPainter.cxx:516
 TGLPlotPainter.cxx:517
 TGLPlotPainter.cxx:518
 TGLPlotPainter.cxx:519
 TGLPlotPainter.cxx:520
 TGLPlotPainter.cxx:521
 TGLPlotPainter.cxx:522
 TGLPlotPainter.cxx:523
 TGLPlotPainter.cxx:524
 TGLPlotPainter.cxx:525
 TGLPlotPainter.cxx:526
 TGLPlotPainter.cxx:527
 TGLPlotPainter.cxx:528
 TGLPlotPainter.cxx:529
 TGLPlotPainter.cxx:530
 TGLPlotPainter.cxx:531
 TGLPlotPainter.cxx:532
 TGLPlotPainter.cxx:533
 TGLPlotPainter.cxx:534
 TGLPlotPainter.cxx:535
 TGLPlotPainter.cxx:536
 TGLPlotPainter.cxx:537
 TGLPlotPainter.cxx:538
 TGLPlotPainter.cxx:539
 TGLPlotPainter.cxx:540
 TGLPlotPainter.cxx:541
 TGLPlotPainter.cxx:542
 TGLPlotPainter.cxx:543
 TGLPlotPainter.cxx:544
 TGLPlotPainter.cxx:545
 TGLPlotPainter.cxx:546
 TGLPlotPainter.cxx:547
 TGLPlotPainter.cxx:548
 TGLPlotPainter.cxx:549
 TGLPlotPainter.cxx:550
 TGLPlotPainter.cxx:551
 TGLPlotPainter.cxx:552
 TGLPlotPainter.cxx:553
 TGLPlotPainter.cxx:554
 TGLPlotPainter.cxx:555
 TGLPlotPainter.cxx:556
 TGLPlotPainter.cxx:557
 TGLPlotPainter.cxx:558
 TGLPlotPainter.cxx:559
 TGLPlotPainter.cxx:560
 TGLPlotPainter.cxx:561
 TGLPlotPainter.cxx:562
 TGLPlotPainter.cxx:563
 TGLPlotPainter.cxx:564
 TGLPlotPainter.cxx:565
 TGLPlotPainter.cxx:566
 TGLPlotPainter.cxx:567
 TGLPlotPainter.cxx:568
 TGLPlotPainter.cxx:569
 TGLPlotPainter.cxx:570
 TGLPlotPainter.cxx:571
 TGLPlotPainter.cxx:572
 TGLPlotPainter.cxx:573
 TGLPlotPainter.cxx:574
 TGLPlotPainter.cxx:575
 TGLPlotPainter.cxx:576
 TGLPlotPainter.cxx:577
 TGLPlotPainter.cxx:578
 TGLPlotPainter.cxx:579
 TGLPlotPainter.cxx:580
 TGLPlotPainter.cxx:581
 TGLPlotPainter.cxx:582
 TGLPlotPainter.cxx:583
 TGLPlotPainter.cxx:584
 TGLPlotPainter.cxx:585
 TGLPlotPainter.cxx:586
 TGLPlotPainter.cxx:587
 TGLPlotPainter.cxx:588
 TGLPlotPainter.cxx:589
 TGLPlotPainter.cxx:590
 TGLPlotPainter.cxx:591
 TGLPlotPainter.cxx:592
 TGLPlotPainter.cxx:593
 TGLPlotPainter.cxx:594
 TGLPlotPainter.cxx:595
 TGLPlotPainter.cxx:596
 TGLPlotPainter.cxx:597
 TGLPlotPainter.cxx:598
 TGLPlotPainter.cxx:599
 TGLPlotPainter.cxx:600
 TGLPlotPainter.cxx:601
 TGLPlotPainter.cxx:602
 TGLPlotPainter.cxx:603
 TGLPlotPainter.cxx:604
 TGLPlotPainter.cxx:605
 TGLPlotPainter.cxx:606
 TGLPlotPainter.cxx:607
 TGLPlotPainter.cxx:608
 TGLPlotPainter.cxx:609
 TGLPlotPainter.cxx:610
 TGLPlotPainter.cxx:611
 TGLPlotPainter.cxx:612
 TGLPlotPainter.cxx:613
 TGLPlotPainter.cxx:614
 TGLPlotPainter.cxx:615
 TGLPlotPainter.cxx:616
 TGLPlotPainter.cxx:617
 TGLPlotPainter.cxx:618
 TGLPlotPainter.cxx:619
 TGLPlotPainter.cxx:620
 TGLPlotPainter.cxx:621
 TGLPlotPainter.cxx:622
 TGLPlotPainter.cxx:623
 TGLPlotPainter.cxx:624
 TGLPlotPainter.cxx:625
 TGLPlotPainter.cxx:626
 TGLPlotPainter.cxx:627
 TGLPlotPainter.cxx:628
 TGLPlotPainter.cxx:629
 TGLPlotPainter.cxx:630
 TGLPlotPainter.cxx:631
 TGLPlotPainter.cxx:632
 TGLPlotPainter.cxx:633
 TGLPlotPainter.cxx:634
 TGLPlotPainter.cxx:635
 TGLPlotPainter.cxx:636
 TGLPlotPainter.cxx:637
 TGLPlotPainter.cxx:638
 TGLPlotPainter.cxx:639
 TGLPlotPainter.cxx:640
 TGLPlotPainter.cxx:641
 TGLPlotPainter.cxx:642
 TGLPlotPainter.cxx:643
 TGLPlotPainter.cxx:644
 TGLPlotPainter.cxx:645
 TGLPlotPainter.cxx:646
 TGLPlotPainter.cxx:647
 TGLPlotPainter.cxx:648
 TGLPlotPainter.cxx:649
 TGLPlotPainter.cxx:650
 TGLPlotPainter.cxx:651
 TGLPlotPainter.cxx:652
 TGLPlotPainter.cxx:653
 TGLPlotPainter.cxx:654
 TGLPlotPainter.cxx:655
 TGLPlotPainter.cxx:656
 TGLPlotPainter.cxx:657
 TGLPlotPainter.cxx:658
 TGLPlotPainter.cxx:659
 TGLPlotPainter.cxx:660
 TGLPlotPainter.cxx:661
 TGLPlotPainter.cxx:662
 TGLPlotPainter.cxx:663
 TGLPlotPainter.cxx:664
 TGLPlotPainter.cxx:665
 TGLPlotPainter.cxx:666
 TGLPlotPainter.cxx:667
 TGLPlotPainter.cxx:668
 TGLPlotPainter.cxx:669
 TGLPlotPainter.cxx:670
 TGLPlotPainter.cxx:671
 TGLPlotPainter.cxx:672
 TGLPlotPainter.cxx:673
 TGLPlotPainter.cxx:674
 TGLPlotPainter.cxx:675
 TGLPlotPainter.cxx:676
 TGLPlotPainter.cxx:677
 TGLPlotPainter.cxx:678
 TGLPlotPainter.cxx:679
 TGLPlotPainter.cxx:680
 TGLPlotPainter.cxx:681
 TGLPlotPainter.cxx:682
 TGLPlotPainter.cxx:683
 TGLPlotPainter.cxx:684
 TGLPlotPainter.cxx:685
 TGLPlotPainter.cxx:686
 TGLPlotPainter.cxx:687
 TGLPlotPainter.cxx:688
 TGLPlotPainter.cxx:689
 TGLPlotPainter.cxx:690
 TGLPlotPainter.cxx:691
 TGLPlotPainter.cxx:692
 TGLPlotPainter.cxx:693
 TGLPlotPainter.cxx:694
 TGLPlotPainter.cxx:695
 TGLPlotPainter.cxx:696
 TGLPlotPainter.cxx:697
 TGLPlotPainter.cxx:698
 TGLPlotPainter.cxx:699
 TGLPlotPainter.cxx:700
 TGLPlotPainter.cxx:701
 TGLPlotPainter.cxx:702
 TGLPlotPainter.cxx:703
 TGLPlotPainter.cxx:704
 TGLPlotPainter.cxx:705
 TGLPlotPainter.cxx:706
 TGLPlotPainter.cxx:707
 TGLPlotPainter.cxx:708
 TGLPlotPainter.cxx:709
 TGLPlotPainter.cxx:710
 TGLPlotPainter.cxx:711
 TGLPlotPainter.cxx:712
 TGLPlotPainter.cxx:713
 TGLPlotPainter.cxx:714
 TGLPlotPainter.cxx:715
 TGLPlotPainter.cxx:716
 TGLPlotPainter.cxx:717
 TGLPlotPainter.cxx:718
 TGLPlotPainter.cxx:719
 TGLPlotPainter.cxx:720
 TGLPlotPainter.cxx:721
 TGLPlotPainter.cxx:722
 TGLPlotPainter.cxx:723
 TGLPlotPainter.cxx:724
 TGLPlotPainter.cxx:725
 TGLPlotPainter.cxx:726
 TGLPlotPainter.cxx:727
 TGLPlotPainter.cxx:728
 TGLPlotPainter.cxx:729
 TGLPlotPainter.cxx:730
 TGLPlotPainter.cxx:731
 TGLPlotPainter.cxx:732
 TGLPlotPainter.cxx:733
 TGLPlotPainter.cxx:734
 TGLPlotPainter.cxx:735
 TGLPlotPainter.cxx:736
 TGLPlotPainter.cxx:737
 TGLPlotPainter.cxx:738
 TGLPlotPainter.cxx:739
 TGLPlotPainter.cxx:740
 TGLPlotPainter.cxx:741
 TGLPlotPainter.cxx:742
 TGLPlotPainter.cxx:743
 TGLPlotPainter.cxx:744
 TGLPlotPainter.cxx:745
 TGLPlotPainter.cxx:746
 TGLPlotPainter.cxx:747
 TGLPlotPainter.cxx:748
 TGLPlotPainter.cxx:749
 TGLPlotPainter.cxx:750
 TGLPlotPainter.cxx:751
 TGLPlotPainter.cxx:752
 TGLPlotPainter.cxx:753
 TGLPlotPainter.cxx:754
 TGLPlotPainter.cxx:755
 TGLPlotPainter.cxx:756
 TGLPlotPainter.cxx:757
 TGLPlotPainter.cxx:758
 TGLPlotPainter.cxx:759
 TGLPlotPainter.cxx:760
 TGLPlotPainter.cxx:761
 TGLPlotPainter.cxx:762
 TGLPlotPainter.cxx:763
 TGLPlotPainter.cxx:764
 TGLPlotPainter.cxx:765
 TGLPlotPainter.cxx:766
 TGLPlotPainter.cxx:767
 TGLPlotPainter.cxx:768
 TGLPlotPainter.cxx:769
 TGLPlotPainter.cxx:770
 TGLPlotPainter.cxx:771
 TGLPlotPainter.cxx:772
 TGLPlotPainter.cxx:773
 TGLPlotPainter.cxx:774
 TGLPlotPainter.cxx:775
 TGLPlotPainter.cxx:776
 TGLPlotPainter.cxx:777
 TGLPlotPainter.cxx:778
 TGLPlotPainter.cxx:779
 TGLPlotPainter.cxx:780
 TGLPlotPainter.cxx:781
 TGLPlotPainter.cxx:782
 TGLPlotPainter.cxx:783
 TGLPlotPainter.cxx:784
 TGLPlotPainter.cxx:785
 TGLPlotPainter.cxx:786
 TGLPlotPainter.cxx:787
 TGLPlotPainter.cxx:788
 TGLPlotPainter.cxx:789
 TGLPlotPainter.cxx:790
 TGLPlotPainter.cxx:791
 TGLPlotPainter.cxx:792
 TGLPlotPainter.cxx:793
 TGLPlotPainter.cxx:794
 TGLPlotPainter.cxx:795
 TGLPlotPainter.cxx:796
 TGLPlotPainter.cxx:797
 TGLPlotPainter.cxx:798
 TGLPlotPainter.cxx:799
 TGLPlotPainter.cxx:800
 TGLPlotPainter.cxx:801
 TGLPlotPainter.cxx:802
 TGLPlotPainter.cxx:803
 TGLPlotPainter.cxx:804
 TGLPlotPainter.cxx:805
 TGLPlotPainter.cxx:806
 TGLPlotPainter.cxx:807
 TGLPlotPainter.cxx:808
 TGLPlotPainter.cxx:809
 TGLPlotPainter.cxx:810
 TGLPlotPainter.cxx:811
 TGLPlotPainter.cxx:812
 TGLPlotPainter.cxx:813
 TGLPlotPainter.cxx:814
 TGLPlotPainter.cxx:815
 TGLPlotPainter.cxx:816
 TGLPlotPainter.cxx:817
 TGLPlotPainter.cxx:818
 TGLPlotPainter.cxx:819
 TGLPlotPainter.cxx:820
 TGLPlotPainter.cxx:821
 TGLPlotPainter.cxx:822
 TGLPlotPainter.cxx:823
 TGLPlotPainter.cxx:824
 TGLPlotPainter.cxx:825
 TGLPlotPainter.cxx:826
 TGLPlotPainter.cxx:827
 TGLPlotPainter.cxx:828
 TGLPlotPainter.cxx:829
 TGLPlotPainter.cxx:830
 TGLPlotPainter.cxx:831
 TGLPlotPainter.cxx:832
 TGLPlotPainter.cxx:833
 TGLPlotPainter.cxx:834
 TGLPlotPainter.cxx:835
 TGLPlotPainter.cxx:836
 TGLPlotPainter.cxx:837
 TGLPlotPainter.cxx:838
 TGLPlotPainter.cxx:839
 TGLPlotPainter.cxx:840
 TGLPlotPainter.cxx:841
 TGLPlotPainter.cxx:842
 TGLPlotPainter.cxx:843
 TGLPlotPainter.cxx:844
 TGLPlotPainter.cxx:845
 TGLPlotPainter.cxx:846
 TGLPlotPainter.cxx:847
 TGLPlotPainter.cxx:848
 TGLPlotPainter.cxx:849
 TGLPlotPainter.cxx:850
 TGLPlotPainter.cxx:851
 TGLPlotPainter.cxx:852
 TGLPlotPainter.cxx:853
 TGLPlotPainter.cxx:854
 TGLPlotPainter.cxx:855
 TGLPlotPainter.cxx:856
 TGLPlotPainter.cxx:857
 TGLPlotPainter.cxx:858
 TGLPlotPainter.cxx:859
 TGLPlotPainter.cxx:860
 TGLPlotPainter.cxx:861
 TGLPlotPainter.cxx:862
 TGLPlotPainter.cxx:863
 TGLPlotPainter.cxx:864
 TGLPlotPainter.cxx:865
 TGLPlotPainter.cxx:866
 TGLPlotPainter.cxx:867
 TGLPlotPainter.cxx:868
 TGLPlotPainter.cxx:869
 TGLPlotPainter.cxx:870
 TGLPlotPainter.cxx:871
 TGLPlotPainter.cxx:872
 TGLPlotPainter.cxx:873
 TGLPlotPainter.cxx:874
 TGLPlotPainter.cxx:875
 TGLPlotPainter.cxx:876
 TGLPlotPainter.cxx:877
 TGLPlotPainter.cxx:878
 TGLPlotPainter.cxx:879
 TGLPlotPainter.cxx:880
 TGLPlotPainter.cxx:881
 TGLPlotPainter.cxx:882
 TGLPlotPainter.cxx:883
 TGLPlotPainter.cxx:884
 TGLPlotPainter.cxx:885
 TGLPlotPainter.cxx:886
 TGLPlotPainter.cxx:887
 TGLPlotPainter.cxx:888
 TGLPlotPainter.cxx:889
 TGLPlotPainter.cxx:890
 TGLPlotPainter.cxx:891
 TGLPlotPainter.cxx:892
 TGLPlotPainter.cxx:893
 TGLPlotPainter.cxx:894
 TGLPlotPainter.cxx:895
 TGLPlotPainter.cxx:896
 TGLPlotPainter.cxx:897
 TGLPlotPainter.cxx:898
 TGLPlotPainter.cxx:899
 TGLPlotPainter.cxx:900
 TGLPlotPainter.cxx:901
 TGLPlotPainter.cxx:902
 TGLPlotPainter.cxx:903
 TGLPlotPainter.cxx:904
 TGLPlotPainter.cxx:905
 TGLPlotPainter.cxx:906
 TGLPlotPainter.cxx:907
 TGLPlotPainter.cxx:908
 TGLPlotPainter.cxx:909
 TGLPlotPainter.cxx:910
 TGLPlotPainter.cxx:911
 TGLPlotPainter.cxx:912
 TGLPlotPainter.cxx:913
 TGLPlotPainter.cxx:914
 TGLPlotPainter.cxx:915
 TGLPlotPainter.cxx:916
 TGLPlotPainter.cxx:917
 TGLPlotPainter.cxx:918
 TGLPlotPainter.cxx:919
 TGLPlotPainter.cxx:920
 TGLPlotPainter.cxx:921
 TGLPlotPainter.cxx:922
 TGLPlotPainter.cxx:923
 TGLPlotPainter.cxx:924
 TGLPlotPainter.cxx:925
 TGLPlotPainter.cxx:926
 TGLPlotPainter.cxx:927
 TGLPlotPainter.cxx:928
 TGLPlotPainter.cxx:929
 TGLPlotPainter.cxx:930
 TGLPlotPainter.cxx:931
 TGLPlotPainter.cxx:932
 TGLPlotPainter.cxx:933
 TGLPlotPainter.cxx:934
 TGLPlotPainter.cxx:935
 TGLPlotPainter.cxx:936
 TGLPlotPainter.cxx:937
 TGLPlotPainter.cxx:938
 TGLPlotPainter.cxx:939
 TGLPlotPainter.cxx:940
 TGLPlotPainter.cxx:941
 TGLPlotPainter.cxx:942
 TGLPlotPainter.cxx:943
 TGLPlotPainter.cxx:944
 TGLPlotPainter.cxx:945
 TGLPlotPainter.cxx:946
 TGLPlotPainter.cxx:947
 TGLPlotPainter.cxx:948
 TGLPlotPainter.cxx:949
 TGLPlotPainter.cxx:950
 TGLPlotPainter.cxx:951
 TGLPlotPainter.cxx:952
 TGLPlotPainter.cxx:953
 TGLPlotPainter.cxx:954
 TGLPlotPainter.cxx:955
 TGLPlotPainter.cxx:956
 TGLPlotPainter.cxx:957
 TGLPlotPainter.cxx:958
 TGLPlotPainter.cxx:959
 TGLPlotPainter.cxx:960
 TGLPlotPainter.cxx:961
 TGLPlotPainter.cxx:962
 TGLPlotPainter.cxx:963
 TGLPlotPainter.cxx:964
 TGLPlotPainter.cxx:965
 TGLPlotPainter.cxx:966
 TGLPlotPainter.cxx:967
 TGLPlotPainter.cxx:968
 TGLPlotPainter.cxx:969
 TGLPlotPainter.cxx:970
 TGLPlotPainter.cxx:971
 TGLPlotPainter.cxx:972
 TGLPlotPainter.cxx:973
 TGLPlotPainter.cxx:974
 TGLPlotPainter.cxx:975
 TGLPlotPainter.cxx:976
 TGLPlotPainter.cxx:977
 TGLPlotPainter.cxx:978
 TGLPlotPainter.cxx:979
 TGLPlotPainter.cxx:980
 TGLPlotPainter.cxx:981
 TGLPlotPainter.cxx:982
 TGLPlotPainter.cxx:983
 TGLPlotPainter.cxx:984
 TGLPlotPainter.cxx:985
 TGLPlotPainter.cxx:986
 TGLPlotPainter.cxx:987
 TGLPlotPainter.cxx:988
 TGLPlotPainter.cxx:989
 TGLPlotPainter.cxx:990
 TGLPlotPainter.cxx:991
 TGLPlotPainter.cxx:992
 TGLPlotPainter.cxx:993
 TGLPlotPainter.cxx:994
 TGLPlotPainter.cxx:995
 TGLPlotPainter.cxx:996
 TGLPlotPainter.cxx:997
 TGLPlotPainter.cxx:998
 TGLPlotPainter.cxx:999
 TGLPlotPainter.cxx:1000
 TGLPlotPainter.cxx:1001
 TGLPlotPainter.cxx:1002
 TGLPlotPainter.cxx:1003
 TGLPlotPainter.cxx:1004
 TGLPlotPainter.cxx:1005
 TGLPlotPainter.cxx:1006
 TGLPlotPainter.cxx:1007
 TGLPlotPainter.cxx:1008
 TGLPlotPainter.cxx:1009
 TGLPlotPainter.cxx:1010
 TGLPlotPainter.cxx:1011
 TGLPlotPainter.cxx:1012
 TGLPlotPainter.cxx:1013
 TGLPlotPainter.cxx:1014
 TGLPlotPainter.cxx:1015
 TGLPlotPainter.cxx:1016
 TGLPlotPainter.cxx:1017
 TGLPlotPainter.cxx:1018
 TGLPlotPainter.cxx:1019
 TGLPlotPainter.cxx:1020
 TGLPlotPainter.cxx:1021
 TGLPlotPainter.cxx:1022
 TGLPlotPainter.cxx:1023
 TGLPlotPainter.cxx:1024
 TGLPlotPainter.cxx:1025
 TGLPlotPainter.cxx:1026
 TGLPlotPainter.cxx:1027
 TGLPlotPainter.cxx:1028
 TGLPlotPainter.cxx:1029
 TGLPlotPainter.cxx:1030
 TGLPlotPainter.cxx:1031
 TGLPlotPainter.cxx:1032
 TGLPlotPainter.cxx:1033
 TGLPlotPainter.cxx:1034
 TGLPlotPainter.cxx:1035
 TGLPlotPainter.cxx:1036
 TGLPlotPainter.cxx:1037
 TGLPlotPainter.cxx:1038
 TGLPlotPainter.cxx:1039
 TGLPlotPainter.cxx:1040
 TGLPlotPainter.cxx:1041
 TGLPlotPainter.cxx:1042
 TGLPlotPainter.cxx:1043
 TGLPlotPainter.cxx:1044
 TGLPlotPainter.cxx:1045
 TGLPlotPainter.cxx:1046
 TGLPlotPainter.cxx:1047
 TGLPlotPainter.cxx:1048
 TGLPlotPainter.cxx:1049
 TGLPlotPainter.cxx:1050
 TGLPlotPainter.cxx:1051
 TGLPlotPainter.cxx:1052
 TGLPlotPainter.cxx:1053
 TGLPlotPainter.cxx:1054
 TGLPlotPainter.cxx:1055
 TGLPlotPainter.cxx:1056
 TGLPlotPainter.cxx:1057
 TGLPlotPainter.cxx:1058
 TGLPlotPainter.cxx:1059
 TGLPlotPainter.cxx:1060
 TGLPlotPainter.cxx:1061
 TGLPlotPainter.cxx:1062
 TGLPlotPainter.cxx:1063
 TGLPlotPainter.cxx:1064
 TGLPlotPainter.cxx:1065
 TGLPlotPainter.cxx:1066
 TGLPlotPainter.cxx:1067
 TGLPlotPainter.cxx:1068
 TGLPlotPainter.cxx:1069
 TGLPlotPainter.cxx:1070
 TGLPlotPainter.cxx:1071
 TGLPlotPainter.cxx:1072
 TGLPlotPainter.cxx:1073
 TGLPlotPainter.cxx:1074
 TGLPlotPainter.cxx:1075
 TGLPlotPainter.cxx:1076
 TGLPlotPainter.cxx:1077
 TGLPlotPainter.cxx:1078
 TGLPlotPainter.cxx:1079
 TGLPlotPainter.cxx:1080
 TGLPlotPainter.cxx:1081
 TGLPlotPainter.cxx:1082
 TGLPlotPainter.cxx:1083
 TGLPlotPainter.cxx:1084
 TGLPlotPainter.cxx:1085
 TGLPlotPainter.cxx:1086
 TGLPlotPainter.cxx:1087
 TGLPlotPainter.cxx:1088
 TGLPlotPainter.cxx:1089
 TGLPlotPainter.cxx:1090
 TGLPlotPainter.cxx:1091
 TGLPlotPainter.cxx:1092
 TGLPlotPainter.cxx:1093
 TGLPlotPainter.cxx:1094
 TGLPlotPainter.cxx:1095
 TGLPlotPainter.cxx:1096
 TGLPlotPainter.cxx:1097
 TGLPlotPainter.cxx:1098
 TGLPlotPainter.cxx:1099
 TGLPlotPainter.cxx:1100
 TGLPlotPainter.cxx:1101
 TGLPlotPainter.cxx:1102
 TGLPlotPainter.cxx:1103
 TGLPlotPainter.cxx:1104
 TGLPlotPainter.cxx:1105
 TGLPlotPainter.cxx:1106
 TGLPlotPainter.cxx:1107
 TGLPlotPainter.cxx:1108
 TGLPlotPainter.cxx:1109
 TGLPlotPainter.cxx:1110
 TGLPlotPainter.cxx:1111
 TGLPlotPainter.cxx:1112
 TGLPlotPainter.cxx:1113
 TGLPlotPainter.cxx:1114
 TGLPlotPainter.cxx:1115
 TGLPlotPainter.cxx:1116
 TGLPlotPainter.cxx:1117
 TGLPlotPainter.cxx:1118
 TGLPlotPainter.cxx:1119
 TGLPlotPainter.cxx:1120
 TGLPlotPainter.cxx:1121
 TGLPlotPainter.cxx:1122
 TGLPlotPainter.cxx:1123
 TGLPlotPainter.cxx:1124
 TGLPlotPainter.cxx:1125
 TGLPlotPainter.cxx:1126
 TGLPlotPainter.cxx:1127
 TGLPlotPainter.cxx:1128
 TGLPlotPainter.cxx:1129
 TGLPlotPainter.cxx:1130
 TGLPlotPainter.cxx:1131
 TGLPlotPainter.cxx:1132
 TGLPlotPainter.cxx:1133
 TGLPlotPainter.cxx:1134
 TGLPlotPainter.cxx:1135
 TGLPlotPainter.cxx:1136
 TGLPlotPainter.cxx:1137
 TGLPlotPainter.cxx:1138
 TGLPlotPainter.cxx:1139
 TGLPlotPainter.cxx:1140
 TGLPlotPainter.cxx:1141
 TGLPlotPainter.cxx:1142
 TGLPlotPainter.cxx:1143
 TGLPlotPainter.cxx:1144
 TGLPlotPainter.cxx:1145
 TGLPlotPainter.cxx:1146
 TGLPlotPainter.cxx:1147
 TGLPlotPainter.cxx:1148
 TGLPlotPainter.cxx:1149
 TGLPlotPainter.cxx:1150
 TGLPlotPainter.cxx:1151
 TGLPlotPainter.cxx:1152
 TGLPlotPainter.cxx:1153
 TGLPlotPainter.cxx:1154
 TGLPlotPainter.cxx:1155
 TGLPlotPainter.cxx:1156
 TGLPlotPainter.cxx:1157
 TGLPlotPainter.cxx:1158
 TGLPlotPainter.cxx:1159
 TGLPlotPainter.cxx:1160
 TGLPlotPainter.cxx:1161
 TGLPlotPainter.cxx:1162
 TGLPlotPainter.cxx:1163
 TGLPlotPainter.cxx:1164
 TGLPlotPainter.cxx:1165
 TGLPlotPainter.cxx:1166
 TGLPlotPainter.cxx:1167
 TGLPlotPainter.cxx:1168
 TGLPlotPainter.cxx:1169
 TGLPlotPainter.cxx:1170
 TGLPlotPainter.cxx:1171
 TGLPlotPainter.cxx:1172
 TGLPlotPainter.cxx:1173
 TGLPlotPainter.cxx:1174
 TGLPlotPainter.cxx:1175
 TGLPlotPainter.cxx:1176
 TGLPlotPainter.cxx:1177
 TGLPlotPainter.cxx:1178
 TGLPlotPainter.cxx:1179
 TGLPlotPainter.cxx:1180
 TGLPlotPainter.cxx:1181
 TGLPlotPainter.cxx:1182
 TGLPlotPainter.cxx:1183
 TGLPlotPainter.cxx:1184
 TGLPlotPainter.cxx:1185
 TGLPlotPainter.cxx:1186
 TGLPlotPainter.cxx:1187
 TGLPlotPainter.cxx:1188
 TGLPlotPainter.cxx:1189
 TGLPlotPainter.cxx:1190
 TGLPlotPainter.cxx:1191
 TGLPlotPainter.cxx:1192
 TGLPlotPainter.cxx:1193
 TGLPlotPainter.cxx:1194
 TGLPlotPainter.cxx:1195
 TGLPlotPainter.cxx:1196
 TGLPlotPainter.cxx:1197
 TGLPlotPainter.cxx:1198
 TGLPlotPainter.cxx:1199
 TGLPlotPainter.cxx:1200
 TGLPlotPainter.cxx:1201
 TGLPlotPainter.cxx:1202
 TGLPlotPainter.cxx:1203
 TGLPlotPainter.cxx:1204
 TGLPlotPainter.cxx:1205
 TGLPlotPainter.cxx:1206
 TGLPlotPainter.cxx:1207
 TGLPlotPainter.cxx:1208
 TGLPlotPainter.cxx:1209
 TGLPlotPainter.cxx:1210
 TGLPlotPainter.cxx:1211
 TGLPlotPainter.cxx:1212
 TGLPlotPainter.cxx:1213
 TGLPlotPainter.cxx:1214
 TGLPlotPainter.cxx:1215
 TGLPlotPainter.cxx:1216
 TGLPlotPainter.cxx:1217
 TGLPlotPainter.cxx:1218
 TGLPlotPainter.cxx:1219
 TGLPlotPainter.cxx:1220
 TGLPlotPainter.cxx:1221
 TGLPlotPainter.cxx:1222
 TGLPlotPainter.cxx:1223
 TGLPlotPainter.cxx:1224
 TGLPlotPainter.cxx:1225
 TGLPlotPainter.cxx:1226
 TGLPlotPainter.cxx:1227
 TGLPlotPainter.cxx:1228
 TGLPlotPainter.cxx:1229
 TGLPlotPainter.cxx:1230
 TGLPlotPainter.cxx:1231
 TGLPlotPainter.cxx:1232
 TGLPlotPainter.cxx:1233
 TGLPlotPainter.cxx:1234
 TGLPlotPainter.cxx:1235
 TGLPlotPainter.cxx:1236
 TGLPlotPainter.cxx:1237
 TGLPlotPainter.cxx:1238
 TGLPlotPainter.cxx:1239
 TGLPlotPainter.cxx:1240
 TGLPlotPainter.cxx:1241
 TGLPlotPainter.cxx:1242
 TGLPlotPainter.cxx:1243
 TGLPlotPainter.cxx:1244
 TGLPlotPainter.cxx:1245
 TGLPlotPainter.cxx:1246
 TGLPlotPainter.cxx:1247
 TGLPlotPainter.cxx:1248
 TGLPlotPainter.cxx:1249
 TGLPlotPainter.cxx:1250
 TGLPlotPainter.cxx:1251
 TGLPlotPainter.cxx:1252
 TGLPlotPainter.cxx:1253
 TGLPlotPainter.cxx:1254
 TGLPlotPainter.cxx:1255
 TGLPlotPainter.cxx:1256
 TGLPlotPainter.cxx:1257
 TGLPlotPainter.cxx:1258
 TGLPlotPainter.cxx:1259
 TGLPlotPainter.cxx:1260
 TGLPlotPainter.cxx:1261
 TGLPlotPainter.cxx:1262
 TGLPlotPainter.cxx:1263
 TGLPlotPainter.cxx:1264
 TGLPlotPainter.cxx:1265
 TGLPlotPainter.cxx:1266
 TGLPlotPainter.cxx:1267
 TGLPlotPainter.cxx:1268
 TGLPlotPainter.cxx:1269
 TGLPlotPainter.cxx:1270
 TGLPlotPainter.cxx:1271
 TGLPlotPainter.cxx:1272
 TGLPlotPainter.cxx:1273
 TGLPlotPainter.cxx:1274
 TGLPlotPainter.cxx:1275
 TGLPlotPainter.cxx:1276
 TGLPlotPainter.cxx:1277
 TGLPlotPainter.cxx:1278
 TGLPlotPainter.cxx:1279
 TGLPlotPainter.cxx:1280
 TGLPlotPainter.cxx:1281
 TGLPlotPainter.cxx:1282
 TGLPlotPainter.cxx:1283
 TGLPlotPainter.cxx:1284
 TGLPlotPainter.cxx:1285
 TGLPlotPainter.cxx:1286
 TGLPlotPainter.cxx:1287
 TGLPlotPainter.cxx:1288
 TGLPlotPainter.cxx:1289
 TGLPlotPainter.cxx:1290
 TGLPlotPainter.cxx:1291
 TGLPlotPainter.cxx:1292
 TGLPlotPainter.cxx:1293
 TGLPlotPainter.cxx:1294
 TGLPlotPainter.cxx:1295
 TGLPlotPainter.cxx:1296
 TGLPlotPainter.cxx:1297
 TGLPlotPainter.cxx:1298
 TGLPlotPainter.cxx:1299
 TGLPlotPainter.cxx:1300
 TGLPlotPainter.cxx:1301
 TGLPlotPainter.cxx:1302
 TGLPlotPainter.cxx:1303
 TGLPlotPainter.cxx:1304
 TGLPlotPainter.cxx:1305
 TGLPlotPainter.cxx:1306
 TGLPlotPainter.cxx:1307
 TGLPlotPainter.cxx:1308
 TGLPlotPainter.cxx:1309
 TGLPlotPainter.cxx:1310
 TGLPlotPainter.cxx:1311
 TGLPlotPainter.cxx:1312
 TGLPlotPainter.cxx:1313
 TGLPlotPainter.cxx:1314
 TGLPlotPainter.cxx:1315
 TGLPlotPainter.cxx:1316
 TGLPlotPainter.cxx:1317
 TGLPlotPainter.cxx:1318
 TGLPlotPainter.cxx:1319
 TGLPlotPainter.cxx:1320
 TGLPlotPainter.cxx:1321
 TGLPlotPainter.cxx:1322
 TGLPlotPainter.cxx:1323
 TGLPlotPainter.cxx:1324
 TGLPlotPainter.cxx:1325
 TGLPlotPainter.cxx:1326
 TGLPlotPainter.cxx:1327
 TGLPlotPainter.cxx:1328
 TGLPlotPainter.cxx:1329
 TGLPlotPainter.cxx:1330
 TGLPlotPainter.cxx:1331
 TGLPlotPainter.cxx:1332
 TGLPlotPainter.cxx:1333
 TGLPlotPainter.cxx:1334
 TGLPlotPainter.cxx:1335
 TGLPlotPainter.cxx:1336
 TGLPlotPainter.cxx:1337
 TGLPlotPainter.cxx:1338
 TGLPlotPainter.cxx:1339
 TGLPlotPainter.cxx:1340
 TGLPlotPainter.cxx:1341
 TGLPlotPainter.cxx:1342
 TGLPlotPainter.cxx:1343
 TGLPlotPainter.cxx:1344
 TGLPlotPainter.cxx:1345
 TGLPlotPainter.cxx:1346
 TGLPlotPainter.cxx:1347
 TGLPlotPainter.cxx:1348
 TGLPlotPainter.cxx:1349
 TGLPlotPainter.cxx:1350
 TGLPlotPainter.cxx:1351
 TGLPlotPainter.cxx:1352
 TGLPlotPainter.cxx:1353
 TGLPlotPainter.cxx:1354
 TGLPlotPainter.cxx:1355
 TGLPlotPainter.cxx:1356
 TGLPlotPainter.cxx:1357
 TGLPlotPainter.cxx:1358
 TGLPlotPainter.cxx:1359
 TGLPlotPainter.cxx:1360
 TGLPlotPainter.cxx:1361
 TGLPlotPainter.cxx:1362
 TGLPlotPainter.cxx:1363
 TGLPlotPainter.cxx:1364
 TGLPlotPainter.cxx:1365
 TGLPlotPainter.cxx:1366
 TGLPlotPainter.cxx:1367
 TGLPlotPainter.cxx:1368
 TGLPlotPainter.cxx:1369
 TGLPlotPainter.cxx:1370
 TGLPlotPainter.cxx:1371
 TGLPlotPainter.cxx:1372
 TGLPlotPainter.cxx:1373
 TGLPlotPainter.cxx:1374
 TGLPlotPainter.cxx:1375
 TGLPlotPainter.cxx:1376
 TGLPlotPainter.cxx:1377
 TGLPlotPainter.cxx:1378
 TGLPlotPainter.cxx:1379
 TGLPlotPainter.cxx:1380
 TGLPlotPainter.cxx:1381
 TGLPlotPainter.cxx:1382
 TGLPlotPainter.cxx:1383
 TGLPlotPainter.cxx:1384
 TGLPlotPainter.cxx:1385
 TGLPlotPainter.cxx:1386
 TGLPlotPainter.cxx:1387
 TGLPlotPainter.cxx:1388
 TGLPlotPainter.cxx:1389
 TGLPlotPainter.cxx:1390
 TGLPlotPainter.cxx:1391
 TGLPlotPainter.cxx:1392
 TGLPlotPainter.cxx:1393
 TGLPlotPainter.cxx:1394
 TGLPlotPainter.cxx:1395
 TGLPlotPainter.cxx:1396
 TGLPlotPainter.cxx:1397
 TGLPlotPainter.cxx:1398
 TGLPlotPainter.cxx:1399
 TGLPlotPainter.cxx:1400
 TGLPlotPainter.cxx:1401
 TGLPlotPainter.cxx:1402
 TGLPlotPainter.cxx:1403
 TGLPlotPainter.cxx:1404
 TGLPlotPainter.cxx:1405
 TGLPlotPainter.cxx:1406
 TGLPlotPainter.cxx:1407
 TGLPlotPainter.cxx:1408
 TGLPlotPainter.cxx:1409
 TGLPlotPainter.cxx:1410
 TGLPlotPainter.cxx:1411
 TGLPlotPainter.cxx:1412
 TGLPlotPainter.cxx:1413
 TGLPlotPainter.cxx:1414
 TGLPlotPainter.cxx:1415
 TGLPlotPainter.cxx:1416
 TGLPlotPainter.cxx:1417
 TGLPlotPainter.cxx:1418
 TGLPlotPainter.cxx:1419
 TGLPlotPainter.cxx:1420
 TGLPlotPainter.cxx:1421
 TGLPlotPainter.cxx:1422
 TGLPlotPainter.cxx:1423
 TGLPlotPainter.cxx:1424
 TGLPlotPainter.cxx:1425
 TGLPlotPainter.cxx:1426
 TGLPlotPainter.cxx:1427
 TGLPlotPainter.cxx:1428
 TGLPlotPainter.cxx:1429
 TGLPlotPainter.cxx:1430
 TGLPlotPainter.cxx:1431
 TGLPlotPainter.cxx:1432
 TGLPlotPainter.cxx:1433
 TGLPlotPainter.cxx:1434
 TGLPlotPainter.cxx:1435
 TGLPlotPainter.cxx:1436
 TGLPlotPainter.cxx:1437
 TGLPlotPainter.cxx:1438
 TGLPlotPainter.cxx:1439
 TGLPlotPainter.cxx:1440
 TGLPlotPainter.cxx:1441
 TGLPlotPainter.cxx:1442
 TGLPlotPainter.cxx:1443
 TGLPlotPainter.cxx:1444
 TGLPlotPainter.cxx:1445
 TGLPlotPainter.cxx:1446
 TGLPlotPainter.cxx:1447
 TGLPlotPainter.cxx:1448
 TGLPlotPainter.cxx:1449
 TGLPlotPainter.cxx:1450
 TGLPlotPainter.cxx:1451
 TGLPlotPainter.cxx:1452
 TGLPlotPainter.cxx:1453
 TGLPlotPainter.cxx:1454
 TGLPlotPainter.cxx:1455
 TGLPlotPainter.cxx:1456
 TGLPlotPainter.cxx:1457
 TGLPlotPainter.cxx:1458
 TGLPlotPainter.cxx:1459
 TGLPlotPainter.cxx:1460
 TGLPlotPainter.cxx:1461
 TGLPlotPainter.cxx:1462
 TGLPlotPainter.cxx:1463
 TGLPlotPainter.cxx:1464
 TGLPlotPainter.cxx:1465
 TGLPlotPainter.cxx:1466
 TGLPlotPainter.cxx:1467
 TGLPlotPainter.cxx:1468
 TGLPlotPainter.cxx:1469
 TGLPlotPainter.cxx:1470
 TGLPlotPainter.cxx:1471
 TGLPlotPainter.cxx:1472
 TGLPlotPainter.cxx:1473
 TGLPlotPainter.cxx:1474
 TGLPlotPainter.cxx:1475
 TGLPlotPainter.cxx:1476
 TGLPlotPainter.cxx:1477
 TGLPlotPainter.cxx:1478
 TGLPlotPainter.cxx:1479
 TGLPlotPainter.cxx:1480
 TGLPlotPainter.cxx:1481
 TGLPlotPainter.cxx:1482
 TGLPlotPainter.cxx:1483
 TGLPlotPainter.cxx:1484
 TGLPlotPainter.cxx:1485
 TGLPlotPainter.cxx:1486
 TGLPlotPainter.cxx:1487
 TGLPlotPainter.cxx:1488
 TGLPlotPainter.cxx:1489
 TGLPlotPainter.cxx:1490
 TGLPlotPainter.cxx:1491
 TGLPlotPainter.cxx:1492
 TGLPlotPainter.cxx:1493
 TGLPlotPainter.cxx:1494
 TGLPlotPainter.cxx:1495
 TGLPlotPainter.cxx:1496
 TGLPlotPainter.cxx:1497
 TGLPlotPainter.cxx:1498
 TGLPlotPainter.cxx:1499
 TGLPlotPainter.cxx:1500
 TGLPlotPainter.cxx:1501
 TGLPlotPainter.cxx:1502
 TGLPlotPainter.cxx:1503
 TGLPlotPainter.cxx:1504
 TGLPlotPainter.cxx:1505
 TGLPlotPainter.cxx:1506
 TGLPlotPainter.cxx:1507
 TGLPlotPainter.cxx:1508
 TGLPlotPainter.cxx:1509
 TGLPlotPainter.cxx:1510
 TGLPlotPainter.cxx:1511
 TGLPlotPainter.cxx:1512
 TGLPlotPainter.cxx:1513
 TGLPlotPainter.cxx:1514
 TGLPlotPainter.cxx:1515
 TGLPlotPainter.cxx:1516
 TGLPlotPainter.cxx:1517
 TGLPlotPainter.cxx:1518
 TGLPlotPainter.cxx:1519
 TGLPlotPainter.cxx:1520
 TGLPlotPainter.cxx:1521
 TGLPlotPainter.cxx:1522
 TGLPlotPainter.cxx:1523
 TGLPlotPainter.cxx:1524
 TGLPlotPainter.cxx:1525
 TGLPlotPainter.cxx:1526
 TGLPlotPainter.cxx:1527
 TGLPlotPainter.cxx:1528
 TGLPlotPainter.cxx:1529
 TGLPlotPainter.cxx:1530
 TGLPlotPainter.cxx:1531
 TGLPlotPainter.cxx:1532
 TGLPlotPainter.cxx:1533
 TGLPlotPainter.cxx:1534
 TGLPlotPainter.cxx:1535
 TGLPlotPainter.cxx:1536
 TGLPlotPainter.cxx:1537
 TGLPlotPainter.cxx:1538
 TGLPlotPainter.cxx:1539
 TGLPlotPainter.cxx:1540
 TGLPlotPainter.cxx:1541
 TGLPlotPainter.cxx:1542
 TGLPlotPainter.cxx:1543
 TGLPlotPainter.cxx:1544
 TGLPlotPainter.cxx:1545
 TGLPlotPainter.cxx:1546
 TGLPlotPainter.cxx:1547
 TGLPlotPainter.cxx:1548
 TGLPlotPainter.cxx:1549
 TGLPlotPainter.cxx:1550
 TGLPlotPainter.cxx:1551
 TGLPlotPainter.cxx:1552
 TGLPlotPainter.cxx:1553
 TGLPlotPainter.cxx:1554
 TGLPlotPainter.cxx:1555
 TGLPlotPainter.cxx:1556
 TGLPlotPainter.cxx:1557
 TGLPlotPainter.cxx:1558
 TGLPlotPainter.cxx:1559
 TGLPlotPainter.cxx:1560
 TGLPlotPainter.cxx:1561
 TGLPlotPainter.cxx:1562
 TGLPlotPainter.cxx:1563
 TGLPlotPainter.cxx:1564
 TGLPlotPainter.cxx:1565
 TGLPlotPainter.cxx:1566
 TGLPlotPainter.cxx:1567
 TGLPlotPainter.cxx:1568
 TGLPlotPainter.cxx:1569
 TGLPlotPainter.cxx:1570
 TGLPlotPainter.cxx:1571
 TGLPlotPainter.cxx:1572
 TGLPlotPainter.cxx:1573
 TGLPlotPainter.cxx:1574
 TGLPlotPainter.cxx:1575
 TGLPlotPainter.cxx:1576
 TGLPlotPainter.cxx:1577
 TGLPlotPainter.cxx:1578
 TGLPlotPainter.cxx:1579
 TGLPlotPainter.cxx:1580
 TGLPlotPainter.cxx:1581
 TGLPlotPainter.cxx:1582
 TGLPlotPainter.cxx:1583
 TGLPlotPainter.cxx:1584
 TGLPlotPainter.cxx:1585
 TGLPlotPainter.cxx:1586
 TGLPlotPainter.cxx:1587
 TGLPlotPainter.cxx:1588
 TGLPlotPainter.cxx:1589
 TGLPlotPainter.cxx:1590
 TGLPlotPainter.cxx:1591
 TGLPlotPainter.cxx:1592
 TGLPlotPainter.cxx:1593
 TGLPlotPainter.cxx:1594
 TGLPlotPainter.cxx:1595
 TGLPlotPainter.cxx:1596
 TGLPlotPainter.cxx:1597
 TGLPlotPainter.cxx:1598
 TGLPlotPainter.cxx:1599
 TGLPlotPainter.cxx:1600
 TGLPlotPainter.cxx:1601
 TGLPlotPainter.cxx:1602
 TGLPlotPainter.cxx:1603
 TGLPlotPainter.cxx:1604
 TGLPlotPainter.cxx:1605
 TGLPlotPainter.cxx:1606
 TGLPlotPainter.cxx:1607
 TGLPlotPainter.cxx:1608
 TGLPlotPainter.cxx:1609
 TGLPlotPainter.cxx:1610
 TGLPlotPainter.cxx:1611
 TGLPlotPainter.cxx:1612
 TGLPlotPainter.cxx:1613
 TGLPlotPainter.cxx:1614
 TGLPlotPainter.cxx:1615
 TGLPlotPainter.cxx:1616
 TGLPlotPainter.cxx:1617
 TGLPlotPainter.cxx:1618
 TGLPlotPainter.cxx:1619
 TGLPlotPainter.cxx:1620
 TGLPlotPainter.cxx:1621
 TGLPlotPainter.cxx:1622
 TGLPlotPainter.cxx:1623
 TGLPlotPainter.cxx:1624
 TGLPlotPainter.cxx:1625
 TGLPlotPainter.cxx:1626
 TGLPlotPainter.cxx:1627
 TGLPlotPainter.cxx:1628
 TGLPlotPainter.cxx:1629
 TGLPlotPainter.cxx:1630
 TGLPlotPainter.cxx:1631
 TGLPlotPainter.cxx:1632
 TGLPlotPainter.cxx:1633
 TGLPlotPainter.cxx:1634
 TGLPlotPainter.cxx:1635
 TGLPlotPainter.cxx:1636
 TGLPlotPainter.cxx:1637
 TGLPlotPainter.cxx:1638
 TGLPlotPainter.cxx:1639
 TGLPlotPainter.cxx:1640
 TGLPlotPainter.cxx:1641
 TGLPlotPainter.cxx:1642
 TGLPlotPainter.cxx:1643
 TGLPlotPainter.cxx:1644
 TGLPlotPainter.cxx:1645
 TGLPlotPainter.cxx:1646
 TGLPlotPainter.cxx:1647
 TGLPlotPainter.cxx:1648
 TGLPlotPainter.cxx:1649
 TGLPlotPainter.cxx:1650
 TGLPlotPainter.cxx:1651
 TGLPlotPainter.cxx:1652
 TGLPlotPainter.cxx:1653
 TGLPlotPainter.cxx:1654
 TGLPlotPainter.cxx:1655
 TGLPlotPainter.cxx:1656
 TGLPlotPainter.cxx:1657
 TGLPlotPainter.cxx:1658
 TGLPlotPainter.cxx:1659
 TGLPlotPainter.cxx:1660
 TGLPlotPainter.cxx:1661
 TGLPlotPainter.cxx:1662
 TGLPlotPainter.cxx:1663
 TGLPlotPainter.cxx:1664
 TGLPlotPainter.cxx:1665
 TGLPlotPainter.cxx:1666
 TGLPlotPainter.cxx:1667
 TGLPlotPainter.cxx:1668
 TGLPlotPainter.cxx:1669
 TGLPlotPainter.cxx:1670
 TGLPlotPainter.cxx:1671
 TGLPlotPainter.cxx:1672
 TGLPlotPainter.cxx:1673
 TGLPlotPainter.cxx:1674
 TGLPlotPainter.cxx:1675
 TGLPlotPainter.cxx:1676
 TGLPlotPainter.cxx:1677
 TGLPlotPainter.cxx:1678
 TGLPlotPainter.cxx:1679
 TGLPlotPainter.cxx:1680
 TGLPlotPainter.cxx:1681
 TGLPlotPainter.cxx:1682
 TGLPlotPainter.cxx:1683
 TGLPlotPainter.cxx:1684
 TGLPlotPainter.cxx:1685
 TGLPlotPainter.cxx:1686
 TGLPlotPainter.cxx:1687
 TGLPlotPainter.cxx:1688
 TGLPlotPainter.cxx:1689
 TGLPlotPainter.cxx:1690
 TGLPlotPainter.cxx:1691
 TGLPlotPainter.cxx:1692
 TGLPlotPainter.cxx:1693
 TGLPlotPainter.cxx:1694
 TGLPlotPainter.cxx:1695
 TGLPlotPainter.cxx:1696
 TGLPlotPainter.cxx:1697
 TGLPlotPainter.cxx:1698
 TGLPlotPainter.cxx:1699
 TGLPlotPainter.cxx:1700
 TGLPlotPainter.cxx:1701
 TGLPlotPainter.cxx:1702
 TGLPlotPainter.cxx:1703
 TGLPlotPainter.cxx:1704
 TGLPlotPainter.cxx:1705
 TGLPlotPainter.cxx:1706
 TGLPlotPainter.cxx:1707
 TGLPlotPainter.cxx:1708
 TGLPlotPainter.cxx:1709
 TGLPlotPainter.cxx:1710
 TGLPlotPainter.cxx:1711
 TGLPlotPainter.cxx:1712
 TGLPlotPainter.cxx:1713
 TGLPlotPainter.cxx:1714
 TGLPlotPainter.cxx:1715
 TGLPlotPainter.cxx:1716
 TGLPlotPainter.cxx:1717
 TGLPlotPainter.cxx:1718
 TGLPlotPainter.cxx:1719
 TGLPlotPainter.cxx:1720
 TGLPlotPainter.cxx:1721
 TGLPlotPainter.cxx:1722
 TGLPlotPainter.cxx:1723
 TGLPlotPainter.cxx:1724
 TGLPlotPainter.cxx:1725
 TGLPlotPainter.cxx:1726
 TGLPlotPainter.cxx:1727
 TGLPlotPainter.cxx:1728
 TGLPlotPainter.cxx:1729
 TGLPlotPainter.cxx:1730
 TGLPlotPainter.cxx:1731
 TGLPlotPainter.cxx:1732
 TGLPlotPainter.cxx:1733
 TGLPlotPainter.cxx:1734
 TGLPlotPainter.cxx:1735
 TGLPlotPainter.cxx:1736
 TGLPlotPainter.cxx:1737
 TGLPlotPainter.cxx:1738
 TGLPlotPainter.cxx:1739
 TGLPlotPainter.cxx:1740
 TGLPlotPainter.cxx:1741
 TGLPlotPainter.cxx:1742
 TGLPlotPainter.cxx:1743
 TGLPlotPainter.cxx:1744
 TGLPlotPainter.cxx:1745
 TGLPlotPainter.cxx:1746
 TGLPlotPainter.cxx:1747
 TGLPlotPainter.cxx:1748
 TGLPlotPainter.cxx:1749
 TGLPlotPainter.cxx:1750
 TGLPlotPainter.cxx:1751
 TGLPlotPainter.cxx:1752
 TGLPlotPainter.cxx:1753
 TGLPlotPainter.cxx:1754
 TGLPlotPainter.cxx:1755
 TGLPlotPainter.cxx:1756
 TGLPlotPainter.cxx:1757
 TGLPlotPainter.cxx:1758
 TGLPlotPainter.cxx:1759
 TGLPlotPainter.cxx:1760
 TGLPlotPainter.cxx:1761
 TGLPlotPainter.cxx:1762
 TGLPlotPainter.cxx:1763
 TGLPlotPainter.cxx:1764
 TGLPlotPainter.cxx:1765
 TGLPlotPainter.cxx:1766
 TGLPlotPainter.cxx:1767
 TGLPlotPainter.cxx:1768
 TGLPlotPainter.cxx:1769
 TGLPlotPainter.cxx:1770
 TGLPlotPainter.cxx:1771
 TGLPlotPainter.cxx:1772
 TGLPlotPainter.cxx:1773
 TGLPlotPainter.cxx:1774
 TGLPlotPainter.cxx:1775
 TGLPlotPainter.cxx:1776
 TGLPlotPainter.cxx:1777
 TGLPlotPainter.cxx:1778
 TGLPlotPainter.cxx:1779
 TGLPlotPainter.cxx:1780
 TGLPlotPainter.cxx:1781
 TGLPlotPainter.cxx:1782
 TGLPlotPainter.cxx:1783
 TGLPlotPainter.cxx:1784
 TGLPlotPainter.cxx:1785
 TGLPlotPainter.cxx:1786
 TGLPlotPainter.cxx:1787
 TGLPlotPainter.cxx:1788
 TGLPlotPainter.cxx:1789
 TGLPlotPainter.cxx:1790
 TGLPlotPainter.cxx:1791
 TGLPlotPainter.cxx:1792
 TGLPlotPainter.cxx:1793
 TGLPlotPainter.cxx:1794
 TGLPlotPainter.cxx:1795
 TGLPlotPainter.cxx:1796
 TGLPlotPainter.cxx:1797
 TGLPlotPainter.cxx:1798
 TGLPlotPainter.cxx:1799
 TGLPlotPainter.cxx:1800
 TGLPlotPainter.cxx:1801
 TGLPlotPainter.cxx:1802
 TGLPlotPainter.cxx:1803
 TGLPlotPainter.cxx:1804
 TGLPlotPainter.cxx:1805
 TGLPlotPainter.cxx:1806
 TGLPlotPainter.cxx:1807
 TGLPlotPainter.cxx:1808
 TGLPlotPainter.cxx:1809
 TGLPlotPainter.cxx:1810
 TGLPlotPainter.cxx:1811
 TGLPlotPainter.cxx:1812
 TGLPlotPainter.cxx:1813
 TGLPlotPainter.cxx:1814
 TGLPlotPainter.cxx:1815
 TGLPlotPainter.cxx:1816
 TGLPlotPainter.cxx:1817
 TGLPlotPainter.cxx:1818
 TGLPlotPainter.cxx:1819
 TGLPlotPainter.cxx:1820
 TGLPlotPainter.cxx:1821
 TGLPlotPainter.cxx:1822
 TGLPlotPainter.cxx:1823
 TGLPlotPainter.cxx:1824
 TGLPlotPainter.cxx:1825
 TGLPlotPainter.cxx:1826
 TGLPlotPainter.cxx:1827
 TGLPlotPainter.cxx:1828
 TGLPlotPainter.cxx:1829
 TGLPlotPainter.cxx:1830
 TGLPlotPainter.cxx:1831
 TGLPlotPainter.cxx:1832
 TGLPlotPainter.cxx:1833
 TGLPlotPainter.cxx:1834
 TGLPlotPainter.cxx:1835
 TGLPlotPainter.cxx:1836
 TGLPlotPainter.cxx:1837
 TGLPlotPainter.cxx:1838
 TGLPlotPainter.cxx:1839
 TGLPlotPainter.cxx:1840
 TGLPlotPainter.cxx:1841
 TGLPlotPainter.cxx:1842
 TGLPlotPainter.cxx:1843
 TGLPlotPainter.cxx:1844
 TGLPlotPainter.cxx:1845
 TGLPlotPainter.cxx:1846
 TGLPlotPainter.cxx:1847
 TGLPlotPainter.cxx:1848
 TGLPlotPainter.cxx:1849
 TGLPlotPainter.cxx:1850
 TGLPlotPainter.cxx:1851
 TGLPlotPainter.cxx:1852
 TGLPlotPainter.cxx:1853
 TGLPlotPainter.cxx:1854
 TGLPlotPainter.cxx:1855
 TGLPlotPainter.cxx:1856
 TGLPlotPainter.cxx:1857
 TGLPlotPainter.cxx:1858
 TGLPlotPainter.cxx:1859
 TGLPlotPainter.cxx:1860
 TGLPlotPainter.cxx:1861
 TGLPlotPainter.cxx:1862
 TGLPlotPainter.cxx:1863
 TGLPlotPainter.cxx:1864
 TGLPlotPainter.cxx:1865
 TGLPlotPainter.cxx:1866
 TGLPlotPainter.cxx:1867
 TGLPlotPainter.cxx:1868
 TGLPlotPainter.cxx:1869
 TGLPlotPainter.cxx:1870
 TGLPlotPainter.cxx:1871
 TGLPlotPainter.cxx:1872
 TGLPlotPainter.cxx:1873
 TGLPlotPainter.cxx:1874
 TGLPlotPainter.cxx:1875
 TGLPlotPainter.cxx:1876
 TGLPlotPainter.cxx:1877
 TGLPlotPainter.cxx:1878
 TGLPlotPainter.cxx:1879
 TGLPlotPainter.cxx:1880
 TGLPlotPainter.cxx:1881
 TGLPlotPainter.cxx:1882
 TGLPlotPainter.cxx:1883
 TGLPlotPainter.cxx:1884
 TGLPlotPainter.cxx:1885
 TGLPlotPainter.cxx:1886
 TGLPlotPainter.cxx:1887
 TGLPlotPainter.cxx:1888
 TGLPlotPainter.cxx:1889
 TGLPlotPainter.cxx:1890
 TGLPlotPainter.cxx:1891
 TGLPlotPainter.cxx:1892
 TGLPlotPainter.cxx:1893
 TGLPlotPainter.cxx:1894
 TGLPlotPainter.cxx:1895
 TGLPlotPainter.cxx:1896
 TGLPlotPainter.cxx:1897
 TGLPlotPainter.cxx:1898
 TGLPlotPainter.cxx:1899
 TGLPlotPainter.cxx:1900
 TGLPlotPainter.cxx:1901
 TGLPlotPainter.cxx:1902
 TGLPlotPainter.cxx:1903
 TGLPlotPainter.cxx:1904
 TGLPlotPainter.cxx:1905
 TGLPlotPainter.cxx:1906
 TGLPlotPainter.cxx:1907
 TGLPlotPainter.cxx:1908
 TGLPlotPainter.cxx:1909
 TGLPlotPainter.cxx:1910
 TGLPlotPainter.cxx:1911
 TGLPlotPainter.cxx:1912
 TGLPlotPainter.cxx:1913
 TGLPlotPainter.cxx:1914
 TGLPlotPainter.cxx:1915
 TGLPlotPainter.cxx:1916
 TGLPlotPainter.cxx:1917
 TGLPlotPainter.cxx:1918
 TGLPlotPainter.cxx:1919
 TGLPlotPainter.cxx:1920
 TGLPlotPainter.cxx:1921
 TGLPlotPainter.cxx:1922
 TGLPlotPainter.cxx:1923
 TGLPlotPainter.cxx:1924
 TGLPlotPainter.cxx:1925
 TGLPlotPainter.cxx:1926
 TGLPlotPainter.cxx:1927
 TGLPlotPainter.cxx:1928
 TGLPlotPainter.cxx:1929
 TGLPlotPainter.cxx:1930
 TGLPlotPainter.cxx:1931
 TGLPlotPainter.cxx:1932
 TGLPlotPainter.cxx:1933
 TGLPlotPainter.cxx:1934
 TGLPlotPainter.cxx:1935
 TGLPlotPainter.cxx:1936
 TGLPlotPainter.cxx:1937
 TGLPlotPainter.cxx:1938
 TGLPlotPainter.cxx:1939
 TGLPlotPainter.cxx:1940
 TGLPlotPainter.cxx:1941
 TGLPlotPainter.cxx:1942
 TGLPlotPainter.cxx:1943
 TGLPlotPainter.cxx:1944
 TGLPlotPainter.cxx:1945
 TGLPlotPainter.cxx:1946
 TGLPlotPainter.cxx:1947
 TGLPlotPainter.cxx:1948
 TGLPlotPainter.cxx:1949
 TGLPlotPainter.cxx:1950
 TGLPlotPainter.cxx:1951
 TGLPlotPainter.cxx:1952
 TGLPlotPainter.cxx:1953
 TGLPlotPainter.cxx:1954
 TGLPlotPainter.cxx:1955
 TGLPlotPainter.cxx:1956
 TGLPlotPainter.cxx:1957
 TGLPlotPainter.cxx:1958
 TGLPlotPainter.cxx:1959
 TGLPlotPainter.cxx:1960
 TGLPlotPainter.cxx:1961
 TGLPlotPainter.cxx:1962
 TGLPlotPainter.cxx:1963
 TGLPlotPainter.cxx:1964
 TGLPlotPainter.cxx:1965
 TGLPlotPainter.cxx:1966
 TGLPlotPainter.cxx:1967
 TGLPlotPainter.cxx:1968
 TGLPlotPainter.cxx:1969
 TGLPlotPainter.cxx:1970
 TGLPlotPainter.cxx:1971
 TGLPlotPainter.cxx:1972
 TGLPlotPainter.cxx:1973
 TGLPlotPainter.cxx:1974
 TGLPlotPainter.cxx:1975
 TGLPlotPainter.cxx:1976
 TGLPlotPainter.cxx:1977
 TGLPlotPainter.cxx:1978
 TGLPlotPainter.cxx:1979
 TGLPlotPainter.cxx:1980
 TGLPlotPainter.cxx:1981
 TGLPlotPainter.cxx:1982
 TGLPlotPainter.cxx:1983
 TGLPlotPainter.cxx:1984
 TGLPlotPainter.cxx:1985
 TGLPlotPainter.cxx:1986
 TGLPlotPainter.cxx:1987
 TGLPlotPainter.cxx:1988
 TGLPlotPainter.cxx:1989
 TGLPlotPainter.cxx:1990
 TGLPlotPainter.cxx:1991
 TGLPlotPainter.cxx:1992
 TGLPlotPainter.cxx:1993
 TGLPlotPainter.cxx:1994
 TGLPlotPainter.cxx:1995
 TGLPlotPainter.cxx:1996