00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027
00029 #ifndef __SPACEBALLSENSOR_H__
00030 #define __SPACEBALLSENSOR_H__
00031
00032
00033 #include "X3DSensorNode.h"
00034 #include <list>
00035 #include <GL/glew.h>
00036 #ifdef MACOSX
00037 #include <GLUT/glut.h>
00038 #else
00039 #include <GL/glut.h>
00040 #endif
00041
00042 #include "SFVec3f.h"
00043 #include "MFBool.h"
00044
00045
00046
00047 namespace H3D {
00048
00055 class H3DAPI_API SpaceballSensor : public X3DSensorNode {
00056 public:
00057
00059 SpaceballSensor( Inst< SFBool > _enabled = 0,
00060 Inst< SFNode > _metadata = 0,
00061 Inst< SFBool > _isActive = 0,
00062 Inst< SFVec3f > _motion = 0,
00063 Inst< SFVec3f > _rotation = 0,
00064 Inst< MFBool > _buttons = 0 );
00065
00067 virtual ~SpaceballSensor();
00068
00069 void addGLUTMotionAction( int x, int y, int z );
00070
00071 void addGLUTRotateAction( int x, int y, int z );
00072
00073 void addGLUTButtonAction( int button, int state );
00074
00075
00078 static void glutMotionCallback( int x, int y, int z );
00079
00082 static void glutRotateCallback( int x, int y, int z );
00083
00086 static void glutButtonCallback( int button, int state );
00087
00091 auto_ptr< SFVec3f> motion;
00092
00096 auto_ptr< SFVec3f> rotation;
00097
00101 auto_ptr< MFBool > buttons;
00102
00103
00105 static H3DNodeDatabase database;
00106
00107 private:
00108 static list< SpaceballSensor * > instances;
00109 };
00110 }
00111
00112 #endif