Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TEveArrowGL.cxx
Go to the documentation of this file.
1 // @(#)root/eve:$Id$
2 // Author: Matevz Tadel 2007
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #include "TEveArrowGL.h"
13 #include "TEveArrow.h"
14 
15 #include "TGLRnrCtx.h"
16 #include "TGLIncludes.h"
17 #include "TGLUtil.h"
18 #include "TGLQuadric.h"
19 
20 /** \class TEveArrowGL
21 \ingroup TEve
22 OpenGL renderer class for TEveArrow.
23 */
24 
25 ClassImp(TEveArrowGL);
26 
27 ////////////////////////////////////////////////////////////////////////////////
28 /// Constructor.
29 
30 TEveArrowGL::TEveArrowGL() :
31  TGLObject(), fM(0)
32 {
33 }
34 
35 /******************************************************************************/
36 
37 ////////////////////////////////////////////////////////////////////////////////
38 /// Set model object.
39 
40 Bool_t TEveArrowGL::SetModel(TObject* obj, const Option_t* /*opt*/)
41 {
42  fM = SetModelDynCast<TEveArrow>(obj);
43  return kTRUE;
44 }
45 
46 ////////////////////////////////////////////////////////////////////////////////
47 /// Set bounding box.
48 
49 void TEveArrowGL::SetBBox()
50 {
51  // !! This ok if master sub-classed from TAttBBox
52  SetAxisAlignedBBox(((TEveArrow*)fExternalObj)->AssertBBox());
53 }
54 
55 /******************************************************************************/
56 
57 ////////////////////////////////////////////////////////////////////////////////
58 /// Render with OpenGL.
59 
60 void TEveArrowGL::DirectDraw(TGLRnrCtx& /*rnrCtx*/) const
61 {
62  static TGLQuadric quad;
63 
64  glPushMatrix();
65 
66  TGLVertex3 uo(fM->fOrigin.fX, fM->fOrigin.fY, fM->fOrigin.fZ);
67  TGLVector3 uv(fM->fVector.fX, fM->fVector.fY, fM->fVector.fZ);
68  TGLMatrix local(uo, uv);
69  glMultMatrixd(local.CArr());
70  Float_t size = fM->fVector.Mag();
71 
72  // Line (tube) component
73  Float_t r = size*fM->fTubeR;
74  Float_t h = size*fM->fConeL;
75  gluCylinder(quad.Get(), r, r, size - h, fM->fDrawQuality, 1);
76  gluQuadricOrientation(quad.Get(), (GLenum)GLU_INSIDE);
77  gluDisk(quad.Get(), 0.0, r, fM->fDrawQuality, 1);
78 
79  // Arrow cone
80  r = size*fM->fConeR;
81  glTranslated(0.0, 0.0, size - h);
82  gluDisk(quad.Get(), 0.0, r, fM->fDrawQuality, 1);
83  gluQuadricOrientation(quad.Get(), (GLenum)GLU_OUTSIDE);
84  gluCylinder(quad.Get(), r, 0., h , fM->fDrawQuality, 1);
85 
86  glPopMatrix();
87 }