]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Reve/BoxSetGL.cxx
Add Getters and Setters in TrackRnrStyle and TrackList to define rendering of path...
[u/mrichter/AliRoot.git] / EVE / Reve / BoxSetGL.cxx
1 // $Header$
2
3 #include "BoxSetGL.h"
4 #include <Reve/BoxSet.h>
5
6 #include <TGLDrawFlags.h>
7 #ifdef WIN32
8 #include "Windows4root.h"
9 #endif
10 #include <GL/gl.h>
11 #include <GL/glu.h>
12
13 using namespace Reve;
14
15 //______________________________________________________________________
16 // BoxSetGL
17 //
18
19 ClassImp(BoxSetGL)
20
21 BoxSetGL::BoxSetGL() : fM(0)
22 {
23   // fCached = false; // Disable display list.
24 }
25
26 BoxSetGL::~BoxSetGL()
27 {}
28
29 /**************************************************************************/
30
31 Bool_t BoxSetGL::SetModel(TObject* obj)
32 {
33   Bool_t isok = SetModelCheckClass(obj, Reve::BoxSet::Class());
34   fM = isok ? dynamic_cast<Reve::BoxSet*>(obj) : 0;
35   return isok;
36 }
37
38 void BoxSetGL::SetBBox()
39 {
40   SetAxisAlignedBBox(fM->AssertBBox());
41 }
42
43 /**************************************************************************/
44
45 void BoxSetGL::DirectDraw(const TGLDrawFlags& /*flags*/) const
46 {
47   BoxSet& mB = * fM;
48   // printf("BoxSetGL::DirectDraw N boxes %d\n", mB.fBoxes.size());
49   if(mB.fBoxes.size() == 0)
50     return;
51
52   glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
53   glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
54   glEnable(GL_COLOR_MATERIAL);
55   glDisable(GL_CULL_FACE);
56   if (mB.fRenderMode == BoxSet::RM_Fill) {
57     glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
58   } else if (mB.fRenderMode == BoxSet::RM_Line) {
59     glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
60     glDisable(GL_LIGHTING);
61   }
62   UChar_t defCol[4];
63   Reve::ColorFromIdx(mB.fDefaultColor, defCol);
64
65   if (mB.fRenderMode != BoxSet::RM_Line) {
66
67     glBegin(GL_QUADS);
68     for(std::vector<Box>::iterator q=mB.fBoxes.begin(); q!=mB.fBoxes.end(); ++q) {
69       UChar_t* c = q->color;
70       if (c[3] == 0 && c[2] == 0 && c[1] == 0 && c[0] == 0) {
71         glColor4ubv(defCol);
72       } else {
73         glColor4ubv(c);
74       }
75
76       // bottom: 3210
77       glNormal3f(0, 0, -1);
78       glVertex3fv(q->vertices + 9);  glVertex3fv(q->vertices + 6);
79       glVertex3fv(q->vertices + 3);  glVertex3fv(q->vertices);
80       // top:   4567
81       glNormal3f(0, 0, 1);
82       glVertex3fv(q->vertices + 12); glVertex3fv(q->vertices + 15);
83       glVertex3fv(q->vertices + 18); glVertex3fv(q->vertices + 21);
84       // front: 0154
85       glNormal3f(0, -1, 0);
86       glVertex3fv(q->vertices);      glVertex3fv(q->vertices + 3);
87       glVertex3fv(q->vertices + 15); glVertex3fv(q->vertices + 12);
88       // back:  7623
89       glNormal3f(0, 1, 0);
90       glVertex3fv(q->vertices + 21); glVertex3fv(q->vertices + 18);
91       glVertex3fv(q->vertices + 6);  glVertex3fv(q->vertices + 9);
92       // left:  4730
93       glNormal3f(-1, 0, 0);
94       glVertex3fv(q->vertices + 12); glVertex3fv(q->vertices + 21);
95       glVertex3fv(q->vertices + 9);  glVertex3fv(q->vertices);
96       // right: 5126
97       glNormal3f(1, 0, 0);
98       glVertex3fv(q->vertices + 15); glVertex3fv(q->vertices + 3);
99       glVertex3fv(q->vertices + 6);  glVertex3fv(q->vertices + 18);
100     }
101     glEnd();
102
103   } else {
104
105     for(std::vector<Box>::iterator q=mB.fBoxes.begin(); q!=mB.fBoxes.end(); ++q) {
106       UChar_t* c = q->color;
107       if (c[3] == 0 && c[2] == 0 && c[1] == 0 && c[0] == 0) {
108         glColor4ubv(defCol);
109       } else {
110         glColor4ubv(c);
111       }
112
113       // bottom: 3210
114       glBegin(GL_LINE_LOOP);
115       glVertex3fv(q->vertices + 9);  glVertex3fv(q->vertices + 6);
116       glVertex3fv(q->vertices + 3);  glVertex3fv(q->vertices);
117       glEnd();
118       // top:   4567
119       glBegin(GL_LINE_LOOP);
120       glVertex3fv(q->vertices + 12); glVertex3fv(q->vertices + 15);
121       glVertex3fv(q->vertices + 18); glVertex3fv(q->vertices + 21);
122       glEnd();
123       // front: 0154
124       glBegin(GL_LINE_LOOP);
125       glVertex3fv(q->vertices);      glVertex3fv(q->vertices + 3);
126       glVertex3fv(q->vertices + 15); glVertex3fv(q->vertices + 12);
127       glEnd();
128       // back:  7623
129       glBegin(GL_LINE_LOOP);
130       glVertex3fv(q->vertices + 21); glVertex3fv(q->vertices + 18);
131       glVertex3fv(q->vertices + 6);  glVertex3fv(q->vertices + 9);
132       glEnd();
133       // left:  4730
134       glBegin(GL_LINE_LOOP);
135       glVertex3fv(q->vertices + 12); glVertex3fv(q->vertices + 21);
136       glVertex3fv(q->vertices + 9);  glVertex3fv(q->vertices);
137       glEnd();
138       // right: 5126
139       glBegin(GL_LINE_LOOP);
140       glVertex3fv(q->vertices + 15); glVertex3fv(q->vertices + 3);
141       glVertex3fv(q->vertices + 6);  glVertex3fv(q->vertices + 18);
142       glEnd();
143     }
144
145   }
146
147   glPopAttrib();
148 }