00001 #ifndef COIN_SOROTATESPHERICALDRAGGER_H
00002 #define COIN_SOROTATESPHERICALDRAGGER_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <Inventor/draggers/SoDragger.h>
00028 #include <Inventor/fields/SoSFRotation.h>
00029 #include <Inventor/SbMatrix.h>
00030 #include <Inventor/SbVec3f.h>
00031
00032 class SoSensor;
00033 class SoFieldSensor;
00034 class SbSphereProjector;
00035
00036
00037 class COIN_DLL_API SoRotateSphericalDragger : public SoDragger {
00038 typedef SoDragger inherited;
00039
00040 SO_KIT_HEADER(SoRotateSphericalDragger);
00041
00042 SO_KIT_CATALOG_ENTRY_HEADER(feedback);
00043 SO_KIT_CATALOG_ENTRY_HEADER(feedbackActive);
00044 SO_KIT_CATALOG_ENTRY_HEADER(feedbackSwitch);
00045 SO_KIT_CATALOG_ENTRY_HEADER(rotator);
00046 SO_KIT_CATALOG_ENTRY_HEADER(rotatorActive);
00047 SO_KIT_CATALOG_ENTRY_HEADER(rotatorSwitch);
00048
00049
00050 public:
00051 static void initClass(void);
00052 SoRotateSphericalDragger(void);
00053
00054 SoSFRotation rotation;
00055
00056 void setProjector(SbSphereProjector * p);
00057 const SbSphereProjector * getProjector(void) const;
00058
00059 protected:
00060 ~SoRotateSphericalDragger();
00061 virtual SbBool setUpConnections(SbBool onoff, SbBool doitalways = FALSE);
00062
00063 virtual void copyContents(const SoFieldContainer * fromfc,
00064 SbBool copyconnections);
00065
00066 static void startCB(void * f, SoDragger * d);
00067 static void motionCB(void * f, SoDragger * d);
00068 static void doneCB(void * f, SoDragger * d);
00069 static void fieldSensorCB(void * f, SoSensor * s);
00070 static void valueChangedCB(void * f, SoDragger * d);
00071
00072 void dragStart(void);
00073 void drag(void);
00074 void dragFinish(void);
00075
00076 SoFieldSensor * fieldSensor;
00077 SbMatrix prevMotionMatrix;
00078 SbVec3f prevWorldHitPt;
00079 SbSphereProjector * sphereProj;
00080 SbBool userProj;
00081 };
00082
00083 #endif // !COIN_SOROTATESPHERICALDRAGGER_H