]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Reve/BoxSetGL.cxx
New class GridStepper.
[u/mrichter/AliRoot.git] / EVE / Reve / BoxSetGL.cxx
CommitLineData
915dabe1 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
13using namespace Reve;
14
15//______________________________________________________________________
16// BoxSetGL
17//
18
2aef44c1 19ClassImp(BoxSetGL)
915dabe1 20
0d989760 21BoxSetGL::BoxSetGL() : fM(0)
915dabe1 22{
23 // fCached = false; // Disable display list.
24}
25
26BoxSetGL::~BoxSetGL()
27{}
28
29/**************************************************************************/
30
31Bool_t BoxSetGL::SetModel(TObject* obj)
32{
0d989760 33 Bool_t isok = SetModelCheckClass(obj, Reve::BoxSet::Class());
34 fM = isok ? dynamic_cast<Reve::BoxSet*>(obj) : 0;
35 return isok;
915dabe1 36}
37
38void BoxSetGL::SetBBox()
39{
0d989760 40 SetAxisAlignedBBox(fM->AssertBBox());
915dabe1 41}
42
43/**************************************************************************/
44
45void BoxSetGL::DirectDraw(const TGLDrawFlags& /*flags*/) const
46{
0d989760 47 BoxSet& mB = * fM;
915dabe1 48 // printf("BoxSetGL::DirectDraw N boxes %d\n", mB.fBoxes.size());
c8f79bf4 49 if(mB.fBoxes.size() == 0)
50 return;
915dabe1 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);
0d989760 56 if (mB.fRenderMode == BoxSet::RM_Fill) {
c8b08692 57 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
0d989760 58 } else if (mB.fRenderMode == BoxSet::RM_Line) {
c8b08692 59 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
0d989760 60 glDisable(GL_LIGHTING);
61 }
c8b08692 62 UChar_t defCol[4];
63 Reve::ColorFromIdx(mB.fDefaultColor, defCol);
0d989760 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();
c8b08692 143 }
915dabe1 144
915dabe1 145 }
915dabe1 146
147 glPopAttrib();
148}