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