ROOT logo
// @(#)root/gl:$Id: TGLLegoPainter.h 28464 2009-05-06 12:37:21Z brun $
// 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_TGLLegoPainter
#define ROOT_TGLLegoPainter

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

class TGLPlotCamera;
class TAxis;
class TH1;

/*
   TGLLegoPainter. The concrete implementation of abstract TGLPlotPainter.
*/

class TGLLegoPainter : public TGLPlotPainter {
private:

   enum ELegoType {
      kColorSimple,
      kColorLevel,
      kCylindricBars
   };
   //Bars, cylinders or textured bars.
   mutable ELegoType     fLegoType;
   Double_t              fMinZ;
   Rgl::Range_t          fMinMaxVal;//For texture coordinates generation.

   std::vector<Rgl::Range_t>  fXEdges;
   std::vector<Rgl::Range_t>  fYEdges;

   typedef std::pair<Double_t, Double_t> CosSin_t;
   std::vector<CosSin_t> fCosSinTableX;
   std::vector<CosSin_t> fCosSinTableY;
   TString               fBinInfo;
   mutable TGLQuadric    fQuadric;
   Bool_t                fDrawErrors;

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

   TGLLegoPainter(const TGLLegoPainter &);
   TGLLegoPainter &operator = (const TGLLegoPainter &);

public:
   TGLLegoPainter(TH1 *hist, TGLPlotCamera *camera, TGLPlotCoordinates *coord);

   //TGLPlotPainter's final-overriders
   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:
   //Auxilary functions.
   Bool_t       InitGeometryCartesian();
   Bool_t       InitGeometryPolar();
   Bool_t       InitGeometryCylindrical();
   Bool_t       InitGeometrySpherical();
   //Overriders
   void         InitGL()const;
   void         DeInitGL()const;
   
   void         DrawPlot()const;

   void         DrawLegoCartesian()const;
   void         DrawLegoPolar()const;
   void         DrawLegoCylindrical()const;
   void         DrawLegoSpherical()const;

   void         SetLegoColor()const;

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

   Bool_t       ClampZ(Double_t &zVal)const;
   Bool_t       PreparePalette()const;

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

   ClassDef(TGLLegoPainter, 0)//Lego painter
};

#endif
 TGLLegoPainter.h:1
 TGLLegoPainter.h:2
 TGLLegoPainter.h:3
 TGLLegoPainter.h:4
 TGLLegoPainter.h:5
 TGLLegoPainter.h:6
 TGLLegoPainter.h:7
 TGLLegoPainter.h:8
 TGLLegoPainter.h:9
 TGLLegoPainter.h:10
 TGLLegoPainter.h:11
 TGLLegoPainter.h:12
 TGLLegoPainter.h:13
 TGLLegoPainter.h:14
 TGLLegoPainter.h:15
 TGLLegoPainter.h:16
 TGLLegoPainter.h:17
 TGLLegoPainter.h:18
 TGLLegoPainter.h:19
 TGLLegoPainter.h:20
 TGLLegoPainter.h:21
 TGLLegoPainter.h:22
 TGLLegoPainter.h:23
 TGLLegoPainter.h:24
 TGLLegoPainter.h:25
 TGLLegoPainter.h:26
 TGLLegoPainter.h:27
 TGLLegoPainter.h:28
 TGLLegoPainter.h:29
 TGLLegoPainter.h:30
 TGLLegoPainter.h:31
 TGLLegoPainter.h:32
 TGLLegoPainter.h:33
 TGLLegoPainter.h:34
 TGLLegoPainter.h:35
 TGLLegoPainter.h:36
 TGLLegoPainter.h:37
 TGLLegoPainter.h:38
 TGLLegoPainter.h:39
 TGLLegoPainter.h:40
 TGLLegoPainter.h:41
 TGLLegoPainter.h:42
 TGLLegoPainter.h:43
 TGLLegoPainter.h:44
 TGLLegoPainter.h:45
 TGLLegoPainter.h:46
 TGLLegoPainter.h:47
 TGLLegoPainter.h:48
 TGLLegoPainter.h:49
 TGLLegoPainter.h:50
 TGLLegoPainter.h:51
 TGLLegoPainter.h:52
 TGLLegoPainter.h:53
 TGLLegoPainter.h:54
 TGLLegoPainter.h:55
 TGLLegoPainter.h:56
 TGLLegoPainter.h:57
 TGLLegoPainter.h:58
 TGLLegoPainter.h:59
 TGLLegoPainter.h:60
 TGLLegoPainter.h:61
 TGLLegoPainter.h:62
 TGLLegoPainter.h:63
 TGLLegoPainter.h:64
 TGLLegoPainter.h:65
 TGLLegoPainter.h:66
 TGLLegoPainter.h:67
 TGLLegoPainter.h:68
 TGLLegoPainter.h:69
 TGLLegoPainter.h:70
 TGLLegoPainter.h:71
 TGLLegoPainter.h:72
 TGLLegoPainter.h:73
 TGLLegoPainter.h:74
 TGLLegoPainter.h:75
 TGLLegoPainter.h:76
 TGLLegoPainter.h:77
 TGLLegoPainter.h:78
 TGLLegoPainter.h:79
 TGLLegoPainter.h:80
 TGLLegoPainter.h:81
 TGLLegoPainter.h:82
 TGLLegoPainter.h:83
 TGLLegoPainter.h:84
 TGLLegoPainter.h:85
 TGLLegoPainter.h:86
 TGLLegoPainter.h:87
 TGLLegoPainter.h:88
 TGLLegoPainter.h:89
 TGLLegoPainter.h:90
 TGLLegoPainter.h:91
 TGLLegoPainter.h:92
 TGLLegoPainter.h:93
 TGLLegoPainter.h:94
 TGLLegoPainter.h:95
 TGLLegoPainter.h:96
 TGLLegoPainter.h:97
 TGLLegoPainter.h:98
 TGLLegoPainter.h:99
 TGLLegoPainter.h:100
 TGLLegoPainter.h:101
 TGLLegoPainter.h:102
 TGLLegoPainter.h:103
 TGLLegoPainter.h:104
 TGLLegoPainter.h:105
 TGLLegoPainter.h:106
 TGLLegoPainter.h:107
 TGLLegoPainter.h:108