ROOT logo
#ifndef ROOT_TGLH2PolyPainter
#define ROOT_TGLH2PolyPainter

#include <vector>
#include <list>

#ifndef ROOT_TGLPlotPainter
#include "TGLPlotPainter.h"
#endif
#ifndef ROOT_TGLPadUtils
#include "TGLPadUtils.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif

class TMultiGraph;
class TGraph;

class TGLH2PolyPainter : public TGLPlotPainter {
public:
   TGLH2PolyPainter(TH1 *hist, TGLPlotCamera *camera, TGLPlotCoordinates *coord);

   char        *GetPlotInfo(Int_t px, Int_t py);
   Bool_t       InitGeometry();
   void         StartPan(Int_t px, Int_t py);
   void         Pan(Int_t px, Int_t py);
   void         AddOption(const TString &stringOption);
   void         ProcessEvent(Int_t event, Int_t px, Int_t py);

private:
   //Overriders
   void         InitGL()const;
   void         DeInitGL()const;
   void         DrawPlot()const;
   //Aux. functions.
   //Draw edges of a bin.
   void         DrawExtrusion()const;
   void         DrawExtrusion(const TGraph *polygon, Double_t zMin, Double_t zMax, Int_t nBin)const;
   void         DrawExtrusion(const TMultiGraph *polygon, Double_t zMin, Double_t zMax, Int_t nBin)const;

   //Draw caps for a bin.
   typedef std::list<Rgl::Pad::Tesselation_t>::const_iterator CIter_t;
   void         DrawCaps()const;
   void         DrawCap(CIter_t cap, Int_t bin)const;
   //
   Bool_t       CacheGeometry();
   Bool_t       BuildTesselation(Rgl::Pad::Tesselator & tess, const TGraph *g, Double_t z);
   Bool_t       BuildTesselation(Rgl::Pad::Tesselator & tess, const TMultiGraph *mg, Double_t z);
   Bool_t       UpdateGeometry();
   //Find the color in palette using bin content.
   void         SetBinColor(Int_t bin)const;

   //Empty overriders.
   void         DrawSectionXOZ()const;
   void         DrawSectionYOZ()const;
   void         DrawSectionXOY()const;
   void         DrawPalette()const;
   void         DrawPaletteAxis()const;

   //Aux. staff.
   void         FillTemporaryPolygon(const Double_t *xs, const Double_t *ys, Double_t z, Int_t n)const;
   void         MakePolygonCCW()const;
   Bool_t       ClampZ(Double_t &zVal)const;

   TString                            fBinInfo; //Used by GetPlotInfo.

   std::vector<Int_t>                 fBinColors;

   mutable std::vector<Double_t>      fPolygon; //Temporary array for polygon's vertices.
   std::list<Rgl::Pad::Tesselation_t> fCaps;//Caps for all bins.

   Bool_t                             fZLog;//Change in logZ updates only bin heights.
   Double_t                           fZMin;

   ClassDef(TGLH2PolyPainter, 0); //Painter class for TH2Poly.
};

#endif
 TGLH2PolyPainter.h:1
 TGLH2PolyPainter.h:2
 TGLH2PolyPainter.h:3
 TGLH2PolyPainter.h:4
 TGLH2PolyPainter.h:5
 TGLH2PolyPainter.h:6
 TGLH2PolyPainter.h:7
 TGLH2PolyPainter.h:8
 TGLH2PolyPainter.h:9
 TGLH2PolyPainter.h:10
 TGLH2PolyPainter.h:11
 TGLH2PolyPainter.h:12
 TGLH2PolyPainter.h:13
 TGLH2PolyPainter.h:14
 TGLH2PolyPainter.h:15
 TGLH2PolyPainter.h:16
 TGLH2PolyPainter.h:17
 TGLH2PolyPainter.h:18
 TGLH2PolyPainter.h:19
 TGLH2PolyPainter.h:20
 TGLH2PolyPainter.h:21
 TGLH2PolyPainter.h:22
 TGLH2PolyPainter.h:23
 TGLH2PolyPainter.h:24
 TGLH2PolyPainter.h:25
 TGLH2PolyPainter.h:26
 TGLH2PolyPainter.h:27
 TGLH2PolyPainter.h:28
 TGLH2PolyPainter.h:29
 TGLH2PolyPainter.h:30
 TGLH2PolyPainter.h:31
 TGLH2PolyPainter.h:32
 TGLH2PolyPainter.h:33
 TGLH2PolyPainter.h:34
 TGLH2PolyPainter.h:35
 TGLH2PolyPainter.h:36
 TGLH2PolyPainter.h:37
 TGLH2PolyPainter.h:38
 TGLH2PolyPainter.h:39
 TGLH2PolyPainter.h:40
 TGLH2PolyPainter.h:41
 TGLH2PolyPainter.h:42
 TGLH2PolyPainter.h:43
 TGLH2PolyPainter.h:44
 TGLH2PolyPainter.h:45
 TGLH2PolyPainter.h:46
 TGLH2PolyPainter.h:47
 TGLH2PolyPainter.h:48
 TGLH2PolyPainter.h:49
 TGLH2PolyPainter.h:50
 TGLH2PolyPainter.h:51
 TGLH2PolyPainter.h:52
 TGLH2PolyPainter.h:53
 TGLH2PolyPainter.h:54
 TGLH2PolyPainter.h:55
 TGLH2PolyPainter.h:56
 TGLH2PolyPainter.h:57
 TGLH2PolyPainter.h:58
 TGLH2PolyPainter.h:59
 TGLH2PolyPainter.h:60
 TGLH2PolyPainter.h:61
 TGLH2PolyPainter.h:62
 TGLH2PolyPainter.h:63
 TGLH2PolyPainter.h:64
 TGLH2PolyPainter.h:65
 TGLH2PolyPainter.h:66
 TGLH2PolyPainter.h:67
 TGLH2PolyPainter.h:68
 TGLH2PolyPainter.h:69
 TGLH2PolyPainter.h:70
 TGLH2PolyPainter.h:71
 TGLH2PolyPainter.h:72
 TGLH2PolyPainter.h:73
 TGLH2PolyPainter.h:74
 TGLH2PolyPainter.h:75
 TGLH2PolyPainter.h:76
 TGLH2PolyPainter.h:77
 TGLH2PolyPainter.h:78
 TGLH2PolyPainter.h:79