]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Reve/TriangleSetGL.cxx
- Compute parameter covariances including absorber dispersion effects
[u/mrichter/AliRoot.git] / EVE / Reve / TriangleSetGL.cxx
1 // $Header$
2
3 #include "TriangleSetGL.h"
4 #include "TriangleSet.h"
5 #include <TVector3.h>
6
7 #include <TGLIncludes.h>
8
9 //______________________________________________________________________
10 // TriangleSetGL
11 //
12
13 using namespace Reve;
14
15 ClassImp(TriangleSetGL)
16
17 TriangleSetGL::TriangleSetGL() : TGLObject(), fM(0)
18 {
19   // fDLCache = false; // Disable display list.
20 }
21
22 TriangleSetGL::~TriangleSetGL()
23 {}
24
25 /**************************************************************************/
26
27 Bool_t TriangleSetGL::SetModel(TObject* obj, const Option_t* /*opt*/)
28 {
29   if(SetModelCheckClass(obj, TriangleSet::Class())) {
30     fM = dynamic_cast<TriangleSet*>(obj);
31     return kTRUE;
32   }
33   return kFALSE;
34 }
35
36 void TriangleSetGL::SetBBox()
37 {
38   // !! This ok if master sub-classed from TAttBBox
39   SetAxisAlignedBBox(((TriangleSet*)fExternalObj)->AssertBBox());
40 }
41
42 /**************************************************************************/
43
44 void TriangleSetGL::DirectDraw(TGLRnrCtx & /*rnrCtx*/) const
45 {
46   TriangleSet& TS = *fM;
47   Bool_t isScaled = TS.fHMTrans.IsScale();
48
49   GLint ex_shade_model;
50   glGetIntegerv(GL_SHADE_MODEL, &ex_shade_model);
51   glShadeModel(GL_FLAT);
52
53   glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
54
55   glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
56   glEnable(GL_COLOR_MATERIAL);
57   glPolygonMode(GL_FRONT, GL_FILL);
58   glPolygonMode(GL_BACK,  GL_LINE);
59   glDisable(GL_CULL_FACE);
60   if (isScaled) glEnable(GL_NORMALIZE);
61   glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
62   glVertexPointer(3, GL_FLOAT, 0, TS.fVerts);
63   glEnableClientState(GL_VERTEX_ARRAY);
64
65   Int_t*   T = TS.fTrings;
66   Float_t* N = TS.fTringNorms;
67   UChar_t* C = TS.fTringCols;
68
69   TVector3 e1, e2, n;
70
71   glBegin(GL_TRIANGLES);
72   for(Int_t t=0; t<TS.fNTrings; ++t) {
73     if (N) {
74       glNormal3fv(N); N += 3;
75     } else {
76       Float_t* v0 = TS.Vertex(T[0]);
77       Float_t* v1 = TS.Vertex(T[1]);
78       Float_t* v2 = TS.Vertex(T[2]);
79       e1.SetXYZ(v1[0]-v0[0], v1[1]-v0[1], v1[2]-v0[2]);
80       e2.SetXYZ(v2[0]-v0[0], v2[1]-v0[1], v2[2]-v0[2]);
81       n = e1.Cross(e2);
82       if (!isScaled) n.SetMag(1);
83       glNormal3d(n.x(), n.y(), n.z());
84     }
85     if (C) {
86       glColor3ubv(C);  C += 3;
87     }
88     glArrayElement(T[0]);
89     glArrayElement(T[1]);
90     glArrayElement(T[2]);
91     T += 3;
92   }
93   glEnd();
94
95   glPopClientAttrib();
96   glPopAttrib();
97   glShadeModel(ex_shade_model);
98 }