#ifndef ROOT_TEveCalo3DGL
#define ROOT_TEveCalo3DGL
#include "TGLObject.h"
#include "TEveCaloData.h"
class TEveCalo3D;
class TEveCalo3DGL : public TGLObject
{
private:
TEveCalo3DGL(const TEveCalo3DGL&);
TEveCalo3DGL& operator=(const TEveCalo3DGL&);
void CrossProduct(const Float_t a[3], const Float_t b[3], const Float_t c[3], Float_t out[3]) const;
void RenderBox(const Float_t pnts[8]) const;
void RenderGridEndCap() const;
void RenderGridBarrel() const;
void RenderGrid(TGLRnrCtx & rnrCtx) const;
Float_t RenderBarrelCell(const TEveCaloData::CellGeom_t &cell, Float_t towerH, Float_t offset) const;
Float_t RenderEndCapCell(const TEveCaloData::CellGeom_t &cell, Float_t towerH, Float_t offset) const;
protected:
TEveCalo3D *fM;
mutable std::vector<Float_t> fOffset;
public:
TEveCalo3DGL();
virtual ~TEveCalo3DGL() {}
virtual Bool_t SetModel(TObject* obj, const Option_t* opt=0);
virtual void SetBBox();
virtual void DirectDraw(TGLRnrCtx & rnrCtx) const;
virtual void DrawHighlight(TGLRnrCtx & rnrCtx, const TGLPhysicalShape* ps) const;
virtual Bool_t ShouldDLCache(const TGLRnrCtx& rnrCtx) const;
virtual Bool_t SupportsSecondarySelect() const { return kTRUE; }
virtual Bool_t AlwaysSecondarySelect() const { return kTRUE; }
virtual void ProcessSelection(TGLRnrCtx & rnrCtx, TGLSelectRecord & rec);
ClassDef(TEveCalo3DGL, 0);
};
#endif