public static void Draw(Teclado teclado, Viewport3D viewport3D, Dimensiones dimTeclaBlanca, Dimensiones dimTeclaNegra) { Dictionary<string, Tecla> teclas = teclado.Teclas; int numTeclas = teclas.Count; double separacionTeclas = 0.02; double offsetX = -calcularAnchoTeclado(teclado, dimTeclaBlanca.Ancho, separacionTeclas)/2; //Dimensiones auxiliares con margen Dimensiones dimTeclaNegraConMargen = new Dimensiones(); dimTeclaNegraConMargen.Ancho = dimTeclaNegra.Ancho + separacionTeclas * 2; dimTeclaNegraConMargen.Profundidad = dimTeclaNegra.Profundidad + separacionTeclas; dimTeclaNegraConMargen.Alto = dimTeclaNegra.Alto; for (int i = 0, iTeclaBlanca = 0; i < numTeclas; i++) { Tecla tecla = teclas.ElementAt(i).Value; Tecla teclaAnterior = (i == 0) ? null : teclas.ElementAt(i - 1).Value; Tecla teclaSiguiente = (i == numTeclas - 1) ? null : teclas.ElementAt(i + 1).Value; double posicionX = offsetX + iTeclaBlanca * dimTeclaBlanca.Ancho; posicionX += iTeclaBlanca * separacionTeclas; ModelVisual3D model = null; // tecla blanca if (typeof(TeclaBlanca3D) == tecla.GetType()) { if (isTeclaBlanca(teclaAnterior)) { if (isTeclaBlanca(teclaSiguiente)) { //blanca con anterior blanca y siguiente blanca model = DrawTeclaBlancaTipoA(tecla, dimTeclaBlanca, posicionX, BrushesTeclas.Blanco); } else { //blanca con anterior blanca y siguiente negra; model = DrawTeclaBlancaTipoB(tecla, dimTeclaBlanca, dimTeclaNegraConMargen, posicionX, BrushesTeclas.Blanco); } } else { if (isTeclaBlanca(teclaSiguiente)) { //blanca con anterior negra y siguiente blanca model = DrawTeclaBlancaTipoC(tecla, dimTeclaBlanca, dimTeclaNegraConMargen, posicionX, BrushesTeclas.Blanco); } else { //blanca con anterior negra y siguiente negra; model = DrawTeclaBlancaTipoD(tecla, dimTeclaBlanca, dimTeclaNegraConMargen, posicionX, BrushesTeclas.Blanco); } } iTeclaBlanca++; } else //tecla negra { posicionX += separacionTeclas; model = DrawTeclaNegra(tecla, dimTeclaNegra, posicionX, BrushesTeclas.Negro); } viewport3D.Children.Add(model); } }
public TeclaFactory(Dimensiones dimTeclaBlanca, Dimensiones dimTeclaNegra) { if (dimTeclaBlanca.Ancho <= dimTeclaNegra.Ancho || dimTeclaBlanca.Profundidad <= dimTeclaNegra.Profundidad) { throw new System.ArgumentException("El Ancho y Profundidad de la tecla negra deben ser menores a los de la tecla blanca", "dimTeclaNegra"); } if (dimTeclaBlanca.Alto >= dimTeclaNegra.Alto) { throw new System.ArgumentException("El Alto de la tecla negra deben ser mayor al de la tecla blanca", "dimTeclaNegra"); } this.dimTeclaBlanca = dimTeclaBlanca; this.dimTeclaNegra = dimTeclaNegra; }
public static void Draw(Jugador jugador, Viewport3D viewport3D, Dimensiones dimMano) { //mano izq ModelVisual3D modelManoIzq = DrawMano(jugador, dimMano, Brushes.Blue); viewport3D.Children.Add(modelManoIzq); jugador.ManoIzquierda = (Model3DGroup)modelManoIzq.Content; //mano der ModelVisual3D modelManoDer = DrawMano(jugador, dimMano, Brushes.Green); viewport3D.Children.Add(modelManoDer); jugador.ManoDerecha = (Model3DGroup)modelManoDer.Content; }
/// <summary> /// Dibuja una tecla blanca con una tecla anterior blanca y una tecla siguiente blanca /// </summary> /// <param name="tecla"></param> /// <param name="x"></param> /// <returns></returns> private static ModelVisual3D DrawTeclaNegra(Tecla tecla, Dimensiones dimTeclaNegra, double x, Brush brush) { x = x - dimTeclaNegra.Ancho / 2; Point3D p0 = new Point3D(x , 0, 0); Point3D p1 = new Point3D(x + dimTeclaNegra.Ancho, 0, 0); Point3D p2 = new Point3D(x + dimTeclaNegra.Ancho, 0, dimTeclaNegra.Profundidad); Point3D p3 = new Point3D(x, 0, dimTeclaNegra.Profundidad); Point3D p4 = new Point3D(x, dimTeclaNegra.Alto, 0); Point3D p5 = new Point3D(x + dimTeclaNegra.Ancho, dimTeclaNegra.Alto, 0); Point3D p6 = new Point3D(x + dimTeclaNegra.Ancho, dimTeclaNegra.Alto, dimTeclaNegra.Profundidad); Point3D p7 = new Point3D(x, dimTeclaNegra.Alto, dimTeclaNegra.Profundidad); //Modelo List<Point3D> puntosModelo = new List<Point3D>(); puntosModelo.Add(p0); puntosModelo.Add(p1); puntosModelo.Add(p2); puntosModelo.Add(p3); puntosModelo.Add(p4); puntosModelo.Add(p5); puntosModelo.Add(p6); puntosModelo.Add(p7); Model3DGroup teclaModel3D = new Model3DGroup(); teclaModel3D.Children.Add(DrawCubeModel(x, puntosModelo, brush)); ModelVisual3D model = new ModelVisual3D(); model.Content = teclaModel3D; tecla.TeclaModel3D = teclaModel3D; return model; }
/// <summary> /// Dibuja una tecla blanca con una tecla anterior negra y una tecla siguiente negra /// </summary> /// <param name="tecla"></param> /// <param name="x"></param> /// <param name="dimTeclaBlanca"></param> /// <param name="dimTeclaNegra"></param> /// <returns></returns> private static ModelVisual3D DrawTeclaBlancaTipoD(Tecla tecla, Dimensiones dimTeclaBlanca, Dimensiones dimTeclaNegra, double x, Brush brush) { double mitadAnchoTeclaNegra = dimTeclaNegra.Ancho / 2; double diferenciaAncho = dimTeclaBlanca.Ancho - mitadAnchoTeclaNegra; //Puntos capa inferior Point3D p0 = new Point3D(x + mitadAnchoTeclaNegra, 0, 0); Point3D p1 = new Point3D(x + diferenciaAncho, 0, 0); Point3D p2 = new Point3D(x + diferenciaAncho, 0, dimTeclaNegra.Profundidad); Point3D p3 = new Point3D(x + dimTeclaBlanca.Ancho, 0, dimTeclaNegra.Profundidad); Point3D p4 = new Point3D(x + dimTeclaBlanca.Ancho, 0, dimTeclaBlanca.Profundidad); Point3D p5 = new Point3D(x, 0, dimTeclaBlanca.Profundidad); Point3D p6 = new Point3D(x, 0, dimTeclaNegra.Profundidad); Point3D p7 = new Point3D(x + mitadAnchoTeclaNegra, 0, dimTeclaNegra.Profundidad); //Puntos capa superior Point3D p8 = new Point3D(x + mitadAnchoTeclaNegra, dimTeclaBlanca.Alto, 0); Point3D p9 = new Point3D(x + diferenciaAncho, dimTeclaBlanca.Alto, 0); Point3D p10 = new Point3D(x + diferenciaAncho, dimTeclaBlanca.Alto, dimTeclaNegra.Profundidad); Point3D p11 = new Point3D(x + dimTeclaBlanca.Ancho, dimTeclaBlanca.Alto, dimTeclaNegra.Profundidad); Point3D p12 = new Point3D(x + dimTeclaBlanca.Ancho, dimTeclaBlanca.Alto, dimTeclaBlanca.Profundidad); Point3D p13 = new Point3D(x, dimTeclaBlanca.Alto, dimTeclaBlanca.Profundidad); Point3D p14 = new Point3D(x, dimTeclaBlanca.Alto, dimTeclaNegra.Profundidad); Point3D p15 = new Point3D(x + mitadAnchoTeclaNegra, dimTeclaBlanca.Alto, dimTeclaNegra.Profundidad); //Modelo trasero List<Point3D> puntosModeloTrasero = new List<Point3D>(); puntosModeloTrasero.Add(p0); puntosModeloTrasero.Add(p1); puntosModeloTrasero.Add(p2); puntosModeloTrasero.Add(p7); puntosModeloTrasero.Add(p8); puntosModeloTrasero.Add(p9); puntosModeloTrasero.Add(p10); puntosModeloTrasero.Add(p15); Model3DGroup backModel3D = DrawCubeModel(x, puntosModeloTrasero, brush); //Modelo delantero List<Point3D> puntosModeloDelantero = new List<Point3D>(); puntosModeloDelantero.Add(p6); puntosModeloDelantero.Add(p3); puntosModeloDelantero.Add(p4); puntosModeloDelantero.Add(p5); puntosModeloDelantero.Add(p14); puntosModeloDelantero.Add(p11); puntosModeloDelantero.Add(p12); puntosModeloDelantero.Add(p13); Model3DGroup frontModel3D = DrawCubeModel(x, puntosModeloDelantero, brush); //Modelo completo Model3DGroup teclaModel3D = new Model3DGroup(); teclaModel3D.Children.Add(backModel3D); teclaModel3D.Children.Add(frontModel3D); ModelVisual3D model = new ModelVisual3D(); model.Content = teclaModel3D; tecla.TeclaModel3D = teclaModel3D; return model; }
private void Window_Loaded(object sender, RoutedEventArgs e) { // Se ponen dimensiones menores al teclado (x= -14 +14, y= -2 +2, z= 0-12) factorConversion = new Dimensiones(12, 1.5, 12); juego.SetIniciarSesionCompletedAction(delegate() { conectarWS.Content = "Desconectar"; }); juego.SetFinalizarSesionCompletedAction(delegate(){ conectarWS.Content = "Conectar"; }); juego.IniciarSesion(); // Leer el angulo de elavación actual del kinect elevationAngleSlider.Value = Kinect.ElevationAngle; // Establecer un Action para cuando un frame de video esta listo Kinect.BitmapSourceActionForVideo = (Action<BitmapSource>)delegate(BitmapSource bitmapSource) { videoImage.Source = bitmapSource; }; // Establecer un Action para cuando un frame de profundidad esta listo Kinect.BitmapSourceActionForDepth = (Action<BitmapSource>)delegate(BitmapSource bitmapSource) { depthImage.Source = bitmapSource; }; //Establecer un Action para cuando el skeleton este listo Kinect.TrackedUsersActionForSkeleton = (Action<List<KinectUser>>)delegate(List<KinectUser> kinectUsers) { foreach (KinectUser kinectUser in kinectUsers) { juego.UpdatePosition(kinectUser.TrackingID, escalarPosicion(kinectUser.HandLeft), escalarPosicion(kinectUser.HandRight)); } }; //Establecer un Action para cuando se detecta un usuario nuevo Kinect.AddKinectUserAction = (Action<KinectUser>)delegate(KinectUser kinectUser) { juego.addJugador(kinectUser.TrackingID); }; //Establecer un Action para cuando se deja de detectar un usuario nuevo Kinect.RemoveKinectUserAction = (Action<KinectUser>)delegate(KinectUser kinectUser) { juego.removeJugador(kinectUser.TrackingID); }; }
private static ModelVisual3D DrawMano(Jugador jugador, Dimensiones dimMano, Brush brush) { Point3D p0 = new Point3D(0, 0, 0); Point3D p1 = new Point3D(dimMano.Ancho, 0, 0); Point3D p2 = new Point3D(dimMano.Ancho, 0, dimMano.Profundidad); Point3D p3 = new Point3D(0, 0, dimMano.Profundidad); Point3D p4 = new Point3D(0, dimMano.Alto, 0); Point3D p5 = new Point3D(dimMano.Ancho, dimMano.Alto, 0); Point3D p6 = new Point3D(dimMano.Ancho, dimMano.Alto, dimMano.Profundidad); Point3D p7 = new Point3D(0, dimMano.Alto, dimMano.Profundidad); /* //Modelo List<Point3D> puntosModelo = new List<Point3D>(); puntosModelo.Add(p0); puntosModelo.Add(p1); puntosModelo.Add(p2); puntosModelo.Add(p3); puntosModelo.Add(p4); puntosModelo.Add(p5); puntosModelo.Add(p6); puntosModelo.Add(p7); Model3DGroup manoModel3D = new Model3DGroup(); manoModel3D.Children.Add(DrawCubeModel(0, puntosModelo, brush)); ModelVisual3D modelVisual3D = new ModelVisual3D(); modelVisual3D.Content = manoModel3D; return modelVisual3D; */ Model3DGroup cube = new Model3DGroup(); //front side triangles cube.Children.Add(CreateTriangleModel(p3, p2, p6, brush)); cube.Children.Add(CreateTriangleModel(p3, p6, p7, brush)); //right side triangles cube.Children.Add(CreateTriangleModel(p2, p1, p5, brush)); cube.Children.Add(CreateTriangleModel(p2, p5, p6, brush)); //back side triangles cube.Children.Add(CreateTriangleModel(p1, p0, p4, brush)); cube.Children.Add(CreateTriangleModel(p1, p4, p5, brush)); //left side triangles cube.Children.Add(CreateTriangleModel(p0, p3, p7, brush)); cube.Children.Add(CreateTriangleModel(p0, p7, p4, brush)); //top side triangles cube.Children.Add(CreateTriangleModel(p7, p6, p5, brush)); cube.Children.Add(CreateTriangleModel(p7, p5, p4, brush)); //bottom side triangles cube.Children.Add(CreateTriangleModel(p2, p3, p0, brush)); cube.Children.Add(CreateTriangleModel(p2, p0, p1, brush)); ModelVisual3D model = new ModelVisual3D(); model.Content = cube; return model; /* Model3DGroup cube = new Model3DGroup(); cube.Children.Add(CreateTriangleModel(p2, p1, p0, brush)); cube.Children.Add(CreateTriangleModel(p2, p0, p3, brush)); ModelVisual3D model = new ModelVisual3D(); model.Content = cube; return model;*/ }