00001 #ifndef VR_HAPTIC_HDHAPTIC_H
00002 #define VR_HAPTIC_HDHAPTIC_H
00003 #include "HIBase.h"
00004
00005 namespace Spr {
00006
00007
00008
00009
00010
00011 class SPR_DLL HIHapticDevice: public HIBase{
00012 protected:
00013 int updateStep;
00014 bool bGood;
00015 public:
00016 HIOBJECTDEFABST(HIHapticDevice);
00017
00018
00019
00020 HIHapticDevice(){ updateStep = deviceUpdateStep; bGood=false;}
00021 virtual ~HIHapticDevice(){}
00022
00023 virtual bool BeforeCalib(){ return true; }
00024
00025 virtual bool Calib(){ return true; }
00026
00027 virtual bool AfterCalib(){ return true; }
00028
00029 void AddRealDeviceDependency(DRRealDevice* rd);
00030
00031 static void ClearRealDeviceDependency();
00032
00033
00034 virtual void Update(float dt);
00035
00036 bool IsGood(){ return bGood; }
00037 };
00038
00039
00040
00041
00042
00043 class SPR_DLL HIForceDevice6D: public HIHapticDevice{
00044 protected:
00045 float alpha;
00046 Vec3f vel, angVel;
00047 Vec3f lastPos;
00048 Quaternionf lastOri;
00049 public:
00050 HIOBJECTDEFABST(HIForceDevice6D);
00051
00052 HIForceDevice6D();
00053
00054 virtual ~HIForceDevice6D(){}
00055 virtual void Update(float dt);
00056
00057
00058
00059
00060 virtual Vec3f GetPos()=0;
00061
00062 virtual Quaternionf GetOri()=0;
00063
00064 virtual Vec3f GetVel(){ return vel; }
00065
00066 virtual Vec3f GetAngVel(){ return angVel; }
00067
00068 virtual Vec3f GetTorque()=0;
00069
00070 virtual Vec3f GetForce()=0;
00071
00072 virtual void SetForce(const Vec3f& f, const Vec3f& t)=0;
00073
00074 };
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 class SPR_DLL HIForceDevice3D: public HIForceDevice6D{
00085 public:
00086 HIOBJECTDEFABST(HIForceDevice3D);
00087 HIForceDevice3D();
00088
00089 virtual void SetForce(const Vec3f& f)=0;
00090 virtual void SetForce(const Vec3f& f, const Vec3f& t){ SetForce(f); }
00091
00092 virtual Vec3f GetTorque(){ return Vec3f(); }
00093 virtual Quaternionf GetOri(){ return Quaternionf(); }
00094 };
00095
00096
00097
00098
00099 class SPR_DLL HIForceDevice7D: public HIForceDevice6D{
00100 public:
00101 virtual ~HIForceDevice7D(){}
00102
00103 virtual float GetGap()=0;
00104
00105 virtual float GetGrasp()=0;
00106
00107 virtual void SetGrasp(float g)=0;
00108 };
00109
00110 }
00111 #endif