]>
Commit | Line | Data |
---|---|---|
d810d0de | 1 | // $Id$ |
fafff680 | 2 | // Main authors: Matevz Tadel & Alja Mrak-Tadel & Bogdan Vulpescu: 2006, 2007 |
d810d0de | 3 | |
4 | /************************************************************************** | |
5 | * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * | |
6 | * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * | |
51346b82 | 7 | * full copyright notice. * |
d810d0de | 8 | **************************************************************************/ |
37b09b91 | 9 | |
d810d0de | 10 | #include "AliEveMUONChamberGL.h" |
3626c858 | 11 | |
cb4245bb | 12 | #include <EveDet/AliEveMUONChamber.h> |
13 | #include <EveDet/AliEveMUONChamberData.h> | |
3626c858 | 14 | |
19208112 | 15 | #include <TGLRnrCtx.h> |
16 | #include <TGLIncludes.h> | |
d810d0de | 17 | |
3626c858 | 18 | |
57ffa5fb | 19 | //______________________________________________________________________________ |
d810d0de | 20 | // AliEveMUONChamberGL |
3626c858 | 21 | // |
22 | ||
d810d0de | 23 | ClassImp(AliEveMUONChamberGL) |
3626c858 | 24 | |
57ffa5fb | 25 | //______________________________________________________________________________ |
d810d0de | 26 | AliEveMUONChamberGL::AliEveMUONChamberGL() : |
3626c858 | 27 | TGLObject(), |
28 | fChamber(0), | |
c76ea574 | 29 | fQS1(), fQS2(), |
3626c858 | 30 | fRTS(0) |
31 | { | |
32 | // | |
33 | // constructor | |
34 | // | |
35 | ||
36 | } | |
37 | ||
57ffa5fb | 38 | //______________________________________________________________________________ |
d810d0de | 39 | AliEveMUONChamberGL::~AliEveMUONChamberGL() |
3626c858 | 40 | { |
41 | // | |
42 | // destructor | |
43 | // | |
44 | ||
45 | } | |
46 | ||
57ffa5fb | 47 | //______________________________________________________________________________ |
d810d0de | 48 | Bool_t AliEveMUONChamberGL::SetModel(TObject* obj, const Option_t* /*opt*/) |
3626c858 | 49 | { |
50 | // | |
51 | // ... | |
52 | // | |
53 | ||
d810d0de | 54 | if(SetModelCheckClass(obj, AliEveMUONChamber::Class())) { |
51346b82 | 55 | |
d810d0de | 56 | fChamber = (AliEveMUONChamber*) fExternalObj; |
84aff7a4 | 57 | fQS1.SetModel(&fChamber->fQuadSet1); |
58 | fQS2.SetModel(&fChamber->fQuadSet2); | |
3626c858 | 59 | return kTRUE; |
60 | ||
61 | } | |
62 | ||
63 | return kFALSE; | |
64 | ||
65 | } | |
66 | ||
57ffa5fb | 67 | //______________________________________________________________________________ |
d810d0de | 68 | void AliEveMUONChamberGL::SetBBox() |
3626c858 | 69 | { |
70 | // | |
71 | // ... | |
72 | // | |
73 | ||
d810d0de | 74 | SetAxisAlignedBBox(((AliEveMUONChamber*)fExternalObj)->AssertBBox()); |
3626c858 | 75 | |
76 | } | |
77 | ||
57ffa5fb | 78 | //______________________________________________________________________________ |
d810d0de | 79 | void AliEveMUONChamberGL::DirectDraw(TGLRnrCtx& rnrCtx) const |
3626c858 | 80 | { |
81 | // | |
82 | // Actual GL drawing. | |
83 | // | |
84 | ||
85 | glDisable(GL_LIGHTING); | |
86 | ||
87 | //Double_t width = 10; | |
88 | //glOrtho(-width,+width,-width,+width,-width,+width); | |
89 | ||
90 | if(fRTS < fChamber->fRTS) { | |
91 | fChamber->UpdateQuads(); | |
92 | fRTS = fChamber->fRTS; | |
93 | } | |
51346b82 | 94 | |
3626c858 | 95 | Bool_t hasData = (fChamber->GetChamberData() != 0); |
51346b82 | 96 | |
3626c858 | 97 | if(hasData) { |
98 | ||
84aff7a4 | 99 | DrawQuads(rnrCtx); |
eadce74d | 100 | DrawPoints(); |
51346b82 | 101 | |
3626c858 | 102 | } |
103 | ||
104 | DrawChamberFrame(); | |
105 | ||
106 | } | |
107 | ||
57ffa5fb | 108 | //______________________________________________________________________________ |
d810d0de | 109 | void AliEveMUONChamberGL::DrawQuads(TGLRnrCtx& rnrCtx) const |
3626c858 | 110 | { |
111 | // | |
112 | // draw the digits as GL_QUADS | |
113 | // | |
114 | ||
115 | glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT); | |
116 | ||
117 | glDisable(GL_LIGHTING); | |
3626c858 | 118 | glDisable(GL_CULL_FACE); |
119 | ||
120 | //Float_t c[4]; glGetFloatv(GL_CURRENT_COLOR, c); | |
121 | ||
122 | glPolygonMode(GL_FRONT, GL_FILL); | |
123 | glPolygonMode(GL_BACK, GL_LINE); | |
124 | ||
84aff7a4 | 125 | fQS1.DirectDraw(rnrCtx); |
3626c858 | 126 | |
127 | glPolygonMode(GL_FRONT, GL_LINE); | |
128 | glPolygonMode(GL_BACK, GL_FILL); | |
129 | ||
84aff7a4 | 130 | fQS2.DirectDraw(rnrCtx); |
3626c858 | 131 | |
132 | glPopAttrib(); | |
133 | ||
134 | } | |
135 | ||
57ffa5fb | 136 | //______________________________________________________________________________ |
d810d0de | 137 | void AliEveMUONChamberGL::DrawPoints() const |
eadce74d | 138 | { |
139 | // | |
140 | // draw the clusters as GL_QUADS | |
141 | // | |
142 | ||
143 | Float_t x, y, z; | |
144 | ||
145 | glDisable(GL_LIGHTING); | |
146 | glLineWidth(1.0); | |
147 | ||
a15e6d7d | 148 | TGLUtil::Color3f(1.0,1.0,1.0); |
51346b82 | 149 | |
eadce74d | 150 | glBegin(GL_LINES); |
51346b82 | 151 | |
eadce74d | 152 | // clusters |
153 | ||
154 | Int_t clsSize = fChamber->fClusterSize; | |
155 | ||
156 | if (clsSize > 1) { | |
157 | ||
158 | for (Int_t i = 0; i < fChamber->fPointSet1.GetN(); i++) { | |
51346b82 | 159 | |
eadce74d | 160 | fChamber->fPointSet1.GetPoint(i,x,y,z); |
161 | ||
162 | glVertex3f(x-clsSize,y+clsSize,z); | |
163 | glVertex3f(x+clsSize,y-clsSize,z); | |
51346b82 | 164 | |
eadce74d | 165 | glVertex3f(x-clsSize,y-clsSize,z); |
166 | glVertex3f(x+clsSize,y+clsSize,z); | |
51346b82 | 167 | |
eadce74d | 168 | } |
51346b82 | 169 | |
eadce74d | 170 | } |
171 | ||
172 | // hits | |
173 | ||
174 | Int_t hitSize = fChamber->fHitSize; | |
175 | ||
176 | if (hitSize > 1) { | |
177 | ||
178 | for (Int_t i = 0; i < fChamber->fPointSet2.GetN(); i++) { | |
51346b82 | 179 | |
eadce74d | 180 | fChamber->fPointSet2.GetPoint(i,x,y,z); |
51346b82 | 181 | |
eadce74d | 182 | glVertex3f(x-hitSize,y,z); |
183 | glVertex3f(x+hitSize,y,z); | |
51346b82 | 184 | |
eadce74d | 185 | glVertex3f(x,y-hitSize,z); |
186 | glVertex3f(x,y+hitSize,z); | |
51346b82 | 187 | |
eadce74d | 188 | } |
51346b82 | 189 | |
eadce74d | 190 | } |
191 | ||
192 | glEnd(); | |
51346b82 | 193 | |
eadce74d | 194 | } |
195 | ||
57ffa5fb | 196 | //______________________________________________________________________________ |
d810d0de | 197 | void AliEveMUONChamberGL::DrawChamberFrame() const |
3626c858 | 198 | { |
199 | // | |
200 | // draw the chamber frame as GL_LINE_LOOP | |
51346b82 | 201 | // |
3626c858 | 202 | |
d810d0de | 203 | AliEveMUONChamberData* chamberData = fChamber->GetChamberData(); |
3626c858 | 204 | Int_t nDetElem = chamberData->GetNDetElem(); |
205 | Float_t *frameCoord; | |
206 | Float_t xOrig, yOrig, xRad, yRad, x, y, z; | |
207 | ||
a15e6d7d | 208 | TGLUtil::Color4ub(255, 0, 0, 255); |
51346b82 | 209 | |
3626c858 | 210 | for (Int_t id = 0; id < nDetElem; id++) { |
211 | ||
212 | frameCoord = chamberData->GetFrameCoord(id); | |
213 | ||
214 | if (fChamber->GetID() < 4) { | |
215 | ||
216 | xOrig = frameCoord[0]; | |
217 | yOrig = frameCoord[1]; | |
218 | xRad = frameCoord[2]; | |
219 | yRad = frameCoord[3]; | |
220 | z = frameCoord[4]; | |
51346b82 | 221 | |
fafff680 | 222 | if (fChamber->GetID() < 2) { |
223 | xRad += TMath::Sign(15.0,(Double_t)xRad); | |
224 | yRad += TMath::Sign(15.0,(Double_t)yRad); | |
225 | } else { | |
226 | xRad += TMath::Sign( 5.0,(Double_t)xRad); | |
227 | yRad += TMath::Sign( 5.0,(Double_t)yRad); | |
228 | } | |
3626c858 | 229 | |
230 | glBegin(GL_LINE_LOOP); | |
231 | ||
232 | glVertex3f(xOrig,yOrig,z); | |
51346b82 | 233 | |
3626c858 | 234 | Int_t nstep = 100; |
235 | Float_t dstep = TMath::Pi()/2.0 / (Float_t)nstep; | |
236 | Float_t d; | |
237 | for (Int_t istep = 0; istep < nstep; istep++) { | |
238 | ||
239 | d = istep * dstep; | |
240 | x = xOrig + xRad * TMath::Cos(d); | |
241 | y = yOrig + yRad * TMath::Sin(d); | |
242 | ||
243 | glVertex3f(x,y,z); | |
244 | ||
245 | } | |
51346b82 | 246 | |
3626c858 | 247 | glVertex3f(xOrig,yOrig,z); |
248 | ||
249 | glEnd(); | |
250 | ||
251 | } else { | |
252 | ||
253 | glBegin(GL_LINE_LOOP); | |
254 | glVertex3f(frameCoord[0],frameCoord[1],frameCoord[4]); | |
255 | glVertex3f(frameCoord[0],frameCoord[3],frameCoord[4]); | |
256 | glVertex3f(frameCoord[2],frameCoord[3],frameCoord[4]); | |
257 | glVertex3f(frameCoord[2],frameCoord[1],frameCoord[4]); | |
258 | glVertex3f(frameCoord[0],frameCoord[1],frameCoord[4]); | |
259 | glEnd(); | |
260 | ||
261 | } | |
262 | ||
263 | } | |
264 | ||
265 | } |