#ifndef __ORDEVICE_SKELETON_KINECT_H__
#define __ORDEVICE_SKELETON_KINECT_H__
#include <windows.h>
#include "statushandle.h"
#include "ispeech.h"
class ORDeviceMocapKinect
{
public:
ORDeviceMocapKinect();
~ORDeviceMocapKinect();
bool Open();
bool Close();
bool GetSetupInfo ();
bool StartDataStream ();
bool StopDataStream ();
bool FetchMocapData (FBTime &pTime);
void GetSkeletonJointsOrder(
FBBodyNodeId* &pSkeletonJointsOrder);
FBString GetHardWareName();
double GetAverageSensorFloorOffset();
void SetSensorFloorOffsetSet();
int GetChannelCount () { return mChannelCount; }
const char* GetChannelName (int pChannel) { return mChannel[pChannel].mName; }
int GetChannelParent(int pChannel) { return mChannel[pChannel].mParentChannel; }
FBVector3d GetDefaultT (
int pChannel) { SkeletonNodeInfo& lSI = mChannel[pChannel];
return FBVector3d(lSI.mDefaultT[0],lSI.mDefaultT[1],lSI.mDefaultT[2]); }
FBVector3d GetDefaultR (
int pChannel) { SkeletonNodeInfo& lSI = mChannel[pChannel];
return FBVector3d(lSI.mDefaultR[0],lSI.mDefaultR[1],lSI.mDefaultR[2]); }
double GetDataTX (int pChannel) { return mChannel[pChannel].mT[0]; }
double GetDataTY (int pChannel) { return mChannel[pChannel].mT[1]; }
double GetDataTZ (int pChannel) { return mChannel[pChannel].mT[2]; }
double GetDataRX (int pChannel) { return mChannel[pChannel].mR[0]; }
double GetDataRY (int pChannel) { return mChannel[pChannel].mR[1]; }
double GetDataRZ (int pChannel) { return mChannel[pChannel].mR[2]; }
bool Init();
bool AdjustAngle();
inline void CalculateAverageSensorFloorOffset();
bool SetupSpeechConnection();
SpeechCommands ProcessSpeech();
private:
struct SkeletonNodeInfo
{
const char* mName;
int mParentChannel;
double mDefaultT[3];
double mDefaultR[3];
double mT[3];
double mR[3];
};
int mChannelCount;
bool mInitSuccessful;
bool mOpened;
HANDLE m_hNextSkeletonEvent;
double mAverageSensorFloorOffset;
bool mSensorFloorOffsetSet;
ISpeech* mSpeech;
bool mHasVoiceControl;
public:
FBMocapJointsState* mKinectMocapJointsState;
};
#endif