4 #include <Reve/BoxSet.h>
6 #include <TGLDrawFlags.h>
8 #include "Windows4root.h"
15 //______________________________________________________________________
21 BoxSetGL::BoxSetGL() : fM(0)
23 // fCached = false; // Disable display list.
29 /**************************************************************************/
31 Bool_t BoxSetGL::SetModel(TObject* obj)
33 Bool_t isok = SetModelCheckClass(obj, Reve::BoxSet::Class());
34 fM = isok ? dynamic_cast<Reve::BoxSet*>(obj) : 0;
38 void BoxSetGL::SetBBox()
40 SetAxisAlignedBBox(fM->AssertBBox());
43 /**************************************************************************/
45 void BoxSetGL::DirectDraw(const TGLDrawFlags& /*flags*/) const
48 // printf("BoxSetGL::DirectDraw N boxes %d\n", mB.fBoxes.size());
49 if(mB.fBoxes.size() == 0)
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);
63 Reve::ColorFromIdx(mB.fDefaultColor, defCol);
65 if (mB.fRenderMode != BoxSet::RM_Line) {
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) {
78 glVertex3fv(q->vertices + 9); glVertex3fv(q->vertices + 6);
79 glVertex3fv(q->vertices + 3); glVertex3fv(q->vertices);
82 glVertex3fv(q->vertices + 12); glVertex3fv(q->vertices + 15);
83 glVertex3fv(q->vertices + 18); glVertex3fv(q->vertices + 21);
86 glVertex3fv(q->vertices); glVertex3fv(q->vertices + 3);
87 glVertex3fv(q->vertices + 15); glVertex3fv(q->vertices + 12);
90 glVertex3fv(q->vertices + 21); glVertex3fv(q->vertices + 18);
91 glVertex3fv(q->vertices + 6); glVertex3fv(q->vertices + 9);
94 glVertex3fv(q->vertices + 12); glVertex3fv(q->vertices + 21);
95 glVertex3fv(q->vertices + 9); glVertex3fv(q->vertices);
98 glVertex3fv(q->vertices + 15); glVertex3fv(q->vertices + 3);
99 glVertex3fv(q->vertices + 6); glVertex3fv(q->vertices + 18);
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) {
114 glBegin(GL_LINE_LOOP);
115 glVertex3fv(q->vertices + 9); glVertex3fv(q->vertices + 6);
116 glVertex3fv(q->vertices + 3); glVertex3fv(q->vertices);
119 glBegin(GL_LINE_LOOP);
120 glVertex3fv(q->vertices + 12); glVertex3fv(q->vertices + 15);
121 glVertex3fv(q->vertices + 18); glVertex3fv(q->vertices + 21);
124 glBegin(GL_LINE_LOOP);
125 glVertex3fv(q->vertices); glVertex3fv(q->vertices + 3);
126 glVertex3fv(q->vertices + 15); glVertex3fv(q->vertices + 12);
129 glBegin(GL_LINE_LOOP);
130 glVertex3fv(q->vertices + 21); glVertex3fv(q->vertices + 18);
131 glVertex3fv(q->vertices + 6); glVertex3fv(q->vertices + 9);
134 glBegin(GL_LINE_LOOP);
135 glVertex3fv(q->vertices + 12); glVertex3fv(q->vertices + 21);
136 glVertex3fv(q->vertices + 9); glVertex3fv(q->vertices);
139 glBegin(GL_LINE_LOOP);
140 glVertex3fv(q->vertices + 15); glVertex3fv(q->vertices + 3);
141 glVertex3fv(q->vertices + 6); glVertex3fv(q->vertices + 18);