#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) { init();} CNiJoints(NiSDK_Lib lib) { init(); sdk_lib = lib;} virtual ~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 init(void); 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 CheckJointRotation(void); public: Vector* posVect; Quaternion* rotQuat; CRingBuffer* posRing; CRingBuffer* rotRing; }; } // name space