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

HIHapticDevice.h

00001 #ifndef VR_HAPTIC_HDHAPTIC_H
00002 #define VR_HAPTIC_HDHAPTIC_H
00003 #include "HIBase.h"
00004 
00005 namespace Spr {
00006 
00007 //----------------------------------------------------------------------------
00008 //  HIHapticDevice
00009 
00010 /// 力覚提示装置の基底クラス
00011 class SPR_DLL HIHapticDevice: public HIBase{
00012 protected:
00013     int updateStep;
00014     bool bGood;
00015 public:
00016     HIOBJECTDEFABST(HIHapticDevice);
00017     /**@name    初期化など  */
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 //  HIForceDevice3D
00041 
00042 /// 並進回転6自由度のデバイス
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     /**@name    デバイスの状態  */
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 /*class SPR_DLL HIForceDevice3DPlus: public HIForceDevice3D{
00077     virtual Vec3f GetRot()=0;
00078 };
00079 */
00080 
00081 //----------------------------------------------------------------------------
00082 //  HIForceDevice3D
00083 /// 並進3自由度のデバイス
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 //  HIForceDevice7D
00098 /// 7自由度のデバイス
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 }   //  namespace Spr
00111 #endif

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