メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ | 関連ページ

HIMouse.h

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         // #define MK_LBUTTON          0x0001
00015         LBUTTON = MK_LBUTTON,
00016         // #define MK_RBUTTON          0x0002
00017         RBUTTON = MK_RBUTTON,
00018         // #define MK_SHIFT            0x0004
00019         SHIFT   = MK_SHIFT,
00020         // #define MK_CONTROL          0x0008
00021         CONTROL = MK_CONTROL,
00022         // #define MK_MBUTTON          0x0010
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     /// 押されているボタンに応じてpos,oriを更新する。Shiftが押されているときはaxisを更新する。
00038     void Update(float dt);
00039 
00040     /// まとめて,メッセージを処理する場合
00041     bool PreviewMessage(void* m);
00042     ///@name 個別のメッセージハンドラで呼び出す場合
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     /// Shift+左ダブルクリック時の処理(基準座標軸の位置・姿勢を初期化)
00059     virtual void OnShiftLButtonDClick();
00060     /// ホイールをまわしたときの処理(ポインタor基準座標軸をZ軸方向に水平移動)
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 //-> 関口による変更 (2005/1/05)
00102     void SetViewSize(float inWidth, float inHeight);
00103 //<-
00104 
00105 protected:
00106     // マウスがアクティブかどうかのフラグ
00107     bool bGood;
00108     // マウスの座標(old:前ステップ,new:現ステップ)
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     // ポインタの位置。Update()で更新される
00121     Vec3f pos;
00122     // ポインタの姿勢。Update()で更新される
00123     Quaternionf ori;
00124 
00125     // 基準座標軸(ドラッグ操作時はこの座標軸にもどづいて動かされる)
00126     Affinef axis;
00127     // 初期化用座標軸
00128     Affinef axisInit;
00129 
00130 //-> 関口による変更 (2005/1/05)
00131     float   viewCenterX, viewCenterY, trackBallRadius;
00132 
00133     Vec3f   GetTrackBallRotation(float inX, float inY);
00134 //<-
00135 };
00136 
00137 }   //  namespace Spr
00138 #endif

Springheadに対してSun Apr 16 01:57:52 2006に生成されました。  doxygen 1.4.1