This commit was generated by cvs2svn to compensate for changes in r13732,
[u/mrichter/AliRoot.git] / EVE / Alieve / TPCSegmentGL.h
1 // $Header$
2
3 #ifndef ALIEVE_TPCSegmentGL_H
4 #define ALIEVE_TPCSegmentGL_H
5
6
7 #include <TGLObject.h>
8
9 #include <Alieve/TPCSegment.h>
10
11 #include <GL/gl.h>
12 #include <GL/glu.h>
13
14 namespace Alieve {
15
16   const int ImageWidth  = 256;
17   const int ImageHeight = 128;
18
19   class TPCSegmentGL : public TGLObject
20   {
21   protected:
22     virtual       void DirectDraw(const TGLDrawFlags & flags) const;
23
24   private:
25     void          LoadPadrow(Int_t row, Int_t off) const;
26     void          DisplayTexture(Float_t pw, Float_t pl, Float_t vR, Int_t nMaxPads, 
27                                   Int_t nRows, Int_t startRow,Int_t startCol) const;
28     void          DisplayQuads(Float_t pw, Float_t pl, Float_t vR, Int_t nMaxPads, 
29                                 Int_t nRows, Int_t startRow,Int_t startCol) const;
30     void          DisplayFrame(TPCDigitsInfo* info) const;
31
32     GLubyte* GetRow(Int_t row) const;
33     GLubyte* GetRowCol(Int_t row, Int_t col) const;
34
35     // protected:
36     TPCSegment*                  fSegment;
37     mutable UChar_t*             fImage;
38     mutable UInt_t               fTexture;
39     mutable UInt_t               fRTS;
40  
41   public:
42     TPCSegmentGL();
43     virtual       ~TPCSegmentGL();
44     virtual        Bool_t SetModel(TObject* obj); 
45     virtual void   SetBBox();
46
47     void           SetCol(Float_t z, UChar_t* pixel) const;
48     void           CreateTexture(TPCDigitsInfo* info) const;
49
50   }; // endclass TPCSegment_GL_Rnr
51   
52
53   inline  UChar_t* TPCSegmentGL::GetRowCol(Int_t row, Int_t col) const
54   {
55     if ( row > ImageHeight) printf("ERROR row %d ImageHeight %d\n", row, col);
56     return fImage + (ImageWidth*row +col)*4*sizeof(UChar_t); //*sizeof();
57   }
58
59   inline void LoopStepsUp(Alieve::TPCSeg* seg) 
60   {
61     Float_t x = -(seg->fNMaxPads*1.0/2 - seg->fNsteps)*seg->fPadWidth;
62     Float_t y  = seg->fRlow;
63     glVertex3f(x,y,0.);
64     for(int s = 0; s <seg->fNsteps ;s++){
65       y = seg->fStepY[s];
66       glVertex3f(x,y,0.);
67       x -= seg->fPadWidth;
68       glVertex3f(x,y,0.);
69     }
70     y =  seg->fRlow + seg->fNRows*seg->fPadLength;
71     glVertex3f(-seg->fNMaxPads*seg->fPadWidth/2,y,0.);
72   }
73
74   inline void LoopStepsDown(TPCSeg* seg) 
75   {
76     Float_t x = seg->fNMaxPads*seg->fPadWidth/2;
77     Float_t y = seg->fRlow + seg->fNRows*seg->fPadLength;
78     glVertex3f(x,y,0.);
79     for (int s = (seg->fNsteps -1); s >= 0 ;s--){
80       y =  seg->fStepY[s];
81       glVertex3f(x,y,0.);
82       x -= seg->fPadWidth;
83       glVertex3f(x,y,0.);
84     }
85     y = seg->fRlow;
86     glVertex3f((seg->fNMaxPads*1.0/2 - seg->fNsteps)*seg->fPadWidth,y, 0.);
87   }
88 }
89
90 #endif