#pragma once #include "Vector.h" #include "Rotation.h" #include "RingBuffer.h" #include "ParameterSet.h" #include "NiTool.h" #define NI_MVAV_MAX_NUM 15 // should be smaller than NI_RING_BUFFER_SIZE in NiToolWin.h #define NI_MVAV_EXP_DEC 2 // weight of last data is 10^(-THIS) when use EMA namespace jbxwl { using namespace jbxl; class CNiJoints { public: CNiJoints(void); ~CNiJoints(void) {} public: NiSDK_Lib sdk_lib; NiMvAvType mvav_type; double mvav_weight[NI_MVAV_MAX_NUM]; int mvav_num; float confidence; double noise_min; // double bone_length_min; // double bone_length_max; public: void setParameter(CParameterSet param); void init_mvav_weight(void); // Smoothing void PosMovingAverage(NiSDK_Lib sdk_lib); void RotMovingAverage(NiSDK_Lib sdk_lib); // Constraints void PosVibNoiseCanceler(void); void RotVibNoiseCanceler(void); void CheckGroundLevel(double ground_level); void CheckBoneLength(void); void CheckBoneRotation(void); public: Vector* posVect; Quaternion* rotQuat; CRingBuffer* posRing; CRingBuffer* rotRing; }; } // name space