//Función para controlar las acciones a realizar según el estado en que nos encontramos. public void detectar_estado(Skeleton[] skeletons) { Backdrop.Height = Window.ActualHeight; Backdrop.Width = Window.ActualWidth; if (actual == Situacion.Midiendo) { foreach (Skeleton bones in skeletons) { if (bones.Joints[JointType.WristLeft].Position.Y < bones.Joints[JointType.ElbowLeft].Position.Y + 0.02 && bones.Joints[JointType.WristLeft].Position.Y > bones.Joints[JointType.ElbowLeft].Position.Y - 0.02 && bones.Joints[JointType.ElbowLeft].Position.Y < bones.Joints[JointType.ShoulderLeft].Position.Y + 0.02 && bones.Joints[JointType.ElbowLeft].Position.Y > bones.Joints[JointType.ShoulderLeft].Position.Y - 0.02 && bones.Joints[JointType.ElbowLeft].Position.Y != 0) { tam_mastil = bones.Joints[JointType.WristLeft].Position.X - bones.Joints[JointType.ShoulderLeft].Position.X; tam_traste = tam_mastil / 8; actual = Situacion.Tocando; Midiendo.Visibility = System.Windows.Visibility.Hidden; Seleccion1.Visibility = System.Windows.Visibility.Visible; Seleccion2.Visibility = System.Windows.Visibility.Visible; } } } if (actual == Situacion.Tocando) { foreach (Skeleton bones in skeletons) { if (mano_derecha == Estado_mano_derecha.Indefinido) { //solucionP3.Content = "Indefinido"; if (bones.Joints[JointType.WristRight].Position.X < bones.Joints[JointType.ShoulderRight].Position.X && bones.Joints[JointType.WristRight].Position.X > bones.Joints[JointType.ShoulderLeft].Position.X && bones.Joints[JointType.WristRight].Position.Y > bones.Joints[JointType.HipCenter].Position.Y) { //Mano derecha más alta que la cintura y entre los dos hombros mano_derecha = Estado_mano_derecha.Inicial; //solucionP3.Content = "Inicial"; } if (bones.Joints[JointType.WristRight].Position.X < bones.Joints[JointType.ShoulderRight].Position.X && bones.Joints[JointType.WristRight].Position.X > bones.Joints[JointType.ShoulderLeft].Position.X && bones.Joints[JointType.WristRight].Position.Y < bones.Joints[JointType.HipCenter].Position.Y) { //Mano derecha más alta que la cintura y entre los dos hombros mano_derecha = Estado_mano_derecha.Fin; //solucionP3.Content = "Fin"; } } if (mano_derecha == Estado_mano_derecha.Inicial || mano_derecha == Estado_mano_derecha.Fin) { //solucionP3.Content = "Inicial"; if (bones.Joints[JointType.WristRight].Position.X < bones.Joints[JointType.ShoulderLeft].Position.X || bones.Joints[JointType.WristRight].Position.X > bones.Joints[JointType.ShoulderRight].Position.X) { //Mano derecha sale de la zona de estado inicial por cualquier lado menos por abajo (Por arriba no se puede salir) mano_derecha = Estado_mano_derecha.Indefinido; //solucionP3.Content = "Indefinido"; } else { if (mano_derecha == Estado_mano_derecha.Inicial) { if (bones.Joints[JointType.WristRight].Position.Y < bones.Joints[JointType.HipCenter].Position.Y) { //Mano derecha sale de la zona de estado inicial por abajo down = true; Sonar(bones); mano_derecha = Estado_mano_derecha.Fin; // solucionP3.Content = "Fin"; } } if (mano_derecha == Estado_mano_derecha.Fin) { if (bones.Joints[JointType.WristRight].Position.Y > bones.Joints[JointType.HipCenter].Position.Y) { //Mano derecha sale de la zona de estado inicial por abajo down = false; Sonar(bones); mano_derecha = Estado_mano_derecha.Inicial; // solucionP3.Content = "Inicial"; } } } } } } }
//Función para controlar las acciones a realizar según el estado en que nos encontramos. public void detectar_estado(Skeleton[] skeletons) { Backdrop.Height = Window.ActualHeight; Backdrop.Width = Window.ActualWidth; if (actual == Situacion.Midiendo) { foreach (Skeleton bones in skeletons) { if (bones.Joints[JointType.WristLeft].Position.Y <bones.Joints[JointType.ElbowLeft].Position.Y + 0.02 && bones.Joints[JointType.WristLeft].Position.Y> bones.Joints[JointType.ElbowLeft].Position.Y - 0.02 && bones.Joints[JointType.ElbowLeft].Position.Y <bones.Joints[JointType.ShoulderLeft].Position.Y + 0.02 && bones.Joints[JointType.ElbowLeft].Position.Y> bones.Joints[JointType.ShoulderLeft].Position.Y - 0.02 && bones.Joints[JointType.ElbowLeft].Position.Y != 0) { tam_mastil = bones.Joints[JointType.WristLeft].Position.X - bones.Joints[JointType.ShoulderLeft].Position.X; tam_traste = tam_mastil / 8; actual = Situacion.Tocando; Midiendo.Visibility = System.Windows.Visibility.Hidden; Seleccion1.Visibility = System.Windows.Visibility.Visible; Seleccion2.Visibility = System.Windows.Visibility.Visible; } } } if (actual == Situacion.Tocando) { foreach (Skeleton bones in skeletons) { if (mano_derecha == Estado_mano_derecha.Indefinido) { //solucionP3.Content = "Indefinido"; if (bones.Joints[JointType.WristRight].Position.X <bones.Joints[JointType.ShoulderRight].Position.X && bones.Joints[JointType.WristRight].Position.X> bones.Joints[JointType.ShoulderLeft].Position.X && bones.Joints[JointType.WristRight].Position.Y > bones.Joints[JointType.HipCenter].Position.Y) { //Mano derecha más alta que la cintura y entre los dos hombros mano_derecha = Estado_mano_derecha.Inicial; //solucionP3.Content = "Inicial"; } if (bones.Joints[JointType.WristRight].Position.X <bones.Joints[JointType.ShoulderRight].Position.X && bones.Joints[JointType.WristRight].Position.X> bones.Joints[JointType.ShoulderLeft].Position.X && bones.Joints[JointType.WristRight].Position.Y < bones.Joints[JointType.HipCenter].Position.Y) { //Mano derecha más alta que la cintura y entre los dos hombros mano_derecha = Estado_mano_derecha.Fin; //solucionP3.Content = "Fin"; } } if (mano_derecha == Estado_mano_derecha.Inicial || mano_derecha == Estado_mano_derecha.Fin) { //solucionP3.Content = "Inicial"; if (bones.Joints[JointType.WristRight].Position.X <bones.Joints[JointType.ShoulderLeft].Position.X || bones.Joints[JointType.WristRight].Position.X> bones.Joints[JointType.ShoulderRight].Position.X) { //Mano derecha sale de la zona de estado inicial por cualquier lado menos por abajo (Por arriba no se puede salir) mano_derecha = Estado_mano_derecha.Indefinido; //solucionP3.Content = "Indefinido"; } else { if (mano_derecha == Estado_mano_derecha.Inicial) { if (bones.Joints[JointType.WristRight].Position.Y < bones.Joints[JointType.HipCenter].Position.Y) { //Mano derecha sale de la zona de estado inicial por abajo down = true; Sonar(bones); mano_derecha = Estado_mano_derecha.Fin; // solucionP3.Content = "Fin"; } } if (mano_derecha == Estado_mano_derecha.Fin) { if (bones.Joints[JointType.WristRight].Position.Y > bones.Joints[JointType.HipCenter].Position.Y) { //Mano derecha sale de la zona de estado inicial por abajo down = false; Sonar(bones); mano_derecha = Estado_mano_derecha.Inicial; // solucionP3.Content = "Inicial"; } } } } } } }