예제 #1
0
 private void Form1_Load(object sender, EventArgs e) //Interfaz cargando
 {
     PB_Lienzo2.Parent   = PB_Lienzo;                //Lienzo 2 debe ser hijo de Lienzo para que pueda aplicarse transparencia sobre este último
     PB_Lienzo2.Location = new Point(0, 0);          //Se coloca el lienzo 2 en la posicion (0,0) sobre el Lienzo 1, quedando uno sobre otro (esto se debe a que se ha hecho uno hijo del otro)
     g = PB_Lienzo2.CreateGraphics();                //Se asigna el lienzo2 como fondo para la herramienta de dibujo
     PB_Lienzo2.Image     = new Bitmap(640, 480);    //Se debe crear una imagen en el lienzo para poder mantener cada objeto dibujado
     CB_TAM.SelectedIndex = 5;                       //Se selecciona un valor de tamaño por defecto de 10
     actualizar_jugador(1);                          //Configura la interfaz para adaptarla al jugador 1
     reconect();                                     //Inicializa el sensor Kinect
 }
예제 #2
0
 private void PB_Lienzo2_MouseMove(object sender, MouseEventArgs e) //Esta función dibuja usando el ratón
 {
     if (click)                                                     //Si se esta presionando el botón del ratón se dibuja
     {
         //se crean variables locales de color y tamaño a un valro por defecto
         Color color_elejido = Color.Black;
         int   grosor        = 24;
         if (jugador_sel == 1)   //Si el jugador seleccionado es el 1
         {
             //Se asiganan a las anteriores variables los valores de color y tamaño almacenados para el jugador 1
             color_elejido = B_Selec1.BackColor;
             grosor        = tam1;
         }
         else                    //Si el jugador seleccionado es el 2
         //Se asiganan a las anteriores variables los valores de color y tamaño almacenados para el jugador 1
         {
             color_elejido = B_Selec2.BackColor;
             grosor        = tam2;
         }
         //se crean variables X e Y que corresponden a la posición del cursor sobre el Lienzo de dibujo. (Es necesario mapearlo segun el tamaño del Lienzo)
         int x = (int)(PB_Lienzo2.PointToClient(Cursor.Position).X *(640.0 / (float)PB_Lienzo2.Width));
         int y = (int)(PB_Lienzo2.PointToClient(Cursor.Position).Y *(480.0 / (float)PB_Lienzo2.Height));
         //Se dibuja un dirculo en la posición obtenida (se usa "Graphics.FromImage" de forma que se alamacene el dibujo anterior y se dibuje encima de este. De esta forma no se elimina lo dibujado)
         Graphics.FromImage(PB_Lienzo2.Image).FillEllipse(new SolidBrush(color_elejido), x - (grosor / 2), y - (grosor / 2), grosor, grosor);
         if (antx[6] > 0 || anty[6] > 0)     //Si existe un punto anterior registrado
         {
             //Se dibuja una linea entre el punto anterior y el actual. De esta forma se suaviza el dibujo
             Graphics.FromImage(PB_Lienzo2.Image).DrawLine(new Pen(color_elejido, grosor), x, y, antx[6], anty[6]);
         }
         PB_Lienzo2.Invalidate();        //necesario para que no se refresque el dibujo y no se borre
         //Finalmente se guarda el valor actual como ultimo punto registrado
         antx[6] = x;
         anty[6] = y;
     }
     else
     {
         //si no se esta pulsando el ratón se borra el punto anterior
         antx[6] = 0;
         anty[6] = 0;
     }
 }
예제 #3
0
        private void SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            //se comprueban todos los comandos de voz registrados para ver cual coincide con el captado pro la kinect
            const double ConfidenceThreshold = 0.3;

            if (e.Result.Confidence >= ConfidenceThreshold)
            {
                switch (e.Result.Semantics.Value.ToString())
                {
                case "PEQUEÑO":
                    //se ha seleccionado el tamaño de pincel pequeño
                    CB_TAM.SelectedIndex = 1;       //cambia el combobox al valor en la posicion 1
                    break;

                case "MEDIANO":
                    //se ha seleccionado el tamaño de pincel mediano
                    CB_TAM.SelectedIndex = 5;       //cambia el combobox al valor en la posicion 5
                    break;

                case "GRANDE":
                    //se ha seleccionado el tamaño de pincel grande
                    CB_TAM.SelectedIndex = 8;       //cambia el combobox al valor en la posicion 8
                    break;

                case "C_ROJO":
                    //se ha seleccionado el color de pincel rojo
                    if (jugador_sel == 1)               //si esta seleccionado el jugador 1
                    {
                        B_Selec1.BackColor = Color.Red; //se actualiza el color del jugador 1
                    }
                    else
                    {
                        B_Selec2.BackColor = Color.Red;     //se actualiza el color del jugador 2
                    }
                    break;

                case "C_NEGRO":
                    //se ha seleccionado el color de pincel negro
                    if (jugador_sel == 1)                 //si esta seleccionado el jugador 1
                    {
                        B_Selec1.BackColor = Color.Black; //se actualiza el color del jugador 1
                    }
                    else
                    {
                        B_Selec2.BackColor = Color.Black;       //se actualiza el color del jugador 2
                    }
                    break;

                case "C_BLANCO":
                    //se ha seleccionado el color de pincel blanco
                    if (jugador_sel == 1)                 //si esta seleccionado el jugador 1
                    {
                        B_Selec1.BackColor = Color.White; //se actualiza el color del jugador 1
                    }
                    else
                    {
                        B_Selec2.BackColor = Color.White;       //se actualiza el color del jugador 2
                    }
                    break;

                case "C_GRIS":
                    //se ha seleccionado el color de pincel gris
                    if (jugador_sel == 1)                //si esta seleccionado el jugador 1
                    {
                        B_Selec1.BackColor = Color.Gray; //se actualiza el color del jugador 1
                    }
                    else
                    {
                        B_Selec2.BackColor = Color.Gray;        //se actualiza el color del jugador 2
                    }
                    break;

                case "C_NARANJA":
                    //se ha seleccionado el color de pincel naranja
                    if (jugador_sel == 1)                  //si esta seleccionado el jugador 1
                    {
                        B_Selec1.BackColor = Color.Orange; //se actualiza el color del jugador 1
                    }
                    else
                    {
                        B_Selec2.BackColor = Color.Orange;      //se actualiza el color del jugador 2
                    }
                    break;

                case "C_ROSA":
                    //se ha seleccionado el color de pincel rosa
                    if (jugador_sel == 1)                //si esta seleccionado el jugador 1
                    {
                        B_Selec1.BackColor = Color.Pink; //se actualiza el color del jugador 1
                    }
                    else
                    {
                        B_Selec2.BackColor = Color.Pink;        //se actualiza el color del jugador 2
                    }
                    break;

                case "C_AMARILLO":
                    //se ha seleccionado el color de pincel amarillo
                    if (jugador_sel == 1)                  //si esta seleccionado el jugador 1
                    {
                        B_Selec1.BackColor = Color.Yellow; //se actualiza el color del jugador 1
                    }
                    else
                    {
                        B_Selec2.BackColor = Color.Yellow;      //se actualiza el color del jugador 2
                    }
                    break;

                case "C_AZUL":
                    //se ha seleccionado el color de pincel azul
                    if (jugador_sel == 1)                //si esta seleccionado el jugador 1
                    {
                        B_Selec1.BackColor = Color.Blue; //se actualiza el color del jugador 1
                    }
                    else
                    {
                        B_Selec2.BackColor = Color.Blue;        //se actualiza el color del jugador 2
                    }
                    break;

                case "C_VERDE":
                    //se ha seleccionado el color de pincel verde
                    if (jugador_sel == 1)                 //si esta seleccionado el jugador 1
                    {
                        B_Selec1.BackColor = Color.Green; //se actualiza el color del jugador 1
                    }
                    else
                    {
                        B_Selec2.BackColor = Color.Green;       //se actualiza el color del jugador 2
                    }
                    break;

                case "C_MORADO":
                    //se ha seleccionado el color de pincel morado
                    if (jugador_sel == 1)                  //si esta seleccionado el jugador 1
                    {
                        B_Selec1.BackColor = Color.Purple; //se actualiza el color del jugador 1
                    }
                    else
                    {
                        B_Selec2.BackColor = Color.Purple;      //se actualiza el color del jugador 2
                    }
                    break;

                case "FOTO":
                    //se ha seleccionado hacer una foto
                    photo();
                    break;

                case "BORRAR":
                    //se ha seleccionado hacer borrar
                    PB_Lienzo2.Invalidate();
                    PB_Lienzo2.Image = new Bitmap(640, 480);        //Crea un nuevo mapa de bits sobre el que dibujar (borrando todo lo anterior)
                    break;

                case "AYUDA":
                    //se ha seleccionado ayuda
                    Ayuda.Visible = true;       //hace visible un dialogo de ayuda
                    break;

                case "CERRAR":
                    //se ha seleccionado cerrar la ayuda
                    Ayuda.Visible = false;      //hace invisible el dialogo de ayuda
                    break;

                case "P1":
                    //jugador 1 (círculo) seleccionado
                    actualizar_jugador(1);      //configura todos los controles para indicar que se ha seleccionado el juagador 1
                    break;

                case "P2":
                    //jugador 2 (cuadrado) seleccionado
                    actualizar_jugador(2);      //configura todos los controles para indicar que se ha seleccionado el juagador 1
                    break;
                }
            }
        }
예제 #4
0
 private void PB_Lienzo2_Resize(object sender, EventArgs e)
 {
     //Si el lienzo cambia de tamaño se debe asignar a la herramienta grafica el lienzo de nuevo (actualizando el tamaño del area de dibujo)
     g = PB_Lienzo2.CreateGraphics();
 }
예제 #5
0
 private void Borrador_Click(object sender, EventArgs e)
 {
     //Si se pulsa el boton borrar
     PB_Lienzo2.Invalidate();
     PB_Lienzo2.Image = new Bitmap(640, 480); //Crea un nuevo mapa de bits sobre el que dibujar (borrando todo lo anterior)
 }
예제 #6
0
 private void PB_Lienzo_SizeChanged(object sender, EventArgs e)
 {
     //Si el lienzo sobre el que se dibuja cambia de tamaño se debe refrescar el dibujo (Lienzo 2)
     PB_Lienzo2.Refresh();
 }
예제 #7
0
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) // Nueva transmision de datos de los esqueletos
        {
            esqueletos = new Skeleton[0];                                                   //Elimina esqueletos anteriores
            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    //Si se han detectado esqueletos se asiganan a la variable "esqueletos"
                    esqueletos = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(esqueletos);
                }
            }
            if (esqueletos.Length != 0)             //Si hay algun esqueleto detectado
            {
                Color color_elejido = Color.Black;  //Se crea una variable común (color_elegido) para disminuir codigo
                int   grosor        = 10;           //Se crea una variable común (grosor) para disminuir codigo
                busca();                            //busca cambios con respecto a la posicion de los esqueletos anteriormente
                for (int i = 0; i < esqueletos.Length; i++)
                {
                    //Se recorre cada esqueleto y se guardan las posiciones de la mano derecha mapeadas sobre la camara de video
                    int x = (int)(sensor.CoordinateMapper.MapSkeletonPointToDepthPoint(esqueletos[i].Joints[JointType.HandRight].Position, DepthImageFormat.Resolution640x480Fps30).X);
                    int y = (int)(sensor.CoordinateMapper.MapSkeletonPointToDepthPoint(esqueletos[i].Joints[JointType.HandRight].Position, DepthImageFormat.Resolution640x480Fps30).Y);

                    if (x != 0 && y != 0)                       //Si X e Y no son 0 (ha encontrado la posición de la mano)
                    {
                        if (esq[0] == i)                        //Si el esqueleto que se esta procesando es el primero (posicion 0), es porque es el jugador 1
                        {
                            color_elejido = B_Selec1.BackColor; //Se asigna el color del jugador 1
                            grosor        = tam1;               //Se asigna el grosor del pincel del jugador 1
                        }
                        else if (esq[1] == i)                   //Si el esqueleto que se esta procesando es el Segundo (posicion 1), es porque es el jugador 2
                        {
                            color_elejido = B_Selec2.BackColor; //Se asigna el color del jugador 2
                            grosor        = tam2;               //Se asigna el grosor del pincel del jugador 2
                        }
                        //Si se detecta una distancia en el eje Z, entre la mano y el centro de los hombros, superior a tolerancia, se debera dibujar
                        if (esqueletos[i].Joints[JointType.ShoulderCenter].Position.Z - esqueletos[i].Joints[JointType.HandRight].Position.Z > tolerancia)
                        {
                            //como se esta dibujando se debe pintar en el lienzo un punto (elipse) en la posicion de la mano.
                            Graphics.FromImage(PB_Lienzo2.Image).FillEllipse(new SolidBrush(color_elejido), x - (grosor / 2), y - (grosor / 2), grosor, grosor);
                            if (antx[i] > 0 || anty[i] > 0) //Si existe un punto anterior, se dibuja entre este y el actual una linea recta. (Así se evitan saltos y el dibujo se ve mas fluido)
                            //se usa "Graphics.FromImage" para evitar que se limpie el dibujo al refrescar el lienzo.
                            {
                                Graphics.FromImage(PB_Lienzo2.Image).DrawLine(new Pen(color_elejido, grosor), x, y, antx[i], anty[i]);
                            }
                            PB_Lienzo2.Invalidate();
                            //Ademas se actualizan los valores anteriores con la posicion actual
                            antx[i] = x;
                            anty[i] = y;
                        }
                        else
                        {                    //Si no, se dibujará un objeto para marcar la posición que desaparecera al refrescar la pantalla
                            if (esq[0] == i) // si es el jugador 1 dibujara un ciruclo
                            {
                                g.DrawEllipse(new Pen(color_elejido, 12), new Rectangle((int)((x * ((float)PB_Lienzo2.Width / 640))), (int)((y * (float)PB_Lienzo2.Height / 480)), 50, 50));
                            }
                            else
                            {               // si es el jugador 2 dibujara un rectangulo
                                g.DrawRectangle(new Pen(color_elejido, 12), new Rectangle((int)((x * ((float)PB_Lienzo2.Width / 640))), (int)((y * (float)PB_Lienzo2.Height / 480)), 50, 50));
                            }
                            //Ademas como se ha dejado de dibujar, el punto guardado como anterior se resetea.
                            antx[i] = 0;
                            anty[i] = 0;
                        }
                    }
                }
            }
        }