ROOT logo
// @(#)root/eve:$Id: TGLAxisPainter.cxx 31692 2009-12-08 17:56:21Z matevz $
// Author: Matevz Tadel 2007

/*************************************************************************
 * Copyright (C) 1995-2007, 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 "TGLAxisPainter.h"

#include "TGLRnrCtx.h"
#include "TGLCamera.h"
#include "TGLIncludes.h"
#include "TGLRnrCtx.h"
#include "TGLFontManager.h"

#include "TAttAxis.h"
#include "TAxis.h"
#include "TH1.h"
#include "THLimitsFinder.h"

#include "TMath.h"
#include "TPRegexp.h"

//==============================================================================
// TGLAxisPainterBox
//==============================================================================

//______________________________________________________________________________
//
// Utility class to paint axis in GL.

ClassImp(TGLAxisPainter);

//______________________________________________________________________________
TGLAxisPainter::TGLAxisPainter():
   fExp(0),
   fMaxDigits(5),
   fDecimals(0),

   fAttAxis(0), fUseAxisColors(kTRUE),

   fFontMode(TGLFont::kTexture),
   fDir(1, 0, 0),
   fTMNDim(1),
   fLabelPixelFontSize(14),
   fTitlePixelFontSize(14),

   fLabelAlignH(TGLFont::kCenterH),
   fLabelAlignV(TGLFont::kCenterV)
{
   // Constructor.
}


//______________________________________________________________________________
TGLAxisPainter::~TGLAxisPainter()
{
   // Destructor.

}

//______________________________________________________________________________
void TGLAxisPainter::SetLabelAlign(TGLFont::ETextAlignH_e h, TGLFont::ETextAlignV_e v)
{
   // Set label align.

   fLabelAlignH = h;
   fLabelAlignV = v;
}

//______________________________________________________________________________
void TGLAxisPainter::LabelsLimits(const char *label, Int_t &first, Int_t &last) const
{
   // Find first and last character of a label.

   last = strlen(label) - 1;
   for (Int_t i = 0; i <= last; i++) {
      if (strchr("1234567890-+.", label[i])) {
         first = i;
         return;
      }
   }
   Error("LabelsLimits", "attempt to draw a blank label");
}

//______________________________________________________________________________
void TGLAxisPainter::FormAxisValue(Double_t  val, TString &s) const
{
   // Returns formatted text suitable for display of value.

   s.Form(fFormat, val);
   s = s.Strip(TString::kLeading);

   if (s == "-." || s == "-0")
   {
      s  = "0";
      return;
   }

   if (s.EndsWith("."))
      s += '0';

   Ssiz_t ld = s.Last('.');
   if (s.Length() - ld > fDecimals)
      s.Remove(ld + fDecimals);

   TPMERegexp zeroes("[-+]?0\\.0*$");
   zeroes.Substitute(s, "0");
}

//______________________________________________________________________________
void TGLAxisPainter::SetTextFormat(Double_t min, Double_t max, Double_t bw1)
{
   // Construct print format from given primary bin width.

   Double_t absMax = TMath::Max(TMath::Abs(min), TMath::Abs(max));
   Double_t epsilon = 1e-5;
   Double_t absMaxLog = TMath::Log10(absMax) + epsilon;

   fExp   = 0;
   Int_t if1, if2;
   Double_t xmicros = TMath::Power(10, -fMaxDigits);
   if (bw1 < xmicros && absMaxLog < 0) {
      // First case : bin width less than 0.001
      fExp = (Int_t)absMaxLog;
      if (fExp % 3 == 1) fExp += TMath::Sign(2, fExp);
      if (fExp % 3 == 2) fExp += TMath::Sign(1, fExp);
      if1     = fMaxDigits;
      if2     = fMaxDigits - 2;
   } else {
      // Use x 10 n format. (only powers of 3 allowed)
      Float_t af = (absMax > 1) ? absMaxLog : TMath::Log10(absMax * 0.0001);
      af += epsilon;
      Int_t clog = Int_t(af) + 1;

      if (clog > fMaxDigits) {
         while (1) {
            fExp++;
            absMax    /= 10;
            if (fExp % 3 == 0 && absMax <= TMath::Power(10, fMaxDigits - 1)) break;
         }
      } else if (clog < -fMaxDigits) {
         Double_t rne   = 1 / TMath::Power(10, fMaxDigits - 2);
         while (1) {
            fExp--;
            absMax  *= 10;
            if (fExp % 3 == 0 && absMax >= rne) break;
         }
      }

      Int_t na = 0;
      for (Int_t i = fMaxDigits - 1; i > 0; i--) {
         if (TMath::Abs(absMax) < TMath::Power(10, i)) na = fMaxDigits - i;
      }
      Double_t size =  TMath::Abs(max - min);
      Int_t ndyn = (Int_t)(size / bw1);
      while (ndyn) {
         if (size / ndyn <= 0.999 && na < fMaxDigits - 2) {
            na++;
            ndyn /= 10;
         } else break;
      }
      if2 = na;
      if1 = TMath::Max(clog + na, fMaxDigits) + 1;
   }

   // compose text format
   if (TMath::Min(min, max) < 0)if1 = if1 + 1;
   if1 = TMath::Min(if1, 32);

   // In some cases, if1 and if2 are too small....
   Double_t dwlabel = bw1 * TMath::Power(10, -fExp);
   while (dwlabel < TMath::Power(10, -if2)) {
      if1++;
      if2++;
   }
   if (if1 > 14) if1 = 14;
   if (if2 > 14) if2 = 14;
   if (if2) fFormat.Form("%%%d.%df", if1, if2);
   else     fFormat.Form("%%%d.%df", if1 + 1, 1);

   // get decimal number
   TString chtemp;
   chtemp.Form("%g", dwlabel);
   fDecimals = 0;
   if (chtemp.First('.') != kNPOS)
      fDecimals = chtemp.Length() - chtemp.First('.') - 1;
}

/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/

//
// Utility functions.

//______________________________________________________________________________
void TGLAxisPainter::RnrText(const TString &txt, const TGLVector3 &p, TGLFont::ETextAlignH_e aH, TGLFont::ETextAlignV_e aV, const TGLFont &font) const
{
   // Render text at the given position. Offset depends of text aligment.

   if (fFontMode == TGLFont::kPixmap || fFontMode ==  TGLFont::kBitmap)
   {
     font.Render(txt, p.X(), p.Y(), p.Z(), aH, aV);
   }
   else
   {
      // In case of non pixmap font, size is adjusted to the projected view in order to
      // be visible on zoom out. In other words texture and polygon fonts imitate
      // pixmap font behaviour.
      glPushMatrix();
      glTranslated(p.X(), p.Y(), p.Z());
      Double_t sc = fLabel3DFontSize/fLabelPixelFontSize;
      glScaled(sc, sc, 1);
      font.Render(txt, 0, 0, 0, aH, aV);
      glPopMatrix();
   }
}

//______________________________________________________________________________
void TGLAxisPainter::SetLabelFont(TGLRnrCtx &rnrCtx, const char* fontName, Int_t fontSize, Double_t size3d)
{
   // Set label font derived from TAttAxis.

   rnrCtx.RegisterFontNoScale(fontSize, fontName, fFontMode, fLabelFont);
   fLabel3DFontSize = size3d;
   fLabelPixelFontSize = fLabelFont.GetSize();
}

//______________________________________________________________________________
void TGLAxisPainter::RnrLabels() const
{
   // Render label reading prepared list ov value-pos pairs.

   if (fUseAxisColors)
      TGLUtil::Color(fAttAxis->GetLabelColor());

   glPushMatrix();

   Float_t off = fAttAxis->GetLabelOffset() +  fAttAxis->GetTickLength();
   TGLVector3 offVec = fTMOff[0] * off;
   glTranslated(offVec.X(), offVec.Y(), offVec.Z());

   fLabelFont.PreRender();
   Double_t p = 0.;
   TString s;
   for (LabVec_t::const_iterator it = fLabVec.begin(); it != fLabVec.end(); ++it) {
      FormAxisValue((*it).second, s);
      p = (*it).first;
      RnrText(s, fDir*p, fLabelAlignH, fLabelAlignV, fLabelFont);
   }

   fLabelFont.PostRender();
   glPopMatrix();
}

//______________________________________________________________________________
void TGLAxisPainter::SetTitleFont(TGLRnrCtx &rnrCtx, const char* fontName,
                                  Int_t fontSize, Double_t size3d)
{
   // Set title font derived from TAttAxis.

   rnrCtx.RegisterFontNoScale(fontSize, fontName, fFontMode, fTitleFont);
   fTitlePixelFontSize = fTitleFont.GetSize();
   fTitle3DFontSize = size3d;
}

//______________________________________________________________________________
void TGLAxisPainter::RnrTitle(const TString &txt, TGLVector3 &pos , TGLFont::ETextAlignH_e aH, TGLFont::ETextAlignV_e aV) const
{
   // Draw title at given position.

   if (fUseAxisColors)
      TGLUtil::Color(fAttAxis->GetTitleColor());

   TString title = (fExp) ? Form("%s [10^%d]", txt.Data(), fExp) : txt;
   fTitleFont.PreRender();
   RnrText(title, pos, aH, aV, fTitleFont);
   fTitleFont.PostRender();
}

//______________________________________________________________________________
void TGLAxisPainter::RnrLines() const
{
   // Render axis main line and tickmarks.

   if (fUseAxisColors)
      TGLUtil::Color(fAttAxis->GetAxisColor());

   TGLUtil::LineWidth(1);
   glBegin(GL_LINES);

   // Main line.
   //
   Float_t min = fTMVec.front().first;
   Float_t max = fTMVec.back().first;
   TGLVector3 start = fDir * min;
   TGLVector3 end   = fDir * max;
   glVertex3dv(start.Arr());
   glVertex3dv(end.Arr());

   // Tick-marks.
   // Support three possible directions and two orders.
   //
   Float_t tmsOrderFirst  = fAttAxis->GetTickLength();
   Float_t tmsOrderSecond = tmsOrderFirst * 0.5;
   TGLVector3 pos;
   TMVec_t::const_iterator it = fTMVec.begin();
   Int_t nt =  fTMVec.size()-1;
   it++;
   for (Int_t t = 1; t < nt; ++t, ++it) {
      pos = fDir * ((*it).first);
      for (Int_t dim = 0; dim < fTMNDim; dim++) {
         glVertex3dv(pos.Arr());
         if ((*it).second)
            glVertex3dv((pos + fTMOff[dim]*tmsOrderSecond).Arr());
         else
            glVertex3dv((pos + fTMOff[dim]*tmsOrderFirst).Arr());
      }
   }
   glEnd();
}

//______________________________________________________________________________
void TGLAxisPainter::PaintAxis(TGLRnrCtx &rnrCtx, TAxis* ax)
{
   // GL render TAxis.

   fAttAxis = ax;
   Double_t min = ax->GetXmin();
   Double_t max = ax->GetXmax();
   if (min == max)
   {
      Error("TGLAxisPainter::PaintAxis", "axis without range");
      return;
   }

   //______________________________________________________________________________
   // Fill lablels value-pos and tick-marks position-length.

   Int_t n1a = TMath::FloorNint(fAttAxis->GetNdivisions() / 100);
   Int_t n2a = fAttAxis->GetNdivisions() - n1a * 100;
   Int_t bn1, bn2;
   Double_t bw1, bw2; // primary , secondary bin width
   Double_t bl1, bh1, bl2, bh2; // bin low, high values

   // Read limits from users range
   THLimitsFinder::Optimize(min, max, n1a, bl1, bh1, bn1, bw1);
   THLimitsFinder::Optimize(bl1, bl1 + bw1, n2a, bl2, bh2, bn2, bw2);

   //______________________________________________________________________________

   // Get TM. First and last values are reserved for axis range
   //
   fTMVec.clear();
   fLabVec.clear();

   fTMVec.push_back(TM_t(min, -1));

   Double_t v1 = bl1;
   Double_t v2 = 0;
   for (Int_t t1 = 0; t1 <= bn1; t1++)
   {
      fTMVec.push_back(TM_t(v1, 0));
      fLabVec.push_back(Lab_t(v1, v1));
      v2 = v1 + bw2;
      for (Int_t t2 = 1; t2 < bn2; t2++)
      {
         if (v2 > max) break;
         fTMVec.push_back(TM_t(v2, 1));
         v2 += bw2;
      }
      v1 += bw1;
   }

   // complete low edges for 1.st order TM
   v2 = bl1 -bw2;
   while (v2 > min) {
      fTMVec.push_back(TM_t(v2, 1));
      v2 -= bw2;
   }

   fTMVec.push_back(TM_t(max, -1));

   //______________________________________________________________________________
   // Get labels. In this case trivial one-one mapping.

   Double_t p = bl1;
   fLabVec.clear();
   SetTextFormat(min, max, bw1);
   for (Int_t i = 0; i <= bn1; i++) {
      fLabVec.push_back(Lab_t(p, p));
      p += bw1;
   }

   //______________________________________________________________________________
   // Set font.

   // First projected axis length needed if use realtive font size.
   const char* labFontName   = TGLFontManager::GetFontNameFromId(fAttAxis->GetLabelFont());
   const char* titleFontName = TGLFontManager::GetFontNameFromId(fAttAxis->GetTitleFont());

   // pixel font size is set externaly for pixmap and bitmap fonts
   // for texture and polygon fonts font size is set here, to get font resolution
   if (fFontMode == TGLFont::kPolygon || fFontMode == TGLFont::kTexture)
   {
      GLdouble mm[16], pm[16];
      GLint    vp[4];
      glGetDoublev(GL_MODELVIEW_MATRIX,  mm);
      glGetDoublev(GL_PROJECTION_MATRIX, pm);
      glGetIntegerv(GL_VIEWPORT, vp);

      GLdouble dn[3], up[3];
      gluProject(fDir.X()*min, fDir.Y()*min, fDir.Z()*min, mm, pm, vp, &dn[0], &dn[1], &dn[2]);
      gluProject(fDir.X()*max, fDir.Y()*max, fDir.Z()*max, mm, pm, vp, &up[0], &up[1], &up[2]);
      Double_t len = TMath::Sqrt((up[0] - dn[0]) * (up[0] - dn[0]) +
                                 (up[1] - dn[1]) * (up[1] - dn[1]) +
                                 (up[2] - dn[2]) * (up[2] - dn[2]));

      fLabelPixelFontSize = TMath::Nint(len*fAttAxis->GetLabelSize());
      fTitlePixelFontSize = TMath::Nint(len*fAttAxis->GetTitleSize());
   }

   SetLabelFont(rnrCtx, labFontName,   fLabelPixelFontSize, (max - min)*fAttAxis->GetLabelSize());
   SetTitleFont(rnrCtx, titleFontName, fTitlePixelFontSize, (max - min)*fAttAxis->GetTitleSize());

   //______________________________________________________________________________
   // Draw.

   if (!fUseAxisColors)
      TGLUtil::Color(rnrCtx.ColorSet().Markup());

   glDisable(GL_LIGHTING);
   RnrLines();
   RnrLabels();

   if (ax->GetTitle())
      RnrTitle(ax->GetTitle(), fTitlePos, fLabelAlignH, fLabelAlignV);
}


//==============================================================================
// TGLAxisPainterBox
//==============================================================================

//______________________________________________________________________________
//
// Painter class for axes encompassing a 3D box.

ClassImp(TGLAxisPainterBox);

//______________________________________________________________________________
TGLAxisPainterBox::TGLAxisPainterBox() :
   TGLAxisPainter()
{
   // Constructor.

   fAxis[0] = fAxis[1] = fAxis[2] = 0;
}

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

//______________________________________________________________________________
void TGLAxisPainterBox::SetAxis3DTitlePos(TGLRnrCtx &rnrCtx)
{
   // Get position of axes and titles from projected corners.

   Double_t x0 =  fAxis[0]->GetXmin();
   Double_t x1 =  fAxis[0]->GetXmax();

   Double_t y0 =  fAxis[1]->GetXmin();
   Double_t y1 =  fAxis[1]->GetXmax();

   Double_t z0 =  fAxis[2]->GetXmin();
   Double_t z1 =  fAxis[2]->GetXmax();

   // project corner points
   const GLdouble *pm = rnrCtx.RefCamera().RefLastNoPickProjM().CArr();
   GLdouble mm[16];
   GLint    vp[4];
   glGetDoublev(GL_MODELVIEW_MATRIX,  mm);
   glGetIntegerv(GL_VIEWPORT, vp);
   GLdouble projX[4], projY[4], projZ[4];
   GLdouble cornerX[4];
   GLdouble cornerY[4];
   cornerX[0] = x0; cornerY[0] = y0;
   cornerX[1] = x1; cornerY[1] = y0;
   cornerX[2] = x1; cornerY[2] = y1;
   cornerX[3] = x0; cornerY[3] = y1;
   gluProject(cornerX[0], cornerY[0], z0, mm, pm, vp, &projX[0], &projY[0], &projZ[0]);
   gluProject(cornerX[1], cornerY[1], z0, mm, pm, vp, &projX[1], &projY[1], &projZ[1]);
   gluProject(cornerX[2], cornerY[2], z0, mm, pm, vp, &projX[2], &projY[2], &projZ[2]);
   gluProject(cornerX[3], cornerY[3], z0, mm, pm, vp, &projX[3], &projY[3], &projZ[3]);


   // Z axis location (left most corner)
   //
   Int_t idxLeft = 0;
   Float_t xt = projX[0];
   for (Int_t i = 1; i < 4; ++i) {
      if (projX[i] < xt) {
         xt  = projX[i];
         idxLeft = i;
      }
   }
   fAxisTitlePos[2].Set(cornerX[idxLeft], cornerY[idxLeft], z1);


   // XY axis location (closest to eye) first
   //
   Float_t zt = 1.f;
   Float_t zMin = 0.f;
   Int_t idxFront = 0;
   for (Int_t i = 0; i < 4; ++i) {
      if (projZ[i] < zt) {
         zt  = projZ[i];
         idxFront = i;
      }
      if (projZ[i] > zMin) zMin = projZ[i];
   }
   Int_t xyIdx = idxFront;
   if (zMin - zt < 1e-2) xyIdx = 0; // avoid flipping in front view


   switch (xyIdx) {
      case 0:
         fAxisTitlePos[0].Set(x1, y0, z0);
         fAxisTitlePos[1].Set(x0, y1, z0);
         break;
      case 1:
         fAxisTitlePos[0].Set(x1, y0, z0);
         fAxisTitlePos[1].Set(x0, y1, z0);
         break;
      case 2:
         fAxisTitlePos[0].Set(x0, y1, z0);
         fAxisTitlePos[1].Set(x1, y0, z0);
         break;
      case 3:
         fAxisTitlePos[0].Set(x1, y1, z0);
         fAxisTitlePos[1].Set(x0, y0, z0);
         break;
   }
}

//______________________________________________________________________________
void TGLAxisPainterBox::DrawAxis3D(TGLRnrCtx &rnrCtx)
{
   // Draw XYZ axis with bitmap font.

   // set font size first depending on size of projected axis
   TGLMatrix mm;
   GLdouble pm[16];
   GLint    vp[4];
   glGetDoublev(GL_MODELVIEW_MATRIX, mm.Arr());
   glGetDoublev(GL_PROJECTION_MATRIX, pm);
   glGetIntegerv(GL_VIEWPORT, vp);

   // determine bitmap font size from lenght of projected vertical
   GLdouble dn[3];
   GLdouble up[3];
   gluProject(fAxisTitlePos[2].X(), fAxisTitlePos[2].Y(), fAxis[2]->GetXmin(), mm.Arr(), pm, vp, &dn[0], &dn[1], &dn[2]);
   gluProject(fAxisTitlePos[2].X(), fAxisTitlePos[2].Y(), fAxis[2]->GetXmax(), mm.Arr(), pm, vp, &up[0], &up[1], &up[2]);
   Double_t len = TMath::Sqrt((up[0] - dn[0]) * (up[0] - dn[0]) +
                              (up[1] - dn[1]) * (up[1] - dn[1]) +
                              (up[2] - dn[2]) * (up[2] - dn[2]));
   SetLabelPixelFontSize(TMath::CeilNint(len*fAxis[2]->GetLabelSize()));
   SetTitlePixelFontSize(TMath::CeilNint(len*fAxis[2]->GetTitleSize()));


   // Z axis
   //
   // tickmark vector = 10 pixels left
   fAxis[2]->SetTickLength(1.); // leave this relative factor neutral
   TGLVertex3 worldRef(fAxisTitlePos[2].X(), fAxisTitlePos[2].Y(), fAxisTitlePos[2].Z());
   RefTMOff(0) = rnrCtx.RefCamera().ViewportDeltaToWorld(worldRef, -10, 0, &mm);
   SetTMNDim(1);
   RefDir().Set(0., 0., 1.);
   SetLabelAlign(TGLFont::kRight,  TGLFont::kBottom);
   glPushMatrix();
   glTranslatef(fAxisTitlePos[2].X(), fAxisTitlePos[2].Y(), 0);
   RefTitlePos().Set(RefTMOff(0).X(), RefTMOff(0).Y(),fAxisTitlePos[2].Z());
   PaintAxis(rnrCtx, fAxis[2]);
   glPopMatrix();

   // XY Axis
   //
   SetTMNDim(2);
   RefTMOff(1).Set(0, 0, fAxis[2]->GetXmin()- fAxis[2]->GetXmax());
   SetLabelAlign(TGLFont::kCenterH, TGLFont::kBottom);
   // X
   glPushMatrix();
   RefDir().Set(1, 0, 0);
   Float_t yOff = fAxis[0]->GetXmax() - fAxis[0]->GetXmin();
   yOff *= 0.5f;
   if (fAxisTitlePos[0].Y() < fAxis[1]->GetXmax()) yOff = -yOff;
   RefTMOff(0).Set(0, yOff, 0);
   glTranslatef(0, fAxisTitlePos[0].Y(), fAxisTitlePos[0].Z());
   RefTitlePos().Set(fAxisTitlePos[0].X(), yOff*1.5*fAxis[0]->GetTickLength(), 0);
   PaintAxis(rnrCtx, fAxis[0]);
   glPopMatrix();

   // Y
   glPushMatrix();
   RefDir().Set(0, 1, 0);
   Float_t xOff = fAxis[1]->GetXmax() - fAxis[1]->GetXmin();
   if (fAxisTitlePos[1].X() < fAxis[0]->GetXmax()) xOff = -xOff;
   RefTMOff(0).Set(xOff, 0, 0);
   glTranslatef(fAxisTitlePos[1].X(), 0, fAxisTitlePos[1].Z());
   RefTitlePos().Set(xOff*1.5*fAxis[1]->GetTickLength(), fAxisTitlePos[1].Y(), 0);
   PaintAxis(rnrCtx, fAxis[1]);
   glPopMatrix();
}

//______________________________________________________________________________
void TGLAxisPainterBox::PlotStandard(      TGLRnrCtx      &rnrCtx,
                                     const TH1            *histo,
                                     const TGLBoundingBox &bbox)
{
   //

   fAxis[0] = histo->GetXaxis();
   fAxis[1] = histo->GetYaxis();
   fAxis[2] = histo->GetZaxis();
   // fAxis[2]->SetTitle("Z");
   // fAxis[2]->SetLabelSize(0.04);
   // fAxis[2]->SetTitleSize(0.05);

   Double_t sx = (bbox.XMax() - bbox.XMin()) / (fAxis[0]->GetXmax() - fAxis[0]->GetXmin());
   Double_t sy = (bbox.YMax() - bbox.YMin()) / (fAxis[1]->GetXmax() - fAxis[1]->GetXmin());
   Double_t sz = (bbox.ZMax() - bbox.ZMin()) / (fAxis[2]->GetXmax() - fAxis[2]->GetXmin());

   // draw
   glPushMatrix();
   glScaled(sx, sy, sz);
   SetAxis3DTitlePos(rnrCtx);
   DrawAxis3D(rnrCtx);
   glPopMatrix();
}
 TGLAxisPainter.cxx:1
 TGLAxisPainter.cxx:2
 TGLAxisPainter.cxx:3
 TGLAxisPainter.cxx:4
 TGLAxisPainter.cxx:5
 TGLAxisPainter.cxx:6
 TGLAxisPainter.cxx:7
 TGLAxisPainter.cxx:8
 TGLAxisPainter.cxx:9
 TGLAxisPainter.cxx:10
 TGLAxisPainter.cxx:11
 TGLAxisPainter.cxx:12
 TGLAxisPainter.cxx:13
 TGLAxisPainter.cxx:14
 TGLAxisPainter.cxx:15
 TGLAxisPainter.cxx:16
 TGLAxisPainter.cxx:17
 TGLAxisPainter.cxx:18
 TGLAxisPainter.cxx:19
 TGLAxisPainter.cxx:20
 TGLAxisPainter.cxx:21
 TGLAxisPainter.cxx:22
 TGLAxisPainter.cxx:23
 TGLAxisPainter.cxx:24
 TGLAxisPainter.cxx:25
 TGLAxisPainter.cxx:26
 TGLAxisPainter.cxx:27
 TGLAxisPainter.cxx:28
 TGLAxisPainter.cxx:29
 TGLAxisPainter.cxx:30
 TGLAxisPainter.cxx:31
 TGLAxisPainter.cxx:32
 TGLAxisPainter.cxx:33
 TGLAxisPainter.cxx:34
 TGLAxisPainter.cxx:35
 TGLAxisPainter.cxx:36
 TGLAxisPainter.cxx:37
 TGLAxisPainter.cxx:38
 TGLAxisPainter.cxx:39
 TGLAxisPainter.cxx:40
 TGLAxisPainter.cxx:41
 TGLAxisPainter.cxx:42
 TGLAxisPainter.cxx:43
 TGLAxisPainter.cxx:44
 TGLAxisPainter.cxx:45
 TGLAxisPainter.cxx:46
 TGLAxisPainter.cxx:47
 TGLAxisPainter.cxx:48
 TGLAxisPainter.cxx:49
 TGLAxisPainter.cxx:50
 TGLAxisPainter.cxx:51
 TGLAxisPainter.cxx:52
 TGLAxisPainter.cxx:53
 TGLAxisPainter.cxx:54
 TGLAxisPainter.cxx:55
 TGLAxisPainter.cxx:56
 TGLAxisPainter.cxx:57
 TGLAxisPainter.cxx:58
 TGLAxisPainter.cxx:59
 TGLAxisPainter.cxx:60
 TGLAxisPainter.cxx:61
 TGLAxisPainter.cxx:62
 TGLAxisPainter.cxx:63
 TGLAxisPainter.cxx:64
 TGLAxisPainter.cxx:65
 TGLAxisPainter.cxx:66
 TGLAxisPainter.cxx:67
 TGLAxisPainter.cxx:68
 TGLAxisPainter.cxx:69
 TGLAxisPainter.cxx:70
 TGLAxisPainter.cxx:71
 TGLAxisPainter.cxx:72
 TGLAxisPainter.cxx:73
 TGLAxisPainter.cxx:74
 TGLAxisPainter.cxx:75
 TGLAxisPainter.cxx:76
 TGLAxisPainter.cxx:77
 TGLAxisPainter.cxx:78
 TGLAxisPainter.cxx:79
 TGLAxisPainter.cxx:80
 TGLAxisPainter.cxx:81
 TGLAxisPainter.cxx:82
 TGLAxisPainter.cxx:83
 TGLAxisPainter.cxx:84
 TGLAxisPainter.cxx:85
 TGLAxisPainter.cxx:86
 TGLAxisPainter.cxx:87
 TGLAxisPainter.cxx:88
 TGLAxisPainter.cxx:89
 TGLAxisPainter.cxx:90
 TGLAxisPainter.cxx:91
 TGLAxisPainter.cxx:92
 TGLAxisPainter.cxx:93
 TGLAxisPainter.cxx:94
 TGLAxisPainter.cxx:95
 TGLAxisPainter.cxx:96
 TGLAxisPainter.cxx:97
 TGLAxisPainter.cxx:98
 TGLAxisPainter.cxx:99
 TGLAxisPainter.cxx:100
 TGLAxisPainter.cxx:101
 TGLAxisPainter.cxx:102
 TGLAxisPainter.cxx:103
 TGLAxisPainter.cxx:104
 TGLAxisPainter.cxx:105
 TGLAxisPainter.cxx:106
 TGLAxisPainter.cxx:107
 TGLAxisPainter.cxx:108
 TGLAxisPainter.cxx:109
 TGLAxisPainter.cxx:110
 TGLAxisPainter.cxx:111
 TGLAxisPainter.cxx:112
 TGLAxisPainter.cxx:113
 TGLAxisPainter.cxx:114
 TGLAxisPainter.cxx:115
 TGLAxisPainter.cxx:116
 TGLAxisPainter.cxx:117
 TGLAxisPainter.cxx:118
 TGLAxisPainter.cxx:119
 TGLAxisPainter.cxx:120
 TGLAxisPainter.cxx:121
 TGLAxisPainter.cxx:122
 TGLAxisPainter.cxx:123
 TGLAxisPainter.cxx:124
 TGLAxisPainter.cxx:125
 TGLAxisPainter.cxx:126
 TGLAxisPainter.cxx:127
 TGLAxisPainter.cxx:128
 TGLAxisPainter.cxx:129
 TGLAxisPainter.cxx:130
 TGLAxisPainter.cxx:131
 TGLAxisPainter.cxx:132
 TGLAxisPainter.cxx:133
 TGLAxisPainter.cxx:134
 TGLAxisPainter.cxx:135
 TGLAxisPainter.cxx:136
 TGLAxisPainter.cxx:137
 TGLAxisPainter.cxx:138
 TGLAxisPainter.cxx:139
 TGLAxisPainter.cxx:140
 TGLAxisPainter.cxx:141
 TGLAxisPainter.cxx:142
 TGLAxisPainter.cxx:143
 TGLAxisPainter.cxx:144
 TGLAxisPainter.cxx:145
 TGLAxisPainter.cxx:146
 TGLAxisPainter.cxx:147
 TGLAxisPainter.cxx:148
 TGLAxisPainter.cxx:149
 TGLAxisPainter.cxx:150
 TGLAxisPainter.cxx:151
 TGLAxisPainter.cxx:152
 TGLAxisPainter.cxx:153
 TGLAxisPainter.cxx:154
 TGLAxisPainter.cxx:155
 TGLAxisPainter.cxx:156
 TGLAxisPainter.cxx:157
 TGLAxisPainter.cxx:158
 TGLAxisPainter.cxx:159
 TGLAxisPainter.cxx:160
 TGLAxisPainter.cxx:161
 TGLAxisPainter.cxx:162
 TGLAxisPainter.cxx:163
 TGLAxisPainter.cxx:164
 TGLAxisPainter.cxx:165
 TGLAxisPainter.cxx:166
 TGLAxisPainter.cxx:167
 TGLAxisPainter.cxx:168
 TGLAxisPainter.cxx:169
 TGLAxisPainter.cxx:170
 TGLAxisPainter.cxx:171
 TGLAxisPainter.cxx:172
 TGLAxisPainter.cxx:173
 TGLAxisPainter.cxx:174
 TGLAxisPainter.cxx:175
 TGLAxisPainter.cxx:176
 TGLAxisPainter.cxx:177
 TGLAxisPainter.cxx:178
 TGLAxisPainter.cxx:179
 TGLAxisPainter.cxx:180
 TGLAxisPainter.cxx:181
 TGLAxisPainter.cxx:182
 TGLAxisPainter.cxx:183
 TGLAxisPainter.cxx:184
 TGLAxisPainter.cxx:185
 TGLAxisPainter.cxx:186
 TGLAxisPainter.cxx:187
 TGLAxisPainter.cxx:188
 TGLAxisPainter.cxx:189
 TGLAxisPainter.cxx:190
 TGLAxisPainter.cxx:191
 TGLAxisPainter.cxx:192
 TGLAxisPainter.cxx:193
 TGLAxisPainter.cxx:194
 TGLAxisPainter.cxx:195
 TGLAxisPainter.cxx:196
 TGLAxisPainter.cxx:197
 TGLAxisPainter.cxx:198
 TGLAxisPainter.cxx:199
 TGLAxisPainter.cxx:200
 TGLAxisPainter.cxx:201
 TGLAxisPainter.cxx:202
 TGLAxisPainter.cxx:203
 TGLAxisPainter.cxx:204
 TGLAxisPainter.cxx:205
 TGLAxisPainter.cxx:206
 TGLAxisPainter.cxx:207
 TGLAxisPainter.cxx:208
 TGLAxisPainter.cxx:209
 TGLAxisPainter.cxx:210
 TGLAxisPainter.cxx:211
 TGLAxisPainter.cxx:212
 TGLAxisPainter.cxx:213
 TGLAxisPainter.cxx:214
 TGLAxisPainter.cxx:215
 TGLAxisPainter.cxx:216
 TGLAxisPainter.cxx:217
 TGLAxisPainter.cxx:218
 TGLAxisPainter.cxx:219
 TGLAxisPainter.cxx:220
 TGLAxisPainter.cxx:221
 TGLAxisPainter.cxx:222
 TGLAxisPainter.cxx:223
 TGLAxisPainter.cxx:224
 TGLAxisPainter.cxx:225
 TGLAxisPainter.cxx:226
 TGLAxisPainter.cxx:227
 TGLAxisPainter.cxx:228
 TGLAxisPainter.cxx:229
 TGLAxisPainter.cxx:230
 TGLAxisPainter.cxx:231
 TGLAxisPainter.cxx:232
 TGLAxisPainter.cxx:233
 TGLAxisPainter.cxx:234
 TGLAxisPainter.cxx:235
 TGLAxisPainter.cxx:236
 TGLAxisPainter.cxx:237
 TGLAxisPainter.cxx:238
 TGLAxisPainter.cxx:239
 TGLAxisPainter.cxx:240
 TGLAxisPainter.cxx:241
 TGLAxisPainter.cxx:242
 TGLAxisPainter.cxx:243
 TGLAxisPainter.cxx:244
 TGLAxisPainter.cxx:245
 TGLAxisPainter.cxx:246
 TGLAxisPainter.cxx:247
 TGLAxisPainter.cxx:248
 TGLAxisPainter.cxx:249
 TGLAxisPainter.cxx:250
 TGLAxisPainter.cxx:251
 TGLAxisPainter.cxx:252
 TGLAxisPainter.cxx:253
 TGLAxisPainter.cxx:254
 TGLAxisPainter.cxx:255
 TGLAxisPainter.cxx:256
 TGLAxisPainter.cxx:257
 TGLAxisPainter.cxx:258
 TGLAxisPainter.cxx:259
 TGLAxisPainter.cxx:260
 TGLAxisPainter.cxx:261
 TGLAxisPainter.cxx:262
 TGLAxisPainter.cxx:263
 TGLAxisPainter.cxx:264
 TGLAxisPainter.cxx:265
 TGLAxisPainter.cxx:266
 TGLAxisPainter.cxx:267
 TGLAxisPainter.cxx:268
 TGLAxisPainter.cxx:269
 TGLAxisPainter.cxx:270
 TGLAxisPainter.cxx:271
 TGLAxisPainter.cxx:272
 TGLAxisPainter.cxx:273
 TGLAxisPainter.cxx:274
 TGLAxisPainter.cxx:275
 TGLAxisPainter.cxx:276
 TGLAxisPainter.cxx:277
 TGLAxisPainter.cxx:278
 TGLAxisPainter.cxx:279
 TGLAxisPainter.cxx:280
 TGLAxisPainter.cxx:281
 TGLAxisPainter.cxx:282
 TGLAxisPainter.cxx:283
 TGLAxisPainter.cxx:284
 TGLAxisPainter.cxx:285
 TGLAxisPainter.cxx:286
 TGLAxisPainter.cxx:287
 TGLAxisPainter.cxx:288
 TGLAxisPainter.cxx:289
 TGLAxisPainter.cxx:290
 TGLAxisPainter.cxx:291
 TGLAxisPainter.cxx:292
 TGLAxisPainter.cxx:293
 TGLAxisPainter.cxx:294
 TGLAxisPainter.cxx:295
 TGLAxisPainter.cxx:296
 TGLAxisPainter.cxx:297
 TGLAxisPainter.cxx:298
 TGLAxisPainter.cxx:299
 TGLAxisPainter.cxx:300
 TGLAxisPainter.cxx:301
 TGLAxisPainter.cxx:302
 TGLAxisPainter.cxx:303
 TGLAxisPainter.cxx:304
 TGLAxisPainter.cxx:305
 TGLAxisPainter.cxx:306
 TGLAxisPainter.cxx:307
 TGLAxisPainter.cxx:308
 TGLAxisPainter.cxx:309
 TGLAxisPainter.cxx:310
 TGLAxisPainter.cxx:311
 TGLAxisPainter.cxx:312
 TGLAxisPainter.cxx:313
 TGLAxisPainter.cxx:314
 TGLAxisPainter.cxx:315
 TGLAxisPainter.cxx:316
 TGLAxisPainter.cxx:317
 TGLAxisPainter.cxx:318
 TGLAxisPainter.cxx:319
 TGLAxisPainter.cxx:320
 TGLAxisPainter.cxx:321
 TGLAxisPainter.cxx:322
 TGLAxisPainter.cxx:323
 TGLAxisPainter.cxx:324
 TGLAxisPainter.cxx:325
 TGLAxisPainter.cxx:326
 TGLAxisPainter.cxx:327
 TGLAxisPainter.cxx:328
 TGLAxisPainter.cxx:329
 TGLAxisPainter.cxx:330
 TGLAxisPainter.cxx:331
 TGLAxisPainter.cxx:332
 TGLAxisPainter.cxx:333
 TGLAxisPainter.cxx:334
 TGLAxisPainter.cxx:335
 TGLAxisPainter.cxx:336
 TGLAxisPainter.cxx:337
 TGLAxisPainter.cxx:338
 TGLAxisPainter.cxx:339
 TGLAxisPainter.cxx:340
 TGLAxisPainter.cxx:341
 TGLAxisPainter.cxx:342
 TGLAxisPainter.cxx:343
 TGLAxisPainter.cxx:344
 TGLAxisPainter.cxx:345
 TGLAxisPainter.cxx:346
 TGLAxisPainter.cxx:347
 TGLAxisPainter.cxx:348
 TGLAxisPainter.cxx:349
 TGLAxisPainter.cxx:350
 TGLAxisPainter.cxx:351
 TGLAxisPainter.cxx:352
 TGLAxisPainter.cxx:353
 TGLAxisPainter.cxx:354
 TGLAxisPainter.cxx:355
 TGLAxisPainter.cxx:356
 TGLAxisPainter.cxx:357
 TGLAxisPainter.cxx:358
 TGLAxisPainter.cxx:359
 TGLAxisPainter.cxx:360
 TGLAxisPainter.cxx:361
 TGLAxisPainter.cxx:362
 TGLAxisPainter.cxx:363
 TGLAxisPainter.cxx:364
 TGLAxisPainter.cxx:365
 TGLAxisPainter.cxx:366
 TGLAxisPainter.cxx:367
 TGLAxisPainter.cxx:368
 TGLAxisPainter.cxx:369
 TGLAxisPainter.cxx:370
 TGLAxisPainter.cxx:371
 TGLAxisPainter.cxx:372
 TGLAxisPainter.cxx:373
 TGLAxisPainter.cxx:374
 TGLAxisPainter.cxx:375
 TGLAxisPainter.cxx:376
 TGLAxisPainter.cxx:377
 TGLAxisPainter.cxx:378
 TGLAxisPainter.cxx:379
 TGLAxisPainter.cxx:380
 TGLAxisPainter.cxx:381
 TGLAxisPainter.cxx:382
 TGLAxisPainter.cxx:383
 TGLAxisPainter.cxx:384
 TGLAxisPainter.cxx:385
 TGLAxisPainter.cxx:386
 TGLAxisPainter.cxx:387
 TGLAxisPainter.cxx:388
 TGLAxisPainter.cxx:389
 TGLAxisPainter.cxx:390
 TGLAxisPainter.cxx:391
 TGLAxisPainter.cxx:392
 TGLAxisPainter.cxx:393
 TGLAxisPainter.cxx:394
 TGLAxisPainter.cxx:395
 TGLAxisPainter.cxx:396
 TGLAxisPainter.cxx:397
 TGLAxisPainter.cxx:398
 TGLAxisPainter.cxx:399
 TGLAxisPainter.cxx:400
 TGLAxisPainter.cxx:401
 TGLAxisPainter.cxx:402
 TGLAxisPainter.cxx:403
 TGLAxisPainter.cxx:404
 TGLAxisPainter.cxx:405
 TGLAxisPainter.cxx:406
 TGLAxisPainter.cxx:407
 TGLAxisPainter.cxx:408
 TGLAxisPainter.cxx:409
 TGLAxisPainter.cxx:410
 TGLAxisPainter.cxx:411
 TGLAxisPainter.cxx:412
 TGLAxisPainter.cxx:413
 TGLAxisPainter.cxx:414
 TGLAxisPainter.cxx:415
 TGLAxisPainter.cxx:416
 TGLAxisPainter.cxx:417
 TGLAxisPainter.cxx:418
 TGLAxisPainter.cxx:419
 TGLAxisPainter.cxx:420
 TGLAxisPainter.cxx:421
 TGLAxisPainter.cxx:422
 TGLAxisPainter.cxx:423
 TGLAxisPainter.cxx:424
 TGLAxisPainter.cxx:425
 TGLAxisPainter.cxx:426
 TGLAxisPainter.cxx:427
 TGLAxisPainter.cxx:428
 TGLAxisPainter.cxx:429
 TGLAxisPainter.cxx:430
 TGLAxisPainter.cxx:431
 TGLAxisPainter.cxx:432
 TGLAxisPainter.cxx:433
 TGLAxisPainter.cxx:434
 TGLAxisPainter.cxx:435
 TGLAxisPainter.cxx:436
 TGLAxisPainter.cxx:437
 TGLAxisPainter.cxx:438
 TGLAxisPainter.cxx:439
 TGLAxisPainter.cxx:440
 TGLAxisPainter.cxx:441
 TGLAxisPainter.cxx:442
 TGLAxisPainter.cxx:443
 TGLAxisPainter.cxx:444
 TGLAxisPainter.cxx:445
 TGLAxisPainter.cxx:446
 TGLAxisPainter.cxx:447
 TGLAxisPainter.cxx:448
 TGLAxisPainter.cxx:449
 TGLAxisPainter.cxx:450
 TGLAxisPainter.cxx:451
 TGLAxisPainter.cxx:452
 TGLAxisPainter.cxx:453
 TGLAxisPainter.cxx:454
 TGLAxisPainter.cxx:455
 TGLAxisPainter.cxx:456
 TGLAxisPainter.cxx:457
 TGLAxisPainter.cxx:458
 TGLAxisPainter.cxx:459
 TGLAxisPainter.cxx:460
 TGLAxisPainter.cxx:461
 TGLAxisPainter.cxx:462
 TGLAxisPainter.cxx:463
 TGLAxisPainter.cxx:464
 TGLAxisPainter.cxx:465
 TGLAxisPainter.cxx:466
 TGLAxisPainter.cxx:467
 TGLAxisPainter.cxx:468
 TGLAxisPainter.cxx:469
 TGLAxisPainter.cxx:470
 TGLAxisPainter.cxx:471
 TGLAxisPainter.cxx:472
 TGLAxisPainter.cxx:473
 TGLAxisPainter.cxx:474
 TGLAxisPainter.cxx:475
 TGLAxisPainter.cxx:476
 TGLAxisPainter.cxx:477
 TGLAxisPainter.cxx:478
 TGLAxisPainter.cxx:479
 TGLAxisPainter.cxx:480
 TGLAxisPainter.cxx:481
 TGLAxisPainter.cxx:482
 TGLAxisPainter.cxx:483
 TGLAxisPainter.cxx:484
 TGLAxisPainter.cxx:485
 TGLAxisPainter.cxx:486
 TGLAxisPainter.cxx:487
 TGLAxisPainter.cxx:488
 TGLAxisPainter.cxx:489
 TGLAxisPainter.cxx:490
 TGLAxisPainter.cxx:491
 TGLAxisPainter.cxx:492
 TGLAxisPainter.cxx:493
 TGLAxisPainter.cxx:494
 TGLAxisPainter.cxx:495
 TGLAxisPainter.cxx:496
 TGLAxisPainter.cxx:497
 TGLAxisPainter.cxx:498
 TGLAxisPainter.cxx:499
 TGLAxisPainter.cxx:500
 TGLAxisPainter.cxx:501
 TGLAxisPainter.cxx:502
 TGLAxisPainter.cxx:503
 TGLAxisPainter.cxx:504
 TGLAxisPainter.cxx:505
 TGLAxisPainter.cxx:506
 TGLAxisPainter.cxx:507
 TGLAxisPainter.cxx:508
 TGLAxisPainter.cxx:509
 TGLAxisPainter.cxx:510
 TGLAxisPainter.cxx:511
 TGLAxisPainter.cxx:512
 TGLAxisPainter.cxx:513
 TGLAxisPainter.cxx:514
 TGLAxisPainter.cxx:515
 TGLAxisPainter.cxx:516
 TGLAxisPainter.cxx:517
 TGLAxisPainter.cxx:518
 TGLAxisPainter.cxx:519
 TGLAxisPainter.cxx:520
 TGLAxisPainter.cxx:521
 TGLAxisPainter.cxx:522
 TGLAxisPainter.cxx:523
 TGLAxisPainter.cxx:524
 TGLAxisPainter.cxx:525
 TGLAxisPainter.cxx:526
 TGLAxisPainter.cxx:527
 TGLAxisPainter.cxx:528
 TGLAxisPainter.cxx:529
 TGLAxisPainter.cxx:530
 TGLAxisPainter.cxx:531
 TGLAxisPainter.cxx:532
 TGLAxisPainter.cxx:533
 TGLAxisPainter.cxx:534
 TGLAxisPainter.cxx:535
 TGLAxisPainter.cxx:536
 TGLAxisPainter.cxx:537
 TGLAxisPainter.cxx:538
 TGLAxisPainter.cxx:539
 TGLAxisPainter.cxx:540
 TGLAxisPainter.cxx:541
 TGLAxisPainter.cxx:542
 TGLAxisPainter.cxx:543
 TGLAxisPainter.cxx:544
 TGLAxisPainter.cxx:545
 TGLAxisPainter.cxx:546
 TGLAxisPainter.cxx:547
 TGLAxisPainter.cxx:548
 TGLAxisPainter.cxx:549
 TGLAxisPainter.cxx:550
 TGLAxisPainter.cxx:551
 TGLAxisPainter.cxx:552
 TGLAxisPainter.cxx:553
 TGLAxisPainter.cxx:554
 TGLAxisPainter.cxx:555
 TGLAxisPainter.cxx:556
 TGLAxisPainter.cxx:557
 TGLAxisPainter.cxx:558
 TGLAxisPainter.cxx:559
 TGLAxisPainter.cxx:560
 TGLAxisPainter.cxx:561
 TGLAxisPainter.cxx:562
 TGLAxisPainter.cxx:563
 TGLAxisPainter.cxx:564
 TGLAxisPainter.cxx:565
 TGLAxisPainter.cxx:566
 TGLAxisPainter.cxx:567
 TGLAxisPainter.cxx:568
 TGLAxisPainter.cxx:569
 TGLAxisPainter.cxx:570
 TGLAxisPainter.cxx:571
 TGLAxisPainter.cxx:572
 TGLAxisPainter.cxx:573
 TGLAxisPainter.cxx:574
 TGLAxisPainter.cxx:575
 TGLAxisPainter.cxx:576
 TGLAxisPainter.cxx:577
 TGLAxisPainter.cxx:578
 TGLAxisPainter.cxx:579
 TGLAxisPainter.cxx:580
 TGLAxisPainter.cxx:581
 TGLAxisPainter.cxx:582
 TGLAxisPainter.cxx:583
 TGLAxisPainter.cxx:584
 TGLAxisPainter.cxx:585
 TGLAxisPainter.cxx:586
 TGLAxisPainter.cxx:587
 TGLAxisPainter.cxx:588
 TGLAxisPainter.cxx:589
 TGLAxisPainter.cxx:590
 TGLAxisPainter.cxx:591
 TGLAxisPainter.cxx:592
 TGLAxisPainter.cxx:593
 TGLAxisPainter.cxx:594
 TGLAxisPainter.cxx:595
 TGLAxisPainter.cxx:596
 TGLAxisPainter.cxx:597
 TGLAxisPainter.cxx:598
 TGLAxisPainter.cxx:599
 TGLAxisPainter.cxx:600
 TGLAxisPainter.cxx:601
 TGLAxisPainter.cxx:602
 TGLAxisPainter.cxx:603
 TGLAxisPainter.cxx:604
 TGLAxisPainter.cxx:605
 TGLAxisPainter.cxx:606
 TGLAxisPainter.cxx:607
 TGLAxisPainter.cxx:608
 TGLAxisPainter.cxx:609
 TGLAxisPainter.cxx:610
 TGLAxisPainter.cxx:611
 TGLAxisPainter.cxx:612
 TGLAxisPainter.cxx:613
 TGLAxisPainter.cxx:614
 TGLAxisPainter.cxx:615
 TGLAxisPainter.cxx:616
 TGLAxisPainter.cxx:617
 TGLAxisPainter.cxx:618
 TGLAxisPainter.cxx:619
 TGLAxisPainter.cxx:620
 TGLAxisPainter.cxx:621
 TGLAxisPainter.cxx:622
 TGLAxisPainter.cxx:623
 TGLAxisPainter.cxx:624
 TGLAxisPainter.cxx:625
 TGLAxisPainter.cxx:626
 TGLAxisPainter.cxx:627
 TGLAxisPainter.cxx:628
 TGLAxisPainter.cxx:629
 TGLAxisPainter.cxx:630
 TGLAxisPainter.cxx:631
 TGLAxisPainter.cxx:632
 TGLAxisPainter.cxx:633
 TGLAxisPainter.cxx:634
 TGLAxisPainter.cxx:635
 TGLAxisPainter.cxx:636
 TGLAxisPainter.cxx:637
 TGLAxisPainter.cxx:638
 TGLAxisPainter.cxx:639
 TGLAxisPainter.cxx:640
 TGLAxisPainter.cxx:641
 TGLAxisPainter.cxx:642
 TGLAxisPainter.cxx:643
 TGLAxisPainter.cxx:644
 TGLAxisPainter.cxx:645
 TGLAxisPainter.cxx:646
 TGLAxisPainter.cxx:647