/** * SHMIF.cpp v1.0 * * Copyright (c) 2011, Fumi.Iseki * * CSHMInterFace クラスは,主にクライアントでの共有メモリの読み出しに用いる. * */ #include "stdafx.h" #include "SHMIF.h" #include "NiJointsTool.h" // SHM Joints static std::string _SHMJointName[] = // SHMIF_JOINT_NUM { "mPelvis", "mTorso", "mChest", "mNeck", "mHead", "mSkull", "mEyeLeft", "mEyeRight", "mBustLeft", "mBustRight", "mCollarLeft", "mShoulderLeft", "mElbowLeft", "mWristLeft", "mFingertipLeft", "mCollarRight", "mShoulderRight", "mElbowRight", "mWristRight", "mFingertipRight", "mHipLeft", "mKneeLeft", "mAnkleLeft", "mFootLeft", "mToeLeft", "mHipRight", "mKneeRight", "mAnkleRight", "mFootRight", "mToeRight", "L_Hand", "R_Hand", "Expression", "Avatar" }; std::string SHMJointName(int n) { std::string str = ""; if (n>=0 && n=SHMIF_JOINT_NUM) return; if (ptrShm[n]==NULL) { if (mapHandle[n]==NULL) { std::string joint_name = SHMJointName(n); mapHandle[n] = OpenFileMappingA(FILE_MAP_READ, FALSE, joint_name.c_str()); } if (mapHandle[n]!=NULL) { ptrShm[n] = (double*)MapViewOfFile(mapHandle[n], FILE_MAP_READ, 0, 0, SHMIF_DATA_SIZE*SHMIF_CHANNEL_NUM); } } } void CSHMInterFace::closeShm(void) { closeIndexShm(); for (int i=0; i=0) { isSHMemory = TRUE; isTracking = TRUE; } else { isSHMemory = FALSE; isTracking = FALSE; isProfUpper = FALSE; } } // void CSHMInterFace::getJointStatus(double* data) { unsigned short* ptr = (unsigned short*)data; if ((*ptr)&NI_SDK_PROFILE_UPPER) { isProfUpper = TRUE; } else { isProfUpper = FALSE; } // if ((*ptr)&NI_SDK_IS_TRACKING) { isTracking = TRUE; } else { isTracking = FALSE; isProfUpper = FALSE; } } ///////////////////////////////////////////////////////////////////////// // Get Joint Data Quaternion CSHMInterFace::getAnimationRotation(std::string joint_name) { Quaternion quat(1.0, 0.0, 0.0, 0.0, 1.0); char* ptr = NULL; for (int i=0; i CSHMInterFace::getAnimationPosition(std::string joint_name) { Vector vect(0.0, 0.0, 0.0); char* ptr = NULL; for (int i=0; i CSHMInterFace::getAnimationScale(std::string joint_name) { Vector vect(0.0, 0.0, 0.0); char* ptr = NULL; for (int i=0; i