void updateUserState(const nite::UserData& user, uint64_t ts) { if (user.isNew()) { USER_MESSAGE("New"); } else if (user.isVisible() && !g_visibleUsers[user.getId()]) printf("[%08" PRIu64 "] User #%d:\tVisible\n", ts, user.getId()); else if (!user.isVisible() && g_visibleUsers[user.getId()]) printf("[%08" PRIu64 "] User #%d:\tOut of Scene\n", ts, user.getId()); else if (user.isLost()) { USER_MESSAGE("Lost"); } g_visibleUsers[user.getId()] = user.isVisible(); if(g_skeletonStates[user.getId()] != user.getSkeleton().getState()) { switch(g_skeletonStates[user.getId()] = user.getSkeleton().getState()) { case nite::SKELETON_NONE: USER_MESSAGE("Stopped tracking.") break; case nite::SKELETON_CALIBRATING: USER_MESSAGE("Calibrating...") break; case nite::SKELETON_TRACKED: USER_MESSAGE("Tracking!") break; case nite::SKELETON_CALIBRATION_ERROR_NOT_IN_POSE: case nite::SKELETON_CALIBRATION_ERROR_HANDS: case nite::SKELETON_CALIBRATION_ERROR_LEGS: case nite::SKELETON_CALIBRATION_ERROR_HEAD: case nite::SKELETON_CALIBRATION_ERROR_TORSO: USER_MESSAGE("Calibration Failed... :-|") break; } } }
void updateUserState(const nite::UserData& user, unsigned long long ts) { if (user.isNew()) USER_MESSAGE("New") else if (user.isVisible() && !g_visibleUsers[user.getId()]) USER_MESSAGE("Visible") else if (!user.isVisible() && g_visibleUsers[user.getId()]) USER_MESSAGE("Out of Scene") else if (user.isLost()) USER_MESSAGE("Lost") g_visibleUsers[user.getId()] = user.isVisible(); if(g_skeletonStates[user.getId()] != user.getSkeleton().getState()) { switch(g_skeletonStates[user.getId()] = user.getSkeleton().getState()) { case nite::SKELETON_NONE: USER_MESSAGE("Stopped tracking.") break; case nite::SKELETON_CALIBRATING: USER_MESSAGE("Calibrating...") break; case nite::SKELETON_TRACKED: USER_MESSAGE("Tracking!") break; case nite::SKELETON_CALIBRATION_ERROR_NOT_IN_POSE: case nite::SKELETON_CALIBRATION_ERROR_HANDS: case nite::SKELETON_CALIBRATION_ERROR_LEGS: case nite::SKELETON_CALIBRATION_ERROR_HEAD: case nite::SKELETON_CALIBRATION_ERROR_TORSO: USER_MESSAGE("Calibration Failed... :-|") break; } } }
void User::updateUserData(const nite::UserData& data) { userdata = data; for (int i = 0; i < NITE_JOINT_COUNT; i++) { const nite::SkeletonJoint &o = data.getSkeleton().getJoint((nite::JointType)i); joints[i].updateJointData(o); } stringstream ss; ss << "[" << data.getId() << "]" << endl; ss << (data.isVisible() ? "Visible" : "Out of Scene") << endl;; switch (data.getSkeleton().getState()) { case nite::SKELETON_NONE: ss << "Stopped tracking."; break; case nite::SKELETON_CALIBRATING: ss << "Calibrating..."; break; case nite::SKELETON_TRACKED: ss << "Tracking!"; break; case nite::SKELETON_CALIBRATION_ERROR_NOT_IN_POSE: case nite::SKELETON_CALIBRATION_ERROR_HANDS: case nite::SKELETON_CALIBRATION_ERROR_LEGS: case nite::SKELETON_CALIBRATION_ERROR_HEAD: case nite::SKELETON_CALIBRATION_ERROR_TORSO: ss << "Calibration Failed... :-|"; break; } status_string = ss.str(); const nite::Point3f& pos = userdata.getCenterOfMass(); center_of_mass.set(pos.x, pos.y, -pos.z); Joint &torso = joints[nite::JOINT_TORSO]; activity += (torso.getPosition().distance(center_of_bone) - activity) * 0.1; center_of_bone = torso.getPosition(); }
/** * update and event out on state of user and skeleton tracking */ void updateUserState(const nite::UserData& user) { if (user.isNew()) { eventIDToSend = NEW_USER; async.data = (void*) &eventIDToSend; uv_async_send(&async); } else if (!isUserVisible && user.isVisible() && user.getId() == 1) { isUserVisible = 1; eventIDToSend = USER_IS_VISIBLE; async.data = (void*) &eventIDToSend; uv_async_send(&async); } else if (isUserVisible && !user.isVisible() && user.getId() == 1) { isUserVisible = 0; eventIDToSend = USER_IS_OUT_OF_SCENE; async.data = (void*) &eventIDToSend; uv_async_send(&async); } g_visibleUsers[user.getId()] = user.isVisible(); if(g_skeletonStates[user.getId()] != user.getSkeleton().getState()) { switch(g_skeletonStates[user.getId()] = user.getSkeleton().getState()) { case nite::SKELETON_NONE: if (isSkeletonTracking) { isSkeletonTracking = false; isSkeletonCalibrating = false; eventIDToSend = SKELETON_STOPPED_TRACKING; async.data = (void*) &eventIDToSend; uv_async_send(&async); } break; case nite::SKELETON_CALIBRATING: if (!isSkeletonCalibrating) { isSkeletonCalibrating = true; eventIDToSend = SKELETON_CALIBRATING; async.data = (void*) &eventIDToSend; uv_async_send(&async); } break; case nite::SKELETON_TRACKED: if (!isSkeletonTracking) { isSkeletonTracking = true; isSkeletonCalibrating = false; eventIDToSend = SKELETON_TRACKING; async.data = (void*) &eventIDToSend; uv_async_send(&async); } break; case nite::SKELETON_CALIBRATION_ERROR_NOT_IN_POSE: case nite::SKELETON_CALIBRATION_ERROR_HANDS: case nite::SKELETON_CALIBRATION_ERROR_LEGS: case nite::SKELETON_CALIBRATION_ERROR_HEAD: case nite::SKELETON_CALIBRATION_ERROR_TORSO: eventIDToSend = SKELETON_CALIBRATION_FAILED; async.data = (void*) &eventIDToSend; uv_async_send(&async); isSkeletonTracking = false; isSkeletonCalibrating = false; break; } } }