00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TGLRotateManip
00013 #define ROOT_TGLRotateManip
00014
00015 #ifndef ROOT_TGLManip
00016 #include "TGLManip.h"
00017 #endif
00018
00019
00020 class TGLRotateManip : public TGLManip
00021 {
00022 private:
00023
00024
00025
00026
00027 Bool_t fShallowRing;
00028 Bool_t fShallowFront;
00029 TGLPlane fActiveRingPlane;
00030 TGLVertex3 fActiveRingCenter;
00031
00032
00033
00034 TGLLine3 fRingLine;
00035 TGLLine3 fRingLineOld;
00036
00037 void DrawAxisRing(const TGLVertex3& origin, const TGLVector3& axis,
00038 Double_t radius, Float_t rgba[4]) const;
00039 Double_t CalculateAngleDelta(const TPoint& mouse, const TGLCamera& camera);
00040 TGLLine3 CalculateRingLine(const TPoint& mouse, const TGLCamera& camera) const;
00041
00042 protected:
00043 static Double_t Angle(const TGLVector3& v1, const TGLVector3& v2);
00044 static Double_t Angle(const TGLVector3& v1, const TGLVector3& v2, const TGLVector3& ref);
00045
00046 public:
00047 TGLRotateManip();
00048 TGLRotateManip(TGLPhysicalShape* shape);
00049 virtual ~TGLRotateManip();
00050
00051 virtual void Draw(const TGLCamera& camera) const;
00052 virtual Bool_t HandleButton(const Event_t& event, const TGLCamera& camera);
00053 virtual Bool_t HandleMotion(const Event_t& event, const TGLCamera& camera);
00054
00055 ClassDef(TGLRotateManip, 0);
00056 };
00057
00058 #endif