#include <algorithm>
#include <stdexcept>

#include "TMultiGraph.h"
#include "TH2Poly.h"
#include "TGraph.h"
#include "TClass.h"
#include "TStyle.h"
#include "TError.h"
#include "TColor.h"
#include "TMath.h"
#include "TList.h"
#include "TROOT.h"

#include "TGLH2PolyPainter.h"
#include "TGLPlotCamera.h"
#include "TGLIncludes.h"


ClassImp(TGLH2PolyPainter)

//______________________________________________________________________________
TGLH2PolyPainter::TGLH2PolyPainter(TH1 *hist, TGLPlotCamera *camera, TGLPlotCoordinates *coord)
                   : TGLPlotPainter(hist, camera, coord, kFALSE, kFALSE, kFALSE),
                     fZLog(kFALSE),
                     fZMin(0.)
{
   //Ctor.
   if(!dynamic_cast<TH2Poly *>(hist)) {
      Error("TGLH2PolyPainter::TGLH2PolyPainter", "bad histogram, must be a valid TH2Poly *");
      throw std::runtime_error("bad TH2Poly");
   }
}

//______________________________________________________________________________
char *TGLH2PolyPainter::GetPlotInfo(Int_t /*px*/, Int_t /*py*/)
{
   //Show number of bin and bin contents, if bin is under the cursor.
   fBinInfo = "";
   if (fSelectedPart) {
      if (fSelectedPart < fSelectionBase) {
         if (fHist->Class())
            fBinInfo += fHist->Class()->GetName();
         fBinInfo += "::";
         fBinInfo += fHist->GetName();
      } else if (!fHighColor) {
         const Int_t binIndex = fSelectedPart - fSelectionBase + 1;
         TH2Poly *h = static_cast<TH2Poly *>(fHist);
         fBinInfo.Form("%s (bin = %d; binc = %f)", h->GetBinTitle(binIndex), binIndex, h->GetBinContent(binIndex));//+ 1: bins in ROOT start from 1.
      } else
         fBinInfo = "Switch to true-color mode to obtain the correct info";
   }

   return (Char_t *)fBinInfo.Data();
}

//______________________________________________________________________________
Bool_t TGLH2PolyPainter::InitGeometry()
{
   //Tesselate polygons, if not done yet.
   //All pointers are validated here (and in functions called from here).
   //If any pointer is invalid - zero, or has unexpected type (dynamic_cast fails) -
   //InitGeometry will return false and nothing will be painted later.
   //That's why there are no checks in other functions.
   TH2Poly* hp = static_cast<TH2Poly *>(fHist);
   if (!fCoord->SetRanges(hp))
      return kFALSE;

   fBackBox.SetPlotBox(fCoord->GetXRangeScaled(), Rgl::gH2PolyScaleXY,
                       fCoord->GetYRangeScaled(), Rgl::gH2PolyScaleXY,
                       fCoord->GetZRangeScaled(), 1.);

   //This code is different from lego.
   //Currently, negative bin contents are not supported.
   fZMin = fBackBox.Get3DBox()[0].Z();

   if (hp->GetNewBinAdded()) {
      if (!CacheGeometry())
         return kFALSE;
      hp->SetNewBinAdded(kFALSE);
      hp->SetBinContentChanged(kFALSE);
   } else if (hp->GetBinContentChanged() || fZLog != fCoord->GetZLog()) {
      if (!UpdateGeometry())
         return kFALSE;
      hp->SetBinContentChanged(kFALSE);
   }

   fZLog = fCoord->GetZLog();

   return kTRUE;
}

//______________________________________________________________________________
void TGLH2PolyPainter::StartPan(Int_t px, Int_t py)
{
   //User clicks on a lego with middle mouse button (middle for pad).
   fMousePosition.fX = px;
   fMousePosition.fY = fCamera->GetHeight() - py;
   fCamera->StartPan(px, py);
   fBoxCut.StartMovement(px, py);
}

//______________________________________________________________________________
void TGLH2PolyPainter::Pan(Int_t px, Int_t py)
{
      //Mouse events handler.
   if (fSelectedPart >= fSelectionBase) {//Pan camera.
      SaveModelviewMatrix();
      SaveProjectionMatrix();

      fCamera->SetCamera();
      fCamera->Apply(fPadPhi, fPadTheta);
      fCamera->Pan(px, py);

      RestoreProjectionMatrix();
      RestoreModelviewMatrix();
   } else if (fSelectedPart > 0) {
      //Convert py into bottom-top orientation.
      py = fCamera->GetHeight() - py;

      SaveModelviewMatrix();
      SaveProjectionMatrix();

      fCamera->SetCamera();
      fCamera->Apply(fPadPhi, fPadTheta);

      if (!fHighColor) {
         if (fBoxCut.IsActive() && (fSelectedPart >= kXAxis && fSelectedPart <= kZAxis)) {
            fBoxCut.MoveBox(px, py, fSelectedPart);
         }
      }

      RestoreProjectionMatrix();
      RestoreModelviewMatrix();
   }

   fMousePosition.fX = px, fMousePosition.fY = py;
   fUpdateSelection = kTRUE;
}

//______________________________________________________________________________
void TGLH2PolyPainter::AddOption(const TString &/*stringOption*/)
{
   //No additional options.
}

//______________________________________________________________________________
void TGLH2PolyPainter::ProcessEvent(Int_t /*event*/, Int_t /*px*/, Int_t /*py*/)
{
   //No events.
}

//______________________________________________________________________________
void TGLH2PolyPainter::InitGL()const
{
   //Initialize some gl state variables.
   glEnable(GL_DEPTH_TEST);
   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT0);

   glEnable(GL_CULL_FACE);
   glCullFace(GL_BACK);

   glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
}

//______________________________________________________________________________
void TGLH2PolyPainter::DeInitGL()const
{
   //Return some gl states to original values.
   glDisable(GL_DEPTH_TEST);
   glDisable(GL_LIGHTING);
   glDisable(GL_LIGHT0);
   glDisable(GL_CULL_FACE);
   glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
}

namespace {

Double_t Distance(const Double_t *p1, const Double_t *p2);
Bool_t   IsPolygonCW(const Double_t *xs, const Double_t *ys, Int_t n);

}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawPlot()const
{
   //Draw extruded polygons and plot's frame.

   //Shift plot to point of origin.
   const Rgl::PlotTranslation trGuard(this);

   fBackBox.DrawBox(fSelectedPart, fSelectionPass, fZLevels, fHighColor);

   DrawExtrusion();
   DrawCaps();
}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawExtrusion()const
{
   //Extruded part of bins.
   //GL_QUADS, GL_QUAD_STRIP - have the same time on my laptop, so I use
   //GL_QUADS and forgot about vertex arrays (can require more memory BTW).
   TList *bins = static_cast<TH2Poly *>(fHist)->GetBins();
   Int_t binIndex = 0;
   for(TObjLink * link = bins->FirstLink(); link; link = link->Next(), ++binIndex) {
      TH2PolyBin *bin = static_cast<TH2PolyBin *>(link->GetObject());
      //const Double_t zMax = bin->GetContent() * fCoord->GetZScale();
      Double_t zMax = bin->GetContent();
      ClampZ(zMax);

      if (const TGraph * poly = dynamic_cast<TGraph*>(bin->GetPolygon())) {
         //DrawExtrusion(poly, zMin, zMax, binIndex);
         DrawExtrusion(poly, fZMin, zMax, binIndex);
      } else if (const TMultiGraph * mg = dynamic_cast<TMultiGraph*>(bin->GetPolygon())) {
         //DrawExtrusion(mg, zMin, zMax, binIndex);
         DrawExtrusion(mg, fZMin, zMax, binIndex);
      }//else is impossible.
   }
}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawExtrusion(const TGraph *poly, Double_t zMin, Double_t zMax, Int_t binIndex)const
{
   //Extrude polygon, described by TGraph.
   const Double_t *xs = poly->GetX();
   const Double_t *ys = poly->GetY();

   const Int_t nV = poly->GetN();

   //nV can never be less than 3 - InitGeometry fails on such polygons.
   //So, no checks here.

   const Int_t binID = fSelectionBase + binIndex;

   if (fSelectionPass) {
      if (!fHighColor)
         Rgl::ObjectIDToColor(binID, kFALSE);
   } else {
      SetBinColor(binIndex);
      if(!fHighColor && fSelectedPart == binID)
         glMaterialfv(GL_FRONT, GL_EMISSION, Rgl::gOrangeEmission);
   }

   //Before, orientation was always done in TH2Poly.
   //Now we do it every time here.
   FillTemporaryPolygon(xs, ys, 0., nV); //0. == z is not important here.

   Double_t normal[3] = {};
   for (Int_t j = 0; j < nV - 1; ++j) {
      const Double_t v0[] = {fPolygon[j * 3], fPolygon[j * 3 + 1], zMin};
      const Double_t v1[] = {fPolygon[(j + 1) * 3], fPolygon[(j + 1) * 3 + 1], zMin};

      if (Distance(v0, v1) < 1e-10)
         continue;

      const Double_t v2[] = {v1[0], v1[1], zMax};
      const Double_t v3[] = {v0[0], v0[1], zMax};

      TMath::Normal2Plane(v0, v1, v2, normal);
      Rgl::DrawQuadFilled(v0, v1, v2, v3, normal);
   }

   //Now, close the polygon.
   const Double_t v0[] = {fPolygon[(nV - 1) * 3], fPolygon[(nV - 1) * 3 + 1], zMin};
   const Double_t v1[] = {fPolygon[0], fPolygon[1], zMin};

   if (Distance(v0, v1) > 1e-10) {
      const Double_t v2[] = {v1[0], v1[1], zMax};
      const Double_t v3[] = {v0[0], v0[1], zMax};

      TMath::Normal2Plane(v0, v1, v2, normal);
      Rgl::DrawQuadFilled(v0, v1, v2, v3, normal);
   }

   if (!fHighColor && !fSelectionPass && fSelectedPart == binID)
      glMaterialfv(GL_FRONT, GL_EMISSION, Rgl::gNullEmission);
}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawExtrusion(const TMultiGraph *mg, Double_t zMin, Double_t zMax, Int_t binIndex)const
{
   //Multigraph contains a list of graphs, draw them.
   const TList *graphs = mg->GetListOfGraphs();
   for (TObjLink *link = graphs->FirstLink(); link; link = link->Next())
      DrawExtrusion((TGraph *)(link->GetObject()), zMin, zMax, binIndex);
}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawCaps()const
{
   //Caps on bins.
   glNormal3d(0., 0., 1.);

   Int_t binIndex = 0;
   const TList *bins = static_cast<TH2Poly *>(fHist)->GetBins();
   CIter_t cap = fCaps.begin();

   if(!bins->FirstLink())
      throw 1;

   //Very ugly iteration statement. Number of caps is equal to number of links (in a list
   //of bins including nested links in multigraphs. But this is not obvious from the code here,
   //so, I've added check cap != fCaps.end() to make it more or less clear.
   for (TObjLink *link = bins->FirstLink(); link && cap != fCaps.end(); link = link->Next()) {
      TH2PolyBin *polyBin = static_cast<TH2PolyBin *>(link->GetObject());
      if (dynamic_cast<TGraph *>(polyBin->GetPolygon())) {
         DrawCap(cap, binIndex);
         ++cap;
      } else if (TMultiGraph *mg = dynamic_cast<TMultiGraph *>(polyBin->GetPolygon())) {
         const TList *gs = mg->GetListOfGraphs();
         TObjLink *graphLink = gs->FirstLink();
         for (; graphLink && cap != fCaps.end(); graphLink = graphLink->Next(), ++cap)
            DrawCap(cap, binIndex);
      }

      ++binIndex;
   }
}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawCap(CIter_t cap, Int_t binIndex)const
{
   //Draw a cap on top of a bin.
   const Int_t binID = fSelectionBase + binIndex;
   if (fSelectionPass) {
      if (!fHighColor)
         Rgl::ObjectIDToColor(binID, kFALSE);
   } else {
      SetBinColor(binIndex);
      if(!fHighColor && fSelectedPart == binID)
         glMaterialfv(GL_FRONT, GL_EMISSION, Rgl::gOrangeEmission);
   }

   const Rgl::Pad::Tesselation_t &t = *cap;
   typedef std::list<Rgl::Pad::MeshPatch_t>::const_iterator CMIter_t;
   for (CMIter_t p = t.begin(); p != t.end(); ++p) {
      const std::vector<Double_t> &vs = p->fPatch;
      glBegin(GLenum(p->fPatchType));
      for (UInt_t i = 0; i < vs.size(); i += 3)
         glVertex3dv(&vs[i]);
      glEnd();
   }

   if (!fHighColor && !fSelectionPass && fSelectedPart == binID)
      glMaterialfv(GL_FRONT, GL_EMISSION, Rgl::gNullEmission);
}

//______________________________________________________________________________
Bool_t TGLH2PolyPainter::CacheGeometry()
{
   //Cache all data for TH2Poly object.
   TH2Poly *hp = static_cast<TH2Poly *>(fHist);
   TList *bins = hp->GetBins();
   if (!bins || !bins->GetEntries()) {
      Error("TGLH2PolyPainter::CacheGeometry", "Empty list of bins in TH2Poly");
      return kFALSE;
   }

   const Double_t zMin = fHist->GetMinimum();
   const Double_t zMax = fHist->GetMaximum();
   const Int_t nColors = gStyle->GetNumberOfColors();

   fBinColors.clear();
   fBinColors.reserve(bins->GetEntries());
   fPolygon.clear();
   fCaps.clear();

   Rgl::Pad::Tesselator tesselator(kTRUE);

   for (TObjLink * link = bins->FirstLink(); link; link = link->Next()) {
      TH2PolyBin * bin = static_cast<TH2PolyBin *>(link->GetObject());
      if (!bin || !bin->GetPolygon()) {
         Error("TGH2PolyPainter::InitGeometry", "Null bin or polygon pointer in a list of bins");
         return kFALSE;
      }

      Double_t binZ = bin->GetContent();
      if (!ClampZ(binZ)) {
         Error("TGLH2PolyPainter::CacheGeometry", "Negative bin content and log scale");
         return kFALSE;
      }

      if (const TGraph *g = dynamic_cast<TGraph *>(bin->GetPolygon())) {
         if (!BuildTesselation(tesselator, g,  binZ))
            return kFALSE;
      } else if (const TMultiGraph *mg = dynamic_cast<TMultiGraph *>(bin->GetPolygon())) {
         if (!BuildTesselation(tesselator, mg, binZ))
            return kFALSE;
      } else {
         //Da vy chto, sgovorilis' chto li???
         Error("TGLH2PolyPainter::CacheGeometry", "Bin contains object of unknown type");
         return kFALSE;
      }

      const Int_t colorIndex = gStyle->GetColorPalette(Int_t(((bin->GetContent() - zMin) / (zMax - zMin)) * (nColors - 1)));
      fBinColors.push_back(colorIndex);
   }

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGLH2PolyPainter::BuildTesselation(Rgl::Pad::Tesselator &tess, const TGraph *g, Double_t z)
{
   //Tesselate a polygon described by TGraph.
   const Double_t *xs = g->GetX();
   const Double_t *ys = g->GetY();

   if (!xs || !ys) {
      Error("TGLH2PolyPainter::BuildTesselation", "null array(s) in a polygon");
      return kFALSE;
   }

   const Int_t nV = g->GetN();
   if (nV < 3) {
      Error("TGLH2PolyPainter::BuildTesselation", "number of vertices in a polygon must be >= 3");
      return kFALSE;
   }

   fCaps.push_back(Rgl::Pad::Tesselation_t());
   FillTemporaryPolygon(xs, ys, z, nV);

   tess.SetDump(&fCaps.back());

   GLUtesselator *t = (GLUtesselator *)tess.GetTess();
   gluBeginPolygon(t);
   gluNextContour(t, (GLenum)GLU_UNKNOWN);

   glNormal3d(0., 0., 1.);

   for (Int_t j = 0; j < nV; ++j) {
      gluTessVertex(t, &fPolygon[j * 3], &fPolygon[j * 3]);
   }
   gluEndPolygon(t);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGLH2PolyPainter::BuildTesselation(Rgl::Pad::Tesselator &tess, const TMultiGraph *mg, Double_t z)
{
   //Iterate over multi graph contents and tesselate nested TGraphs.
   const TList *graphs = mg->GetListOfGraphs();
   if (!graphs) {
      Error("TGLH2PolyPainter::BuildTesselation", "null list of graphs in a multigraph");
      return kFALSE;
   }

   for(TObjLink *link = graphs->FirstLink(); link; link = link->Next()) {
      const TGraph *graph = dynamic_cast<TGraph *>(link->GetObject());
      if (!graph) {
         //Da chto za fignia v konce koncov????
         Error("TGLH2PolyPainter::BuildTesselation", "TGraph expected inside a multigraph, got something else");
         return kFALSE;
      }

      if (!BuildTesselation(tess, graph, z))
         return kFALSE;
   }

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGLH2PolyPainter::UpdateGeometry()
{
   //Update cap's z-coordinates for all caps.
   //Here no pointers are checked, this was already done
   //by InitGeometry. So, if histogram was broken somehow
   //- hehe, good luck.
   TH2Poly *hp = static_cast<TH2Poly *>(fHist);
   TList *bins = hp->GetBins();

   std::list<Rgl::Pad::Tesselation_t>::iterator cap = fCaps.begin();

   //Ugly iteration statements, but still, number of links and caps will be
   //ok - this is checked in InitGeometry. Check cap != fCaps.end() is added
   //to make it clear (not required).
   for (TObjLink *link = bins->FirstLink(); link && cap != fCaps.end(); link = link->Next()) {
      TH2PolyBin *b = static_cast<TH2PolyBin *>(link->GetObject());
      Double_t z = b->GetContent();
      ClampZ(z);
      //Update z coordinate in all patches.
      if (dynamic_cast<TGraph *>(b->GetPolygon())) {
         //Only one cap.
         Rgl::Pad::Tesselation_t &tess = *cap;
         Rgl::Pad::Tesselation_t::iterator patch = tess.begin();
         for (; patch != tess.end(); ++patch) {
            std::vector<Double_t> &mesh = patch->fPatch;
            for (UInt_t i = 0, e = mesh.size() / 3; i < e; ++i)
               mesh[i * 3 + 2] = z;
         }

         ++cap;
      } else if (const TMultiGraph *mg = dynamic_cast<TMultiGraph *>(b->GetPolygon())) {
         const TList *gs = mg->GetListOfGraphs();
         for (TObjLink * graphLink = gs->FirstLink(); graphLink && cap != fCaps.end(); graphLink = graphLink->Next(), ++cap) {
            Rgl::Pad::Tesselation_t &tess = *cap;
            Rgl::Pad::Tesselation_t::iterator patch = tess.begin();
            for (; patch != tess.end(); ++patch) {
               std::vector<Double_t> &mesh = patch->fPatch;
               for (UInt_t i = 0, e = mesh.size() / 3; i < e; ++i)
                  mesh[i * 3 + 2] = z;
            }
         }
      }//else is impossible and processed by InitGeometry.
   }

   return kTRUE;
}

//______________________________________________________________________________
void TGLH2PolyPainter::SetBinColor(Int_t binIndex)const
{
   //Set bin's color.
   if (binIndex >= Int_t(fBinColors.size())) {
      Error("TGLH2PolyPainter::SetBinColor", "bin index is out of range %d, must be <= %d",
            binIndex, int(fBinColors.size()));
      return;
   }

   //Convert color index into RGB.
   Float_t diffColor[] = {0.8f, 0.8f, 0.8f, 0.15f};

   if (const TColor *c = gROOT->GetColor(fBinColors[binIndex]))
      c->GetRGB(diffColor[0], diffColor[1], diffColor[2]);

   glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffColor);
   const Float_t specColor[] = {1.f, 1.f, 1.f, 1.f};
   glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specColor);
   glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 70.f);
}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawSectionXOZ()const
{
   //No sections.
}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawSectionYOZ()const
{
   //No sections.
}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawSectionXOY()const
{
   //No sections.
}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawPalette()const
{
   //Not yet.
}

//______________________________________________________________________________
void TGLH2PolyPainter::DrawPaletteAxis()const
{
   //Not yet.
}

//______________________________________________________________________________
void TGLH2PolyPainter::FillTemporaryPolygon(const Double_t *xs, const Double_t *ys, Double_t z, Int_t nV)const
{
   //Since I probably have to re-orient polygon, I need a temporary polygon.
   const Double_t xScale = fCoord->GetXScale();
   const Double_t yScale = fCoord->GetYScale();

   fPolygon.resize(nV * 3);
   for (Int_t j = 0; j < nV; ++j) {
      fPolygon[j * 3]     = xs[j] * xScale;
      fPolygon[j * 3 + 1] = ys[j] * yScale;
      fPolygon[j * 3 + 2] = z;
   }

   if (IsPolygonCW(xs, ys, nV))
      MakePolygonCCW();
}

//______________________________________________________________________________
void TGLH2PolyPainter::MakePolygonCCW()const
{
   //Code taken from the original TH2Poly.
   const Int_t nV = Int_t(fPolygon.size() / 3);
   for (Int_t a = 0; a <= (nV / 2) - 1; a++) {
      const Int_t b = nV - 1 - a;
      std::swap(fPolygon[a * 3], fPolygon[b * 3]);
      std::swap(fPolygon[a * 3 + 1], fPolygon[b * 3 + 1]);
   }
}

//______________________________________________________________________________
Bool_t TGLH2PolyPainter::ClampZ(Double_t &zVal)const
{
   //Clamp z value.
   if (fCoord->GetZLog()) {
      if (zVal <= 0.)
         return kFALSE;
      else
         zVal = TMath::Log10(zVal) * fCoord->GetZScale();
   } else
      zVal *= fCoord->GetZScale();

   const TGLVertex3 *frame = fBackBox.Get3DBox();

   if (zVal > frame[4].Z())
      zVal = frame[4].Z();
   else if (zVal < frame[0].Z())
      zVal = frame[0].Z();

   return kTRUE;
}


namespace {

//______________________________________________________________________________
Double_t Distance(const Double_t *p1, const Double_t *p2)
{
   //
   return TMath::Sqrt((p1[0] - p2[0]) * (p1[0] - p2[0]) +
                      (p1[1] - p2[1]) * (p1[1] - p2[1]) +
                      (p1[2] - p2[2]) * (p1[2] - p2[2]));
}

//______________________________________________________________________________
Bool_t IsPolygonCW(const Double_t *xs, const Double_t *ys, Int_t n)
{
   //Before, TH2Poly always produced good GL polygons - CCW. Now,
   //this code (by Deniz Gunceler) was deleted from TH2Poly.
   Double_t signedArea = 0.;

   for (Int_t j = 0; j < n - 1; ++j)
      signedArea += xs[j] * ys[j + 1] - ys[j] * xs[j + 1];

   return signedArea < 0.;
}

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