1 #include "MUONChamberGL.h"
3 #include <Alieve/MUONChamber.h>
4 #include <Alieve/MUONChamberData.h>
6 #include <TGLDrawFlags.h>
7 #include <Reve/QuadSetGL.h>
12 using namespace Alieve;
14 //______________________________________________________________________
18 ClassImp(MUONChamberGL)
20 //______________________________________________________________________
21 MUONChamberGL::MUONChamberGL() :
32 //______________________________________________________________________
33 MUONChamberGL::~MUONChamberGL()
41 //______________________________________________________________________
42 Bool_t MUONChamberGL::SetModel(TObject* obj)
48 #if ROOT_VERSION_CODE <= ROOT_VERSION(5,11,2)
49 if(set_model(obj, "Alieve::MUONChamber")) {
50 #elif ROOT_VERSION_CODE <= ROOT_VERSION(5,13,0)
51 if(SetModelCheckClass(obj, "Alieve::MUONChamber")) {
53 if(SetModelCheckClass(obj, Alieve::MUONChamber::Class())) {
56 fChamber = (MUONChamber*) fExternalObj;
66 //______________________________________________________________________
67 void MUONChamberGL::SetBBox()
73 #if ROOT_VERSION_CODE <= ROOT_VERSION(5,11,2)
74 set_axis_aligned_bbox(((MUONChamber*)fExternalObj)->AssertBBox());
76 SetAxisAlignedBBox(((MUONChamber*)fExternalObj)->AssertBBox());
81 //______________________________________________________________________
82 void MUONChamberGL::DirectDraw(const TGLDrawFlags& /*flags*/) const
88 glDisable(GL_LIGHTING);
90 //Double_t width = 10;
91 //glOrtho(-width,+width,-width,+width,-width,+width);
93 if(fRTS < fChamber->fRTS) {
94 fChamber->UpdateQuads();
95 fRTS = fChamber->fRTS;
98 Bool_t hasData = (fChamber->GetChamberData() != 0);
110 //______________________________________________________________________
111 void MUONChamberGL::DrawQuads() const
114 // draw the digits as GL_QUADS
117 glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
119 glDisable(GL_LIGHTING);
120 glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
121 glEnable(GL_COLOR_MATERIAL);
122 glDisable(GL_CULL_FACE);
124 //Float_t c[4]; glGetFloatv(GL_CURRENT_COLOR, c);
126 glPolygonMode(GL_FRONT, GL_FILL);
127 glPolygonMode(GL_BACK, GL_LINE);
130 for(std::vector<Quad>::iterator q=fChamber->fQuadSet1.Quads().begin(); q!=fChamber->fQuadSet1.Quads().end(); ++q) {
131 UChar_t* c = (UChar_t*) &q->color;
133 glVertex3fv(q->vertices);
134 glVertex3fv(q->vertices + 3);
135 glVertex3fv(q->vertices + 6);
136 glVertex3fv(q->vertices + 9);
140 glPolygonMode(GL_FRONT, GL_LINE);
141 glPolygonMode(GL_BACK, GL_FILL);
144 for(std::vector<Quad>::iterator q=fChamber->fQuadSet2.Quads().begin(); q!=fChamber->fQuadSet2.Quads().end(); ++q) {
145 UChar_t* c = (UChar_t*) &q->color;
147 glVertex3fv(q->vertices);
148 glVertex3fv(q->vertices + 3);
149 glVertex3fv(q->vertices + 6);
150 glVertex3fv(q->vertices + 9);
158 //______________________________________________________________________
159 void MUONChamberGL::DrawChamberFrame() const
162 // draw the chamber frame as GL_LINE_LOOP
165 MUONChamberData* chamberData = fChamber->GetChamberData();
166 Int_t nDetElem = chamberData->GetNDetElem();
168 Float_t xOrig, yOrig, xRad, yRad, x, y, z;
178 for (Int_t id = 0; id < nDetElem; id++) {
180 frameCoord = chamberData->GetFrameCoord(id);
182 if (fChamber->GetID() < 4) {
184 xOrig = frameCoord[0];
185 yOrig = frameCoord[1];
186 xRad = frameCoord[2];
187 yRad = frameCoord[3];
193 glBegin(GL_LINE_LOOP);
195 glVertex3f(xOrig,yOrig,z);
198 Float_t dstep = TMath::Pi()/2.0 / (Float_t)nstep;
200 for (Int_t istep = 0; istep < nstep; istep++) {
203 x = xOrig + xRad * TMath::Cos(d);
204 y = yOrig + yRad * TMath::Sin(d);
210 glVertex3f(xOrig,yOrig,z);
216 glBegin(GL_LINE_LOOP);
217 glVertex3f(frameCoord[0],frameCoord[1],frameCoord[4]);
218 glVertex3f(frameCoord[0],frameCoord[3],frameCoord[4]);
219 glVertex3f(frameCoord[2],frameCoord[3],frameCoord[4]);
220 glVertex3f(frameCoord[2],frameCoord[1],frameCoord[4]);
221 glVertex3f(frameCoord[0],frameCoord[1],frameCoord[4]);