ROOT logo
// @(#)root/eve:$Id: TEveCaloLegoGL.h 28623 2009-05-14 09:55:03Z matevz $
// Author: Alja Mrak-Tadel 2007

/*************************************************************************
 * Copyright (C) 1995-2007, 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_TEveCaloLegoGL
#define ROOT_TEveCaloLegoGL

#include "TGLObject.h"
#include "TGLAxisPainter.h"

#include "TEveCaloData.h"
#include "TEveVSDStructs.h"
#include "TEveCalo.h"

#include <map>

class TEveCaloLego;

class TEveCaloLegoGL : public TGLObject
{
private:
   TEveCaloLegoGL(const TEveCaloLegoGL&);            // Not implemented
   TEveCaloLegoGL& operator=(const TEveCaloLegoGL&); // Not implemented

   mutable Float_t   fDataMax; // cached

   // axis
   mutable TAxis    *fEtaAxis;
   mutable TAxis    *fPhiAxis;
   mutable TAxis    *fZAxis;

   mutable TEveVector  fXAxisTitlePos;
   mutable TEveVector  fYAxisTitlePos;
   mutable TEveVector  fZAxisTitlePos;
   mutable TEveVector  fBackPlaneXConst[2];
   mutable TEveVector  fBackPlaneYConst[2];

   mutable TGLAxisPainter fAxisPainter;
   mutable Int_t          fBinStep;


protected:
   Int_t   GetGridStep(TGLRnrCtx &rnrCtx) const;
   void    RebinAxis(TAxis *orig, TAxis *curr) const;

   void    SetAxis3DTitlePos(TGLRnrCtx &rnrCtx, Float_t x0, Float_t x1, Float_t y0, Float_t y1) const;
   void    DrawAxis3D(TGLRnrCtx &rnrCtx) const;
   void    DrawAxis2D(TGLRnrCtx &rnrCtx) const;
   void    DrawHistBase(TGLRnrCtx &rnrCtx) const;

   void    DrawCells2D() const;

   void    DrawCells3D(TGLRnrCtx & rnrCtx) const;
   void    MakeQuad(Float_t x, Float_t y, Float_t z, Float_t xw, Float_t yw, Float_t zh) const;
   void    MakeDisplayList() const;

   void    WrapTwoPi(Float_t &min, Float_t &max) const;

   TEveCaloLego                     *fM;  // Model object.
   mutable Bool_t                    fDLCacheOK;

   typedef std::map<Int_t, UInt_t>           SliceDLMap_t;
   typedef std::map<Int_t, UInt_t>::iterator SliceDLMap_i;

   mutable SliceDLMap_t              fDLMap;
   mutable TEveCaloData::RebinData_t fRebinData;

   mutable Bool_t                    fCells3D;

public:
   TEveCaloLegoGL();
   virtual ~TEveCaloLegoGL();

   virtual Bool_t SetModel(TObject* obj, const Option_t* opt = 0);

   virtual void   SetBBox();

   virtual void   DLCacheDrop();
   virtual void   DLCachePurge();

   virtual void   DirectDraw(TGLRnrCtx & rnrCtx) const;
   virtual Bool_t SupportsSecondarySelect() const { return kTRUE; }
   virtual void   ProcessSelection(TGLRnrCtx & rnrCtx, TGLSelectRecord & rec);

   ClassDef(TEveCaloLegoGL, 0); // GL renderer class for TEveCaloLego.
};

//______________________________________________________________________________
inline void TEveCaloLegoGL::WrapTwoPi(Float_t &min, Float_t &max) const
{
   //   static const Float_t pi  = TMath::Pi() + 1e-6;
   if (fM->GetPhiMax()>TMath::Pi() && max<=fM->GetPhiMin())
   {
      min += TMath::TwoPi();
      max += TMath::TwoPi();
   }
   else if (fM->GetPhiMin()<-TMath::Pi() && min>=fM->GetPhiMax())
   {
      min -= TMath::TwoPi();
      max -= TMath::TwoPi();
   }

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