00001 #ifndef HIMOUSE_H
00002 #define HIMOUSE_H
00003
00004 #include "HIHapticDevice.h"
00005 #include <Device/DVDeviceManager.h>
00006
00007 namespace Spr {;
00008
00009 class SPR_DLL HIMouse: public HIForceDevice6D{
00010 public:
00011
00012 enum ButtonState{
00013 NONE,
00014
00015 LBUTTON = MK_LBUTTON,
00016
00017 RBUTTON = MK_RBUTTON,
00018
00019 SHIFT = MK_SHIFT,
00020
00021 CONTROL = MK_CONTROL,
00022
00023 MBUTTON = MK_MBUTTON,
00024 } btnState;
00025
00026
00027 HIMouse(){ bGood = false; }
00028 virtual ~HIMouse(){}
00029
00030 HIOBJECTDEF(HIMouse);
00031
00032 bool IsGood(){return bGood;}
00033
00034
00035 bool Init();
00036
00037
00038 void Update(float dt);
00039
00040
00041 bool PreviewMessage(void* m);
00042
00043
00044
00045 virtual bool OnKeyDown(unsigned nChar);
00046
00047 virtual void OnButtonMove(UINT state, int x, int y);
00048
00049 virtual void OnButtonDown(int x, int y);
00050
00051 virtual void OnButtonUp();
00052
00053 virtual void OnDblClick(unsigned fwKeys, int x, int y);
00054
00055 virtual void OnLButtonDClick();
00056
00057 virtual void OnRButtonDClick();
00058
00059 virtual void OnShiftLButtonDClick();
00060
00061 virtual void OnWheel(UINT state, short dz);
00062
00063
00064
00065
00066
00067 Vec3f GetPos(){ return pos; }
00068
00069 Vec3f GetForce(){ return force; }
00070
00071 Vec3f GetTorque(){ return torque; }
00072
00073 Quaternionf GetOri(){ return ori; }
00074
00075 Affinef GetAxis(){ return axis; }
00076
00077
00078 void SetScale(float tp, float rp, float ta, float ra);
00079
00080
00081 void SetMass(float m){ mass = m; }
00082
00083 void SetPos(Vec3f p){ pos = p; }
00084
00085 void SetOri(Quaternionf o){ ori = o; }
00086
00087 void SetForce(const Vec3f& f, const Vec3f& t){ force = f; torque = t; }
00088 void SetForce(const Vec3f& f){ force = f; }
00089
00090 void SetMinForce(){ force = torque = Vec3f(); }
00091
00092
00093 void SetAxis(Affinef a){ axis = a; }
00094
00095 void SetAxisInit(Affinef ai){ axisInit = ai; }
00096
00097
00098
00099 bool Calib(){ return true; }
00100
00101
00102 void SetViewSize(float inWidth, float inHeight);
00103
00104
00105 protected:
00106
00107 bool bGood;
00108
00109 int oldX, oldY, newX, newY;
00110
00111 float scaleTransPointer, scaleRotPointer, scaleTransAxis, scaleRotAxis;
00112
00113
00114
00115 float mass;
00116
00117 Vec3f force;
00118
00119 Vec3f torque;
00120
00121 Vec3f pos;
00122
00123 Quaternionf ori;
00124
00125
00126 Affinef axis;
00127
00128 Affinef axisInit;
00129
00130
00131 float viewCenterX, viewCenterY, trackBallRadius;
00132
00133 Vec3f GetTrackBallRotation(float inX, float inY);
00134
00135 };
00136
00137 }
00138 #endif