ROOT logo
// @(#)root/gl:$Id$
// 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.             *
 *************************************************************************/

#ifndef ROOT_TGLPlotPainter
#define ROOT_TGLPlotPainter

#include <vector>

#ifndef ROOT_TVirtualGL
#include "TVirtualGL.h"
#endif
#ifndef ROOT_TGLPlotBox
#include "TGLPlotBox.h"
#endif
#ifndef ROOT_TPoint
#include "TPoint.h"
#endif
#ifndef ROOT_TGLUtil
#include "TGLUtil.h"
#endif
#ifndef ROOT_TNamed
#include "TNamed.h"
#endif

class TGLPlotCoordinates;
class TGLPlotCamera;
class TGL5DDataSet;
class TString;
class TColor;
class TAxis;
class TH1;
class TH3;
class TF3;

/*
   Box cut. When attached to a plot, cuts away a part of it.
   Can be moved in a plot's own area in X/Y/Z directions.
*/

class TGLBoxCut {
private:
   Double_t                   fXLength;
   Double_t                   fYLength;
   Double_t                   fZLength;
   TGLVertex3                 fCenter;
   Rgl::Range_t               fXRange;
   Rgl::Range_t               fYRange;
   Rgl::Range_t               fZRange;

   const TGLPlotBox * const   fPlotBox;
   Bool_t                     fActive;
   Double_t                   fFactor;

   TPoint                     fMousePos;

public:
   TGLBoxCut(const TGLPlotBox *plotBox);
   virtual ~TGLBoxCut();

   void   TurnOnOff();
   Bool_t IsActive()const{return fActive;}
   void   SetActive(Bool_t a);

   void   ResetBoxGeometry();
   
   void   SetFactor(Double_t f){fFactor = f;}

   void   DrawBox(Bool_t selectionPass, Int_t selected)const;

   void   StartMovement(Int_t px, Int_t py);
   void   MoveBox(Int_t px, Int_t py, Int_t axisID);

   Bool_t IsInCut(Double_t xMin, Double_t xMax, Double_t yMin, Double_t yMax,
                  Double_t zMin, Double_t zMax)const;

   template<class V>
   Bool_t IsInCut(const V * v) const
   {
      //Check, if box defined by xmin/xmax etc. is in cut.
      if (v[0] >= fXRange.first && v[0] < fXRange.second &&
          v[1] >= fYRange.first && v[1] < fYRange.second &&
          v[2] >= fZRange.first && v[2] < fZRange.second)
         return kTRUE;
      return kFALSE;
   }
   
   Rgl::Range_t GetXRange()const{return fXRange;}
   Rgl::Range_t GetYRange()const{return fYRange;}
   Rgl::Range_t GetZRange()const{return fZRange;}

private:
   void AdjustBox();

   ClassDef(TGLBoxCut, 0)//Cuts away part of a plot.
};

/*
   2D contour for TH3 slicing.
*/

class TGLTH3Slice : public TNamed {
public:
   enum ESliceAxis {kXOZ, kYOZ, kXOY};

private:
   ESliceAxis                fAxisType;
   TAxis                    *fAxis;
   mutable TGLLevelPalette   fPalette;

   const TGLPlotCoordinates *fCoord;
   const TGLPlotBox         *fBox;
   Int_t                     fSliceWidth;

   const TH3                *fHist;
   const TF3                *fF3;

   mutable TGL2DArray<Double_t> fTexCoords;

   mutable Rgl::Range_t         fMinMax;

public:
   TGLTH3Slice(const TString &sliceName,
               const TH3 *hist,
               const TGLPlotCoordinates *coord,
               const TGLPlotBox * box,
               ESliceAxis axis);
   TGLTH3Slice(const TString &sliceName,
               const TH3 *hist, const TF3 *fun,
               const TGLPlotCoordinates *coord,
               const TGLPlotBox * box,
               ESliceAxis axis);

   void   DrawSlice(Double_t pos)const;
   //SetSliceWidth must have "menu" comment.
   void   SetSliceWidth(Int_t width = 1); // *MENU*

   void   SetMinMax(const Rgl::Range_t &newRange)
   {
      fMinMax = newRange;
   }

   const TGLLevelPalette & GetPalette()const
   {
      return fPalette;
   }

private:
   void   PrepareTexCoords(Double_t pos, Int_t sliceBegin, Int_t sliceEnd)const;
   void   FindMinMax(Int_t sliceBegin, Int_t sliceEnd)const;
   Bool_t PreparePalette()const;
   void   DrawSliceTextured(Double_t pos)const;
   void   DrawSliceFrame(Int_t low, Int_t up)const;

   ClassDef(TGLTH3Slice, 0) // TH3 slice
};


/*
   TGLPlotPainter class defines interface to different plot painters.
*/

class TGLPlotPainter;

/*
Object of this class, created on stack in DrawPlot member-functions,
saves modelview matrix, moves plot to (0; 0; 0), and
restores modelview matrix in dtor.
*/

namespace Rgl {

class PlotTranslation {
public:
   PlotTranslation(const TGLPlotPainter *painter);
   ~PlotTranslation();

private:
   const TGLPlotPainter *fPainter;
};

}

class TGLPlotPainter : public TVirtualGLPainter {
   friend class Rgl::PlotTranslation;
private:
   const TColor         *fPadColor;

protected:
   const Float_t        *fPhysicalShapeColor;

   Double_t              fPadPhi;
   Double_t              fPadTheta;
   TH1                  *fHist;
   TAxis                *fXAxis;
   TAxis                *fYAxis;
   TAxis                *fZAxis;

   TGLPlotCoordinates   *fCoord;
   TGLPlotCamera        *fCamera;
   TGLSelectionBuffer    fSelection;
   
   Bool_t                fUpdateSelection;
   Bool_t                fSelectionPass;
   Int_t                 fSelectedPart;
   TPoint                fMousePosition;
   mutable Double_t      fXOZSectionPos;
   mutable Double_t      fYOZSectionPos;
   mutable Double_t      fXOYSectionPos;
   TGLPlotBox            fBackBox;
   TGLBoxCut             fBoxCut;

   std::vector<Double_t> fZLevels;
   Bool_t                fHighColor;

   enum ESelectionBase{
      kHighColorSelectionBase = 7,
      kTrueColorSelectionBase = 10
   };

   Int_t                 fSelectionBase;
   mutable Bool_t        fDrawPalette;
   Bool_t                fDrawAxes;

public:
/*   TGLPlotPainter(TH1 *hist, TGLPlotCamera *camera, TGLPlotCoordinates *coord, Int_t context,
                  Bool_t xoySelectable, Bool_t xozSelectable, Bool_t yozSelectable);
   TGLPlotPainter(TGLPlotCamera *camera, Int_t context);*/
   TGLPlotPainter(TH1 *hist, TGLPlotCamera *camera, TGLPlotCoordinates *coord,
                  Bool_t xoySelectable, Bool_t xozSelectable, Bool_t yozSelectable);
   TGLPlotPainter(TGL5DDataSet *data, TGLPlotCamera *camera, TGLPlotCoordinates *coord);
   TGLPlotPainter(TGLPlotCamera *camera);

   const TGLPlotBox& RefBackBox() const { return fBackBox; }
   void              SetPhysicalShapeColor(const Float_t *rgba)
   {
      fPhysicalShapeColor = rgba;
   }

   virtual void     InitGL()const = 0;
   virtual void     DeInitGL()const = 0;
   virtual void     DrawPlot()const = 0;
   virtual void     Paint();

   //Checks, if mouse cursor is above plot.
   virtual Bool_t   PlotSelected(Int_t px, Int_t py);
   //Init geometry does plot's specific initialization.
   virtual Bool_t   InitGeometry() = 0;

   virtual void     StartPan(Int_t px, Int_t py) = 0;
   //Pan function is already declared in TVirtualGLPainter.

   //Add string option, it can be a digit in "lego" or "surf".
   virtual void     AddOption(const TString &stringOption) = 0;
   //Function to process additional events (key presses, mouse clicks.)
   virtual void     ProcessEvent(Int_t event, Int_t px, Int_t py) = 0;
   //Used by GLpad
   void             SetPadColor(const TColor *color);
   
   virtual void     SetFrameColor(const TColor *frameColor);
   //Camera is external to painter, if zoom was changed, or camera
   //was rotated, selection must be invalidated.
   void             InvalidateSelection();

   enum ECutAxisID {
      kXAxis = 7,
      kYAxis = 8,
      kZAxis = 9
   };

   Bool_t           CutAxisSelected()const{return !fHighColor && fSelectedPart <= kZAxis && fSelectedPart >= kXAxis;}
   
   void SetDrawFrontBox(Bool_t b) {fBackBox.SetDrawFront(b);}
   void SetDrawBackBox(Bool_t b) {fBackBox.SetDrawBack(b);}
   void SetDrawAxes(Bool_t s) {fDrawAxes = s;}
   Bool_t GetDrawAxes() {return fDrawAxes;}

protected:
   const TColor    *GetPadColor()const;
   //
   void             MoveSection(Int_t px, Int_t py);
   void             DrawSections()const;
   virtual void     DrawSectionXOZ()const = 0;
   virtual void     DrawSectionYOZ()const = 0;
   virtual void     DrawSectionXOY()const = 0;

   virtual void     DrawPaletteAxis()const;

   virtual void     ClearBuffers()const;

   void             PrintPlot()const;
   
   //Attention! After one of this methods was called,
   //the GL_MATRIX_MODE could become different from what
   //you had before the call: for example, SaveModelviewMatrix will 
   //change it to GL_MODELVIEW.
   void             SaveModelviewMatrix()const;
   void             SaveProjectionMatrix()const;
   
   void             RestoreModelviewMatrix()const;
   void             RestoreProjectionMatrix()const;

   ClassDef(TGLPlotPainter, 0) //Base for gl plots
};

/*
   Auxiliary class, which holds different
   information about plot's current coordinate system
*/

class TH2Poly;

class TGLPlotCoordinates {
private:
   EGLCoordType    fCoordType;

   Rgl::BinRange_t fXBins;
   Rgl::BinRange_t fYBins;
   Rgl::BinRange_t fZBins;

   Double_t        fXScale;
   Double_t        fYScale;
   Double_t        fZScale;

   Rgl::Range_t    fXRange;
   Rgl::Range_t    fYRange;
   Rgl::Range_t    fZRange;

   Rgl::Range_t    fXRangeScaled;
   Rgl::Range_t    fYRangeScaled;
   Rgl::Range_t    fZRangeScaled;

   Bool_t          fXLog;
   Bool_t          fYLog;
   Bool_t          fZLog;

   Bool_t          fModified;
   Double_t        fFactor;

public:
   TGLPlotCoordinates();
   virtual ~TGLPlotCoordinates();

   void         SetCoordType(EGLCoordType type);
   EGLCoordType GetCoordType()const;

   void   SetXLog(Bool_t xLog);
   Bool_t GetXLog()const;

   void   SetYLog(Bool_t yLog);
   Bool_t GetYLog()const;

   void   SetZLog(Bool_t zLog);
   Bool_t GetZLog()const;

   void   ResetModified();
   Bool_t Modified()const;
   //
   Bool_t SetRanges(const TH1 *hist, Bool_t errors = kFALSE, Bool_t zBins = kFALSE);
   //
   Bool_t SetRanges(TH2Poly *hist);
   //
   Bool_t SetRanges(const TAxis *xAxis, const TAxis *yAxis, const TAxis *zAxis);

   Int_t  GetNXBins()const;
   Int_t  GetNYBins()const;
   Int_t  GetNZBins()const;

   const Rgl::BinRange_t &GetXBins()const;
   const Rgl::BinRange_t &GetYBins()const;
   const Rgl::BinRange_t &GetZBins()const;

   const Rgl::Range_t    &GetXRange()const;
   Double_t               GetXLength()const;
   const Rgl::Range_t    &GetYRange()const;
   Double_t               GetYLength()const;
   const Rgl::Range_t    &GetZRange()const;
   Double_t               GetZLength()const;

   const Rgl::Range_t    &GetXRangeScaled()const;
   const Rgl::Range_t    &GetYRangeScaled()const;
   const Rgl::Range_t    &GetZRangeScaled()const;

   Double_t GetXScale()const{return fXScale;}
   Double_t GetYScale()const{return fYScale;}
   Double_t GetZScale()const{return fZScale;}

   Int_t    GetFirstXBin()const{return fXBins.first;}
   Int_t    GetLastXBin()const{return fXBins.second;}
   Int_t    GetFirstYBin()const{return fYBins.first;}
   Int_t    GetLastYBin()const{return fYBins.second;}
   Int_t    GetFirstZBin()const{return fZBins.first;}
   Int_t    GetLastZBin()const{return fZBins.second;}

   Double_t GetFactor()const;

private:
   Bool_t SetRangesPolar(const TH1 *hist);
   Bool_t SetRangesCylindrical(const TH1 *hist);
   Bool_t SetRangesSpherical(const TH1 *hist);

   Bool_t SetRangesCartesian(const TH1 *hist, Bool_t errors = kFALSE, Bool_t zBins = kFALSE);

   TGLPlotCoordinates(const TGLPlotCoordinates &);
   TGLPlotCoordinates &operator = (const TGLPlotCoordinates &);

   ClassDef(TGLPlotCoordinates, 0)//Auxilary class, holds plot dimensions.
};

class TGLLevelPalette;

namespace Rgl {

void DrawPalette(const TGLPlotCamera *camera, const TGLLevelPalette &palette);
void DrawPalette(const TGLPlotCamera *camera, const TGLLevelPalette &palette,
                 const std::vector<Double_t> &levels);
void DrawPaletteAxis(const TGLPlotCamera *camera, const Range_t &minMax, Bool_t logZ);

//Polygonal histogram (TH2Poly) is slightly stretched along x and y.
extern const Double_t gH2PolyScaleXY;

}

#endif
 TGLPlotPainter.h:1
 TGLPlotPainter.h:2
 TGLPlotPainter.h:3
 TGLPlotPainter.h:4
 TGLPlotPainter.h:5
 TGLPlotPainter.h:6
 TGLPlotPainter.h:7
 TGLPlotPainter.h:8
 TGLPlotPainter.h:9
 TGLPlotPainter.h:10
 TGLPlotPainter.h:11
 TGLPlotPainter.h:12
 TGLPlotPainter.h:13
 TGLPlotPainter.h:14
 TGLPlotPainter.h:15
 TGLPlotPainter.h:16
 TGLPlotPainter.h:17
 TGLPlotPainter.h:18
 TGLPlotPainter.h:19
 TGLPlotPainter.h:20
 TGLPlotPainter.h:21
 TGLPlotPainter.h:22
 TGLPlotPainter.h:23
 TGLPlotPainter.h:24
 TGLPlotPainter.h:25
 TGLPlotPainter.h:26
 TGLPlotPainter.h:27
 TGLPlotPainter.h:28
 TGLPlotPainter.h:29
 TGLPlotPainter.h:30
 TGLPlotPainter.h:31
 TGLPlotPainter.h:32
 TGLPlotPainter.h:33
 TGLPlotPainter.h:34
 TGLPlotPainter.h:35
 TGLPlotPainter.h:36
 TGLPlotPainter.h:37
 TGLPlotPainter.h:38
 TGLPlotPainter.h:39
 TGLPlotPainter.h:40
 TGLPlotPainter.h:41
 TGLPlotPainter.h:42
 TGLPlotPainter.h:43
 TGLPlotPainter.h:44
 TGLPlotPainter.h:45
 TGLPlotPainter.h:46
 TGLPlotPainter.h:47
 TGLPlotPainter.h:48
 TGLPlotPainter.h:49
 TGLPlotPainter.h:50
 TGLPlotPainter.h:51
 TGLPlotPainter.h:52
 TGLPlotPainter.h:53
 TGLPlotPainter.h:54
 TGLPlotPainter.h:55
 TGLPlotPainter.h:56
 TGLPlotPainter.h:57
 TGLPlotPainter.h:58
 TGLPlotPainter.h:59
 TGLPlotPainter.h:60
 TGLPlotPainter.h:61
 TGLPlotPainter.h:62
 TGLPlotPainter.h:63
 TGLPlotPainter.h:64
 TGLPlotPainter.h:65
 TGLPlotPainter.h:66
 TGLPlotPainter.h:67
 TGLPlotPainter.h:68
 TGLPlotPainter.h:69
 TGLPlotPainter.h:70
 TGLPlotPainter.h:71
 TGLPlotPainter.h:72
 TGLPlotPainter.h:73
 TGLPlotPainter.h:74
 TGLPlotPainter.h:75
 TGLPlotPainter.h:76
 TGLPlotPainter.h:77
 TGLPlotPainter.h:78
 TGLPlotPainter.h:79
 TGLPlotPainter.h:80
 TGLPlotPainter.h:81
 TGLPlotPainter.h:82
 TGLPlotPainter.h:83
 TGLPlotPainter.h:84
 TGLPlotPainter.h:85
 TGLPlotPainter.h:86
 TGLPlotPainter.h:87
 TGLPlotPainter.h:88
 TGLPlotPainter.h:89
 TGLPlotPainter.h:90
 TGLPlotPainter.h:91
 TGLPlotPainter.h:92
 TGLPlotPainter.h:93
 TGLPlotPainter.h:94
 TGLPlotPainter.h:95
 TGLPlotPainter.h:96
 TGLPlotPainter.h:97
 TGLPlotPainter.h:98
 TGLPlotPainter.h:99
 TGLPlotPainter.h:100
 TGLPlotPainter.h:101
 TGLPlotPainter.h:102
 TGLPlotPainter.h:103
 TGLPlotPainter.h:104
 TGLPlotPainter.h:105
 TGLPlotPainter.h:106
 TGLPlotPainter.h:107
 TGLPlotPainter.h:108
 TGLPlotPainter.h:109
 TGLPlotPainter.h:110
 TGLPlotPainter.h:111
 TGLPlotPainter.h:112
 TGLPlotPainter.h:113
 TGLPlotPainter.h:114
 TGLPlotPainter.h:115
 TGLPlotPainter.h:116
 TGLPlotPainter.h:117
 TGLPlotPainter.h:118
 TGLPlotPainter.h:119
 TGLPlotPainter.h:120
 TGLPlotPainter.h:121
 TGLPlotPainter.h:122
 TGLPlotPainter.h:123
 TGLPlotPainter.h:124
 TGLPlotPainter.h:125
 TGLPlotPainter.h:126
 TGLPlotPainter.h:127
 TGLPlotPainter.h:128
 TGLPlotPainter.h:129
 TGLPlotPainter.h:130
 TGLPlotPainter.h:131
 TGLPlotPainter.h:132
 TGLPlotPainter.h:133
 TGLPlotPainter.h:134
 TGLPlotPainter.h:135
 TGLPlotPainter.h:136
 TGLPlotPainter.h:137
 TGLPlotPainter.h:138
 TGLPlotPainter.h:139
 TGLPlotPainter.h:140
 TGLPlotPainter.h:141
 TGLPlotPainter.h:142
 TGLPlotPainter.h:143
 TGLPlotPainter.h:144
 TGLPlotPainter.h:145
 TGLPlotPainter.h:146
 TGLPlotPainter.h:147
 TGLPlotPainter.h:148
 TGLPlotPainter.h:149
 TGLPlotPainter.h:150
 TGLPlotPainter.h:151
 TGLPlotPainter.h:152
 TGLPlotPainter.h:153
 TGLPlotPainter.h:154
 TGLPlotPainter.h:155
 TGLPlotPainter.h:156
 TGLPlotPainter.h:157
 TGLPlotPainter.h:158
 TGLPlotPainter.h:159
 TGLPlotPainter.h:160
 TGLPlotPainter.h:161
 TGLPlotPainter.h:162
 TGLPlotPainter.h:163
 TGLPlotPainter.h:164
 TGLPlotPainter.h:165
 TGLPlotPainter.h:166
 TGLPlotPainter.h:167
 TGLPlotPainter.h:168
 TGLPlotPainter.h:169
 TGLPlotPainter.h:170
 TGLPlotPainter.h:171
 TGLPlotPainter.h:172
 TGLPlotPainter.h:173
 TGLPlotPainter.h:174
 TGLPlotPainter.h:175
 TGLPlotPainter.h:176
 TGLPlotPainter.h:177
 TGLPlotPainter.h:178
 TGLPlotPainter.h:179
 TGLPlotPainter.h:180
 TGLPlotPainter.h:181
 TGLPlotPainter.h:182
 TGLPlotPainter.h:183
 TGLPlotPainter.h:184
 TGLPlotPainter.h:185
 TGLPlotPainter.h:186
 TGLPlotPainter.h:187
 TGLPlotPainter.h:188
 TGLPlotPainter.h:189
 TGLPlotPainter.h:190
 TGLPlotPainter.h:191
 TGLPlotPainter.h:192
 TGLPlotPainter.h:193
 TGLPlotPainter.h:194
 TGLPlotPainter.h:195
 TGLPlotPainter.h:196
 TGLPlotPainter.h:197
 TGLPlotPainter.h:198
 TGLPlotPainter.h:199
 TGLPlotPainter.h:200
 TGLPlotPainter.h:201
 TGLPlotPainter.h:202
 TGLPlotPainter.h:203
 TGLPlotPainter.h:204
 TGLPlotPainter.h:205
 TGLPlotPainter.h:206
 TGLPlotPainter.h:207
 TGLPlotPainter.h:208
 TGLPlotPainter.h:209
 TGLPlotPainter.h:210
 TGLPlotPainter.h:211
 TGLPlotPainter.h:212
 TGLPlotPainter.h:213
 TGLPlotPainter.h:214
 TGLPlotPainter.h:215
 TGLPlotPainter.h:216
 TGLPlotPainter.h:217
 TGLPlotPainter.h:218
 TGLPlotPainter.h:219
 TGLPlotPainter.h:220
 TGLPlotPainter.h:221
 TGLPlotPainter.h:222
 TGLPlotPainter.h:223
 TGLPlotPainter.h:224
 TGLPlotPainter.h:225
 TGLPlotPainter.h:226
 TGLPlotPainter.h:227
 TGLPlotPainter.h:228
 TGLPlotPainter.h:229
 TGLPlotPainter.h:230
 TGLPlotPainter.h:231
 TGLPlotPainter.h:232
 TGLPlotPainter.h:233
 TGLPlotPainter.h:234
 TGLPlotPainter.h:235
 TGLPlotPainter.h:236
 TGLPlotPainter.h:237
 TGLPlotPainter.h:238
 TGLPlotPainter.h:239
 TGLPlotPainter.h:240
 TGLPlotPainter.h:241
 TGLPlotPainter.h:242
 TGLPlotPainter.h:243
 TGLPlotPainter.h:244
 TGLPlotPainter.h:245
 TGLPlotPainter.h:246
 TGLPlotPainter.h:247
 TGLPlotPainter.h:248
 TGLPlotPainter.h:249
 TGLPlotPainter.h:250
 TGLPlotPainter.h:251
 TGLPlotPainter.h:252
 TGLPlotPainter.h:253
 TGLPlotPainter.h:254
 TGLPlotPainter.h:255
 TGLPlotPainter.h:256
 TGLPlotPainter.h:257
 TGLPlotPainter.h:258
 TGLPlotPainter.h:259
 TGLPlotPainter.h:260
 TGLPlotPainter.h:261
 TGLPlotPainter.h:262
 TGLPlotPainter.h:263
 TGLPlotPainter.h:264
 TGLPlotPainter.h:265
 TGLPlotPainter.h:266
 TGLPlotPainter.h:267
 TGLPlotPainter.h:268
 TGLPlotPainter.h:269
 TGLPlotPainter.h:270
 TGLPlotPainter.h:271
 TGLPlotPainter.h:272
 TGLPlotPainter.h:273
 TGLPlotPainter.h:274
 TGLPlotPainter.h:275
 TGLPlotPainter.h:276
 TGLPlotPainter.h:277
 TGLPlotPainter.h:278
 TGLPlotPainter.h:279
 TGLPlotPainter.h:280
 TGLPlotPainter.h:281
 TGLPlotPainter.h:282
 TGLPlotPainter.h:283
 TGLPlotPainter.h:284
 TGLPlotPainter.h:285
 TGLPlotPainter.h:286
 TGLPlotPainter.h:287
 TGLPlotPainter.h:288
 TGLPlotPainter.h:289
 TGLPlotPainter.h:290
 TGLPlotPainter.h:291
 TGLPlotPainter.h:292
 TGLPlotPainter.h:293
 TGLPlotPainter.h:294
 TGLPlotPainter.h:295
 TGLPlotPainter.h:296
 TGLPlotPainter.h:297
 TGLPlotPainter.h:298
 TGLPlotPainter.h:299
 TGLPlotPainter.h:300
 TGLPlotPainter.h:301
 TGLPlotPainter.h:302
 TGLPlotPainter.h:303
 TGLPlotPainter.h:304
 TGLPlotPainter.h:305
 TGLPlotPainter.h:306
 TGLPlotPainter.h:307
 TGLPlotPainter.h:308
 TGLPlotPainter.h:309
 TGLPlotPainter.h:310
 TGLPlotPainter.h:311
 TGLPlotPainter.h:312
 TGLPlotPainter.h:313
 TGLPlotPainter.h:314
 TGLPlotPainter.h:315
 TGLPlotPainter.h:316
 TGLPlotPainter.h:317
 TGLPlotPainter.h:318
 TGLPlotPainter.h:319
 TGLPlotPainter.h:320
 TGLPlotPainter.h:321
 TGLPlotPainter.h:322
 TGLPlotPainter.h:323
 TGLPlotPainter.h:324
 TGLPlotPainter.h:325
 TGLPlotPainter.h:326
 TGLPlotPainter.h:327
 TGLPlotPainter.h:328
 TGLPlotPainter.h:329
 TGLPlotPainter.h:330
 TGLPlotPainter.h:331
 TGLPlotPainter.h:332
 TGLPlotPainter.h:333
 TGLPlotPainter.h:334
 TGLPlotPainter.h:335
 TGLPlotPainter.h:336
 TGLPlotPainter.h:337
 TGLPlotPainter.h:338
 TGLPlotPainter.h:339
 TGLPlotPainter.h:340
 TGLPlotPainter.h:341
 TGLPlotPainter.h:342
 TGLPlotPainter.h:343
 TGLPlotPainter.h:344
 TGLPlotPainter.h:345
 TGLPlotPainter.h:346
 TGLPlotPainter.h:347
 TGLPlotPainter.h:348
 TGLPlotPainter.h:349
 TGLPlotPainter.h:350
 TGLPlotPainter.h:351
 TGLPlotPainter.h:352
 TGLPlotPainter.h:353
 TGLPlotPainter.h:354
 TGLPlotPainter.h:355
 TGLPlotPainter.h:356
 TGLPlotPainter.h:357
 TGLPlotPainter.h:358
 TGLPlotPainter.h:359
 TGLPlotPainter.h:360
 TGLPlotPainter.h:361
 TGLPlotPainter.h:362
 TGLPlotPainter.h:363
 TGLPlotPainter.h:364
 TGLPlotPainter.h:365
 TGLPlotPainter.h:366
 TGLPlotPainter.h:367
 TGLPlotPainter.h:368
 TGLPlotPainter.h:369
 TGLPlotPainter.h:370
 TGLPlotPainter.h:371
 TGLPlotPainter.h:372
 TGLPlotPainter.h:373
 TGLPlotPainter.h:374
 TGLPlotPainter.h:375
 TGLPlotPainter.h:376
 TGLPlotPainter.h:377
 TGLPlotPainter.h:378
 TGLPlotPainter.h:379
 TGLPlotPainter.h:380
 TGLPlotPainter.h:381
 TGLPlotPainter.h:382
 TGLPlotPainter.h:383
 TGLPlotPainter.h:384
 TGLPlotPainter.h:385
 TGLPlotPainter.h:386
 TGLPlotPainter.h:387
 TGLPlotPainter.h:388
 TGLPlotPainter.h:389
 TGLPlotPainter.h:390
 TGLPlotPainter.h:391
 TGLPlotPainter.h:392
 TGLPlotPainter.h:393
 TGLPlotPainter.h:394
 TGLPlotPainter.h:395
 TGLPlotPainter.h:396
 TGLPlotPainter.h:397
 TGLPlotPainter.h:398
 TGLPlotPainter.h:399
 TGLPlotPainter.h:400
 TGLPlotPainter.h:401
 TGLPlotPainter.h:402
 TGLPlotPainter.h:403
 TGLPlotPainter.h:404
 TGLPlotPainter.h:405
 TGLPlotPainter.h:406
 TGLPlotPainter.h:407
 TGLPlotPainter.h:408
 TGLPlotPainter.h:409
 TGLPlotPainter.h:410
 TGLPlotPainter.h:411
 TGLPlotPainter.h:412
 TGLPlotPainter.h:413
 TGLPlotPainter.h:414
 TGLPlotPainter.h:415
 TGLPlotPainter.h:416
 TGLPlotPainter.h:417
 TGLPlotPainter.h:418
 TGLPlotPainter.h:419
 TGLPlotPainter.h:420
 TGLPlotPainter.h:421
 TGLPlotPainter.h:422
 TGLPlotPainter.h:423
 TGLPlotPainter.h:424
 TGLPlotPainter.h:425
 TGLPlotPainter.h:426
 TGLPlotPainter.h:427
 TGLPlotPainter.h:428
 TGLPlotPainter.h:429
 TGLPlotPainter.h:430
 TGLPlotPainter.h:431