#ifndef ROOT_TGLVoxelPainter
#define ROOT_TGLVoxelPainter

#include <utility>
#include <vector>

#ifndef ROOT_TGLPlotPainter
#include "TGLPlotPainter.h"
#endif
#ifndef ROOT_TGLQuadric
#include "TGLQuadric.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif
#ifndef ROOT_TGLUtil
#include "TGLUtil.h"
#endif

class TGLOrthoCamera;
class TH1;
class TF1;

class TGLVoxelPainter : public TGLPlotPainter {
private:

   TString                 fPlotInfo;
   Rgl::Range_t            fMinMaxVal;

   TGLVoxelPainter(const TGLVoxelPainter &);
   TGLVoxelPainter &operator = (const TGLVoxelPainter &);

   mutable TGLLevelPalette fPalette;
   mutable std::vector<Double_t> fLevels;

public:
   TGLVoxelPainter(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;


   void    DrawSectionXOZ()const;
   void    DrawSectionYOZ()const;
   void    DrawSectionXOY()const;

   void    DrawPalette()const;
   void    DrawPaletteAxis()const;

   //Aux. functions.
   void    FindVoxelColor(Double_t binContent, Float_t *rgba)const;
   void    SetVoxelColor(const Float_t *rgba)const;

   Bool_t  HasSections()const;
   void	   PreparePalette()const;

   TF1    *fTransferFunc;

   ClassDef(TGLVoxelPainter, 0)//Voxel painter
};

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