Front IDILL :
TuioPoint class header modified in order to manage 3D points
TuioContainer class header modified in order to manage 3D points
TuioCursor class header modified in order to manage 3D points
TuioClient class header modified in order to manage 3D points
TuioClient class modified in order to manage 3D points
client class header modified in order to manage 3D points
client class modified in order to manage 3D points
/*
* This file is part of the TraKERS\Middleware package.
*
* (c) IRI <http://www.iri.centrepompidou.fr/>
*
* For the full copyright and license information, please view the LICENSE_MIDDLEWARE
* file that was distributed with this source code.
*/
/*
* Projet : TraKERS
* Module : MIDDLEWARE
* Sous-Module : Tracking/Postures
* Classe : CrossDetector
*
* Auteur : alexandre.bastien@iri.centrepompidou.fr
*
* Fonctionnalités : Permet de détecter si l'utilisateur a croisé les bras en X, en se basant sur
* des règles appliquées à la positions des noeuds dans le temps.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Kinect;
using Trakers.Debug;
namespace Trakers.Tracking.Postures
{
public class CrossDetector : PostureDetector
{
public CrossDetector(DebugWindow _debug) : base(_debug)
{
}
/*
* Méthode de détection du penché.
*/
public bool CheckForCross()
{
//Crée un état local afin de pouvoir analyser s'il y a une posture.
List<Joint> localState = new List<Joint>(currentState);
//La distance de référence est ici la distance entre le milieu du dos et le milieu des épaules.
refDistance = Math.Abs(localState[(int)JointType.Spine].Position.Y - localState[(int)JointType.ShoulderCenter].Position.Y);
/*if (localState[(int)JointType.HandLeft].Position.Y < localState[(int)JointType.ElbowLeft].Position.Y - refDistance / 2)
debug.onR0(true);
else
debug.onR0(false);
if (localState[(int)JointType.HandRight].Position.Y < localState[(int)JointType.ElbowRight].Position.Y - refDistance / 2)
debug.onR1(true);
else
debug.onR1(false);
if (localState[(int)JointType.ElbowLeft].Position.X + refDistance / 2 < localState[(int)JointType.ElbowRight].Position.X)
debug.onR2(true);
else
debug.onR2(false);
if (localState[(int)JointType.HandLeft].Position.X + refDistance / 2 > localState[(int)JointType.HandRight].Position.X)
debug.onR3(true);
else
debug.onR3(false);*/
//Si la position Y de la main gauche n'est pas plus haute de la distance de référence que le coude gauche
//OU si la position Y de la main droite n'est pas plus haute de la distance de référence que le coude droit
//OU si la position X du coude gauche n'est pas plus à gauche de la distance de référence/2 que le coude droit
//OU si la position X de la main gauche n'est pas plus à droite de la distance de référence/4 que la main gauche.
//Alors l'utilisateur ne croise pas les bras.
/*if (localState[(int)JointType.HandRight].Position.Y > localState[(int)JointType.ElbowRight].Position.Y + refDistance ||
localState[(int)JointType.HandRight].Position.Y > localState[(int)JointType.HipCenter].Position.Y ||
localState[(int)JointType.HandRight].Position.Y > localState[(int)JointType.WristRight].Position.Y + refDistance / 4)
return false;
return true;*/
return false;
}
}
}