00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "TEveArrowGL.h"
00013 #include "TEveArrow.h"
00014
00015 #include "TGLRnrCtx.h"
00016 #include "TGLIncludes.h"
00017 #include "TGLUtil.h"
00018 #include "TGLQuadric.h"
00019
00020
00021
00022
00023
00024 ClassImp(TEveArrowGL);
00025
00026
00027 TEveArrowGL::TEveArrowGL() :
00028 TGLObject(), fM(0)
00029 {
00030
00031 }
00032
00033
00034
00035
00036 Bool_t TEveArrowGL::SetModel(TObject* obj, const Option_t* )
00037 {
00038
00039
00040 fM = SetModelDynCast<TEveArrow>(obj);
00041 return kTRUE;
00042 }
00043
00044
00045 void TEveArrowGL::SetBBox()
00046 {
00047
00048
00049
00050 SetAxisAlignedBBox(((TEveArrow*)fExternalObj)->AssertBBox());
00051 }
00052
00053
00054
00055
00056 void TEveArrowGL::DirectDraw(TGLRnrCtx& ) const
00057 {
00058
00059
00060 static TGLQuadric quad;
00061
00062 glPushMatrix();
00063
00064 TGLVertex3 uo(fM->fOrigin.fX, fM->fOrigin.fY, fM->fOrigin.fZ);
00065 TGLVector3 uv(fM->fVector.fX, fM->fVector.fY, fM->fVector.fZ);
00066 TGLMatrix local(uo, uv);
00067 glMultMatrixd(local.CArr());
00068 Float_t size = fM->fVector.Mag();
00069
00070
00071 Float_t r = size*fM->fTubeR;
00072 Float_t h = size*fM->fConeL;
00073 gluCylinder(quad.Get(), r, r, size - h, fM->fDrawQuality, 1);
00074 gluQuadricOrientation(quad.Get(), (GLenum)GLU_INSIDE);
00075 gluDisk(quad.Get(), 0.0, r, fM->fDrawQuality, 1);
00076
00077
00078 r = size*fM->fConeR;
00079 glTranslated(0.0, 0.0, size -h );
00080 gluDisk(quad.Get(), 0.0, r, fM->fDrawQuality, 1);
00081 gluQuadricOrientation(quad.Get(), (GLenum)GLU_OUTSIDE);
00082 gluCylinder(quad.Get(), r, 0., h , fM->fDrawQuality, 1);
00083
00084 glPopMatrix();
00085 }