Beispiel #1
0
 protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
 {
     if (e.Key == Key.H)
     {
         Utilitario.AjudaTeclado();
     }
     else if (e.Key == Key.Escape)
     {
         Exit();
     }
     else if (e.Key == Key.E) // Esquerda
     {
         camera.goEsquerda();
     }
     else if (e.Key == Key.D) // Direita
     {
         camera.goDireita();
     }
     else if (e.Key == Key.C) //Cima
     {
         camera.goCima();
     }
     else if (e.Key == Key.B) //Baixo
     {
         camera.goBaixo();
     }
     else if (e.Key == Key.I) //Zoom in
     {
         camera.goZoomIn();
     }
     else if (e.Key == Key.O) //Zoom Out
     {
         camera.goZoomOut();
     }
     else
     {
         Console.WriteLine(" __ Tecla não implementada.");
     }
 }
Beispiel #2
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            camera.xmin = 0; camera.xmax = 600; camera.ymin = 0; camera.ymax = 600;

            Console.WriteLine(" --- Ajuda / Teclas: ");
            Console.WriteLine(" [  H     ] mostra teclas usadas. ");

            objetoId   = Utilitario.charProximo(objetoId);
            objetoNovo = new Poligono(objetoId, null);
            objetosLista.Add(objetoNovo);
            objetoNovo.PontosAdicionar(new Ponto4D(50, 50));
            objetoNovo.PontosAdicionar(new Ponto4D(350, 50));
            objetoNovo.PontosAdicionar(new Ponto4D(350, 350));
            objetoNovo.PontosAdicionar(new Ponto4D(50, 350));
            objetoSelecionado = objetoNovo;
            objetoNovo        = null;

#if CG_Privado
            objetoId      = Utilitario.charProximo(objetoId);
            obj_Retangulo = new Retangulo(objetoId, null, new Ponto4D(50, 50, 0), new Ponto4D(150, 150, 0));
            obj_Retangulo.ObjetoCor.CorR = 255; obj_Retangulo.ObjetoCor.CorG = 0; obj_Retangulo.ObjetoCor.CorB = 255;
            objetosLista.Add(obj_Retangulo);
            objetoSelecionado = obj_Retangulo;

            objetoId    = Utilitario.charProximo(objetoId);
            obj_SegReta = new Privado_SegReta(objetoId, null, new Ponto4D(50, 150), new Ponto4D(150, 250));
            obj_SegReta.ObjetoCor.CorR = 255; obj_SegReta.ObjetoCor.CorG = 99; obj_SegReta.ObjetoCor.CorB = 71;
            objetosLista.Add(obj_SegReta);
            objetoSelecionado = obj_SegReta;

            objetoId    = Utilitario.charProximo(objetoId);
            obj_Circulo = new Privado_Circulo(objetoId, null, new Ponto4D(100, 300), 50);
            obj_Circulo.ObjetoCor.CorR = 177; obj_Circulo.ObjetoCor.CorG = 166; obj_Circulo.ObjetoCor.CorB = 136;
            objetosLista.Add(obj_Circulo);
            objetoSelecionado = obj_Circulo;
#endif
            GL.ClearColor(0.5f, 0.5f, 0.5f, 1.0f);
        }
Beispiel #3
0
 protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
 {
     if (e.Key == Key.H)
     {
         Utilitario.AjudaTeclado();
     }
     else if (e.Key == Key.Escape)
     {
         Exit();
     }
     else if (e.Key == Key.W)
     {
         Console.WriteLine("--- Objetos / Pontos: ");
         for (var i = 0; i < objetosLista.Count; i++)
         {
             Console.WriteLine(objetosLista[i]);
         }
     }
     else
     {
         Console.WriteLine(" __ Tecla não implementada.");
     }
 }
Beispiel #4
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            Console.WriteLine(" --- Ajuda / Teclas: ");
            Console.WriteLine(" [  H     ] mostra teclas usadas. ");

            objetoId = Utilitario.charProximo(objetoId);
            obj_Cubo = new Cubo(objetoId, null);
            objetosLista.Add(obj_Cubo);
            objetoSelecionado = obj_Cubo;

#if CG_Privado  //FIXME: arrumar os outros objetos
            objetoId     = Utilitario.charProximo(objetoId);
            obj_Cilindro = new Cilindro(objetoId, null);
            obj_Cilindro.ObjetoCor.CorR = 177; obj_Cilindro.ObjetoCor.CorG = 166; obj_Cilindro.ObjetoCor.CorB = 136;
            objetosLista.Add(obj_Cilindro);
            obj_Cilindro.Translacao(2, 'x');

            objetoId   = Utilitario.charProximo(objetoId);
            obj_Esfera = new Esfera(objetoId, null);
            obj_Esfera.ObjetoCor.CorR = 177; obj_Esfera.ObjetoCor.CorG = 166; obj_Esfera.ObjetoCor.CorB = 136;
            objetosLista.Add(obj_Esfera);
            obj_Esfera.Translacao(4, 'x');

            objetoId = Utilitario.charProximo(objetoId);
            obj_Cone = new Cone(objetoId, null);
            obj_Cone.ObjetoCor.CorR = 177; obj_Cone.ObjetoCor.CorG = 166; obj_Cone.ObjetoCor.CorB = 136;
            objetosLista.Add(obj_Cone);
            obj_Cone.Translacao(6, 'x');
#endif

            GL.ClearColor(0.5f, 0.5f, 0.5f, 1.0f);
            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.CullFace);
        }
Beispiel #5
0
 protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
 {
     if (e.Key == Key.H)
     {
         Utilitario.AjudaTeclado();
     }
     else if (e.Key == Key.Escape)
     {
         Exit();
     }
     else if (e.Key == Key.T)
     {
         Console.WriteLine("--- Objetos / Pontos: ");
         for (var i = 0; i < objetosLista.Count; i++)
         {
             Console.WriteLine(objetosLista[i]);
         }
     }
     else if (e.Key == Key.U)
     {
         bBoxDesenhar = !bBoxDesenhar;
     }
     else if (e.Key == Key.V)
     {
         mouseMoverPto = !mouseMoverPto;   //TODO: falta atualizar a BBox do objeto
     }
     else if (e.Key == Key.E)
     {
         this.spline.goEsquerda();
     }
     else if (e.Key == Key.D)
     {
         this.spline.goDireita();
     }
     else if (e.Key == Key.C)
     {
         this.spline.goCima();
     }
     else if (e.Key == Key.B)
     {
         this.spline.goBaixo();
     }
     else if (e.Key == Key.KeypadPlus)
     {
         this.spline.addPontos();
     }
     else if (e.Key == Key.KeypadMinus)
     {
         this.spline.subPontos();
     }
     else if (e.Key == Key.Keypad1)
     {
         this.spline.changePonto(0);
     }
     else if (e.Key == Key.Keypad2)
     {
         this.spline.changePonto(1);
     }
     else if (e.Key == Key.Keypad3)
     {
         this.spline.changePonto(2);
     }
     else if (e.Key == Key.Keypad4)
     {
         this.spline.changePonto(3);
     }
     else
     {
         Console.WriteLine(" __ Tecla não implementada.");
     }
 }
Beispiel #6
0
        protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
        {
            // Console.Clear(); //TODO: não funciona.
            if (e.Key == Key.H)
            {
                Utilitario.AjudaTeclado();
            }
            else if (e.Key == Key.F1)
            {
                Utilitario.AjudaJogo();
            }
            else if (e.Key == Key.Escape)
            {
                Exit();
            }
            //--------------------------------------------------------------
            else if (e.Key == Key.Number9)
            {
                objetoSelecionado = null;             // desmacar objeto selecionado
            }
            else if (e.Key == Key.B)
            {
                bBoxDesenhar = !bBoxDesenhar; //FIXME: bBox não está sendo atualizada.
            }
            else if (e.Key == Key.Enter)
            {
                obj_Tabuleiro.enter();
            }
            else if (e.Key == Key.E)
            {
                Console.WriteLine("--- Objetos / Pontos: ");
                for (var i = 0; i < objetosLista.Count; i++)
                {
                    Console.WriteLine(objetosLista[i]);
                }
            }
            //--------------------------------------------------------------
            else if (e.Key == Key.X)
            {
                menuEixoSelecao = 'x';
            }
            else if (e.Key == Key.Y)
            {
                menuEixoSelecao = 'y';
            }
            else if (e.Key == Key.Z)
            {
                menuEixoSelecao = 'z';
            }
            else if (e.Key == Key.Minus)
            {
                deslocamento--;
            }
            else if (e.Key == Key.Plus)
            {
                deslocamento++;
            }
            else if (e.Key == Key.C)
            {
                menuSelecao = "[menu] C: Câmera";
            }
            else if (e.Key == Key.O)
            {
                menuSelecao = "[menu] O: Objeto";
            }

            // Menu: seleção
            else if (menuSelecao.Equals("[menu] C: Câmera"))
            {
                camera.MenuTecla(e.Key, menuEixoSelecao, deslocamento);
            }
            else if (menuSelecao.Equals("[menu] O: Objeto"))
            {
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.MenuTecla(e.Key, menuEixoSelecao, deslocamento, bBoxDesenhar);
                }
                else
                {
                    Console.WriteLine(" ... Objeto NÃO selecionado.");
                }
            }

            else
            {
                Console.WriteLine(" __ Tecla não implementada.");
            }

            if (!(e.Key == Key.LShift)) //FIXME: não funciona.
            {
                Console.WriteLine("__ " + menuSelecao + "[" + deslocamento + "]");
            }
        }
Beispiel #7
0
 protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
 {
     if (e.Key == Key.H)
     {
         Utilitario.AjudaTeclado();
     }
     else if (e.Key == Key.Escape)
     {
         Exit();
     }
     else if (e.Key == Key.W)
     {
         Console.WriteLine("--- Objetos / Pontos: ");
         for (var i = 0; i < objetosLista.Count; i++)
         {
             Console.WriteLine(objetosLista[i]);
         }
     }
     else if (e.Key == Key.Space) // Alterar
     {
         this.keyControll++;
         if (this.keyControll == 1)
         {
             this.beginMode = BeginMode.Lines;
         }
         else if (this.keyControll == 2)
         {
             this.beginMode = BeginMode.LineLoop;
         }
         else if (this.keyControll == 3)
         {
             this.beginMode = BeginMode.LineStrip;
         }
         else if (this.keyControll == 4)
         {
             this.beginMode = BeginMode.Triangles;
         }
         else if (this.keyControll == 5)
         {
             this.beginMode = BeginMode.Triangles;
         }
         else if (this.keyControll == 6)
         {
             this.beginMode = BeginMode.Quads;
         }
         else if (this.keyControll == 7)
         {
             this.beginMode = BeginMode.TriangleFan;
         }
         else if (this.keyControll == 8)
         {
             this.beginMode = BeginMode.QuadStrip;
         }
         else if (this.keyControll == 9)
         {
             this.beginMode = BeginMode.Quads;
         }
         else
         {
             this.keyControll = 0;
             this.beginMode   = BeginMode.Points;
         }
     }
     else
     {
         Console.WriteLine(" __ Tecla não implementada.");
     }
 }
Beispiel #8
0
        // desenha o número em uma face do dado
        private void desenhaNumeroDado(int numero, Face face)
        {
            // salva em quantas colunas os círculos aparecem para cada número (o número é indicado pelo índice)
            int[] intervaloA = new int[6] {
                2, 4, 6, 4, 6, 4
            };
            int[] intervaloB = new int[6] {
                2, 4, 6, 4, 6, 6
            };

            Eixos   eixos     = Eixos.X_Y;
            Ponto4D ptoCentro = null;
            Circulo c;
            double  somarA = 0;
            double  somarB = 0;

            for (int i = 0; i <= numero; i++)
            {
                // adiciona o ponto central do círculo de acordo com a face
                switch (face)
                {
                case Face.CIMA:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[2].Y + 0.01, base.pontosLista[0].Z - tamanhoDado / intervaloB[numero] - somarB);
                    eixos     = Eixos.X_Z;
                    break;

                case Face.BAIXO:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[0].Y - 0.01, base.pontosLista[0].Z - tamanhoDado / intervaloB[numero] - somarB);
                    eixos     = Eixos.X_Z;
                    break;

                case Face.FRENTE:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[0].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[0].Z + 0.01);
                    break;

                case Face.FUNDO:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[0].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[4].Z - 0.01);
                    break;

                case Face.DIREITA:
                    ptoCentro = new Ponto4D(base.pontosLista[1].X + 0.01, base.pontosLista[1].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[1].Z - tamanhoDado / intervaloA[numero] - somarA);
                    eixos     = Eixos.Y_Z;
                    break;

                case Face.ESQUERDA:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X - 0.01, base.pontosLista[4].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[4].Z + tamanhoDado / intervaloA[numero] + somarA);
                    eixos     = Eixos.Y_Z;
                    break;
                }

                // altera os valores que devem ser somados nas coordenadas do ponto central do próximo círculo
                if (((numero == 2 || numero == 4) && (i == 0 || i == 1)) ||
                    ((numero == 1 || numero == 3 || numero == 5) && i == 0))

                {
                    somarA += 2 * (tamanhoDado / intervaloA[numero]);
                    somarB += 2 * (tamanhoDado / intervaloB[numero]);
                }
                else if ((numero == 4 && i == 2) ||
                         ((numero == 3 || numero == 5) && i == 1))
                {
                    somarA = 0;
                }
                else if (numero == 4 && i == 3)
                {
                    somarA = 4 * (tamanhoDado / intervaloA[numero]);
                    somarB = 0;
                }
                else if ((numero == 3 || numero == 5) && i == 2)
                {
                    somarA = 2 * (tamanhoDado / intervaloA[numero]);
                    somarB = 0;
                }
                else if (numero == 5 && i == 3)
                {
                    somarA = 0;
                    somarB = 4 * (tamanhoDado / intervaloB[numero]);
                }
                else if (numero == 5 && i == 4)
                {
                    somarA = 2 * (tamanhoDado / intervaloA[numero]);
                }

                // adiciona o círculo
                c = new Circulo(Utilitario.charProximo(), this, 15, tamanhoDado / 8, ptoCentro, eixos);
                c.ObjetoCor.CorR = 0; c.ObjetoCor.CorG = 0; c.ObjetoCor.CorB = 0;
                c.PrimitivaTipo  = PrimitiveType.TriangleStrip;
            }
        }
Beispiel #9
0
 protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
 {
     if (e.Key == Key.H)
     {
         Utilitario.AjudaTeclado();
     }
     else if (e.Key == Key.Escape)
     {
         Exit();
     }
     else if (e.Key == Key.E)
     {
         Console.WriteLine("--- Objetos / Pontos: ");
         for (var i = 0; i < objetosLista.Count; i++)
         {
             Console.WriteLine(objetosLista[i]);
         }
     }
     else if (e.Key == Key.O)
     {
         bBoxDesenhar = !bBoxDesenhar;
     }
     else if (e.Key == Key.Enter)
     {
         if (objetoNovo != null)
         {
             objetoNovo.PontosRemoverUltimo(); // N3-Exe6: "truque" para deixar o rastro
             objetoSelecionado = objetoNovo;
             objetoNovo        = null;
         }
     }
     else if (e.Key == Key.Space)
     {
         if (objetoNovo == null)
         {
             objetoNovo = new Poligono(objetoId + 1, null);
             objetosLista.Add(objetoNovo);
             objetoNovo.PontosAdicionar(new Ponto4D(mouseX, mouseY));
             objetoNovo.PontosAdicionar(new Ponto4D(mouseX, mouseY)); // N3-Exe6: "troque" para deixar o rastro
         }
         else
         {
             objetoNovo.PontosAdicionar(new Ponto4D(mouseX, mouseY));
         }
     }
     else if (objetoSelecionado != null)
     {
         if (e.Key == Key.M)
         {
             Console.WriteLine(objetoSelecionado.Matriz);
         }
         else if (e.Key == Key.P)
         {
             Console.WriteLine(objetoSelecionado);
         }
         else if (e.Key == Key.I)
         {
             objetoSelecionado.AtribuirIdentidade();
         }
         //TODO: não está atualizando a BBox com as transformações geométricas
         else if (e.Key == Key.Left)
         {
             objetoSelecionado.TranslacaoXYZ(-10, 0, 0);
         }
         else if (e.Key == Key.Right)
         {
             objetoSelecionado.TranslacaoXYZ(10, 0, 0);
         }
         else if (e.Key == Key.Up)
         {
             objetoSelecionado.TranslacaoXYZ(0, 10, 0);
         }
         else if (e.Key == Key.Down)
         {
             objetoSelecionado.TranslacaoXYZ(0, -10, 0);
         }
         else if (e.Key == Key.PageUp)
         {
             objetoSelecionado.EscalaXYZ(2, 2, 2);
         }
         else if (e.Key == Key.PageDown)
         {
             objetoSelecionado.EscalaXYZ(0.5, 0.5, 0.5);
         }
         else if (e.Key == Key.Home)
         {
             objetoSelecionado.EscalaXYZBBox(0.5, 0.5, 0.5);
         }
         else if (e.Key == Key.End)
         {
             objetoSelecionado.EscalaXYZBBox(2, 2, 2);
         }
         else if (e.Key == Key.Number1)
         {
             objetoSelecionado.Rotacao(10);
         }
         else if (e.Key == Key.Number2)
         {
             objetoSelecionado.Rotacao(-10);
         }
         else if (e.Key == Key.Number3)
         {
             objetoSelecionado.RotacaoZBBox(10);
         }
         else if (e.Key == Key.Number4)
         {
             objetoSelecionado.RotacaoZBBox(-10);
         }
         else if (e.Key == Key.Number9)
         {
             objetoSelecionado = null;           // desmacar objeto selecionado
         }
         else
         {
             Console.WriteLine(" __ Tecla não implementada.");
         }
     }
     else
     {
         Console.WriteLine(" __ Tecla não implementada.");
     }
 }
        public Tabuleiro(char rotulo, Objeto paiRef, CameraPerspective c) : base(rotulo, paiRef)
        {
            camera = c;

            // adiciona chão
            addPontosFaces(-9.1f, 9.1f, -0.2f, 0.0f, 9.1f, -9.1f);

            int   posTrilha = 8;
            float inicio_x  = -0.7f;
            float inicio_z  = 8.9f;

            // adiciona os pontos das plataformas da trilha - listaPto[8] a
            for (int i = 1; i <= 12; i++)
            {
                // se i != 1 começa a contar em 2, pois a primeira peça já foi adicionada
                // se i == 3, 6, 9 ou 12, então possui somente 3 peças na fileira, senão possui 7
                for (int j = (i == 1 ? 1 : 2); (i % 3 == 0 ? j <= 3 : j <= 7); j++)
                {
                    trilha.Add(posTrilha);
                    addPontosFaces(inicio_x - 1f, inicio_x, 0.0f, 0.2f, inicio_z, inicio_z - 1f);

                    // salva a posição das plataformas importantes do jogo
                    if (i == 1 && j == 2)
                    {
                        posJogadorAzul = trilha.Count - 1;
                    }
                    else if (i == 7 && j == 2)
                    {
                        posJogadorVermelho = trilha.Count - 1;
                    }
                    else if (i == 6 && j == 2)
                    {
                        posTerminaVermelho = trilha.Count - 1;
                    }
                    else if (i == 12 && j == 2)
                    {
                        posTerminaAzul = trilha.Count - 1;
                    }

                    posTrilha += QUANTIDADE_PONTOS;

                    // muda as variáveis para a próxima plataforma
                    if ((i % 3 == 0 && j != 3) || (i % 3 != 0 && j != 7))
                    {
                        if (i == 1 || i == 3 || i == 5)
                        {
                            inicio_z -= 1.2f;
                        }
                        else if (i == 2 || i == 10 || i == 12)
                        {
                            inicio_x -= 1.2f;
                        }
                        else if (i == 4 || i == 6 || i == 8)
                        {
                            inicio_x += 1.2f;
                        }
                        else if (i == 7 || i == 9 || i == 11)
                        {
                            inicio_z += 1.2f;
                        }
                    }
                }

                if (i == 12 || i == 2 || i == 4)
                {
                    inicio_z -= 1.2f;
                }

                else if (i == 1 || i == 9 || i == 11)
                {
                    inicio_x -= 1.2f;
                }
                else if (i == 3 || i == 5 || i == 7)
                {
                    inicio_x += 1.2f;
                }
                else if (i == 6 || i == 8 || i == 10)
                {
                    inicio_z += 1.2f;
                }
            }

            inicio_x = 0.5f;
            inicio_z = 7.7f;

            for (int i = 1; i <= 13; i++)
            {
                if (i <= 6)
                {
                    caminhoAzul.Add(posTrilha);
                }
                else if (i == 7)
                {
                    posDado = posTrilha;
                }
                else
                {
                    caminhoVermelho.Add(posTrilha);
                }

                addPontosFaces(inicio_x - 1f, inicio_x, 0.0f, 0.2f, inicio_z, inicio_z - 1f);

                posTrilha += 8;

                // muda as variáveis para a próxima plataforma
                inicio_z -= 1.2f;
            }

            // adiciona os pontos da casa azul
            // muros da casa
            casaAzul.Add(posTrilha);
            casaAzul.Add(posTrilha + 8);
            casaAzul.Add(posTrilha + 16);
            casaAzul.Add(posTrilha + 24);
            addPontosFaces(-2.9f, -1.9f, 0.0f, 0.6f, 6.5f, 1.9f);
            addPontosFaces(-8.9f, -2.9f, 0.0f, 0.6f, 2.9f, 1.9f);
            addPontosFaces(-8.9f, -7.9f, 0.0f, 0.6f, 8.9f, 2.9f);
            addPontosFaces(-7.9f, -1.9f, 0.0f, 0.6f, 8.9f, 7.9f);

            posTrilha += 32;

            // plataformas das peças
            posCasaAzul = posTrilha;
            casaAzul.Add(posTrilha);
            casaAzul.Add(posTrilha + 8);
            casaAzul.Add(posTrilha + 16);
            casaAzul.Add(posTrilha + 24);
            addPontosFaces(-5.0f, -3.6f, 0.0f, 0.2f, 7.2f, 5.8f);
            addPontosFaces(-7.2f, -5.8f, 0.0f, 0.2f, 7.2f, 5.8f);
            addPontosFaces(-5.0f, -3.6f, 0.0f, 0.2f, 5.0f, 3.6f);
            addPontosFaces(-7.2f, -5.8f, 0.0f, 0.2f, 5.0f, 3.6f);

            posTrilha += 32;

            // plataformas das peças salvas
            salvoAzul.Add(posTrilha);
            salvoAzul.Add(posTrilha + 8);
            salvoAzul.Add(posTrilha + 16);
            salvoAzul.Add(posTrilha + 24);
            addPontosFaces(3.6f, 5.0f, 0.0f, 0.2f, 7.2f, 5.8f);
            addPontosFaces(5.8f, 7.2f, 0.0f, 0.2f, 7.2f, 5.8f);
            addPontosFaces(3.6f, 5.0f, 0.0f, 0.2f, 5.0f, 3.6f);
            addPontosFaces(5.8f, 7.2f, 0.0f, 0.2f, 5.0f, 3.6f);

            posTrilha += 32;

            // adiciona os pontos da casa vermelha
            // muros da casa
            casaVermelha.Add(posTrilha);
            casaVermelha.Add(posTrilha + 8);
            casaVermelha.Add(posTrilha + 16);
            casaVermelha.Add(posTrilha + 24);
            addPontosFaces(1.9f, 2.9f, 0.0f, 0.6f, -1.9f, -6.5f);
            addPontosFaces(2.9f, 8.9f, 0.0f, 0.6f, -1.9f, -2.9f);
            addPontosFaces(7.9f, 8.9f, 0.0f, 0.6f, -2.9f, -8.9f);
            addPontosFaces(1.9f, 7.9f, 0.0f, 0.6f, -7.9f, -8.9f);

            posTrilha += 32;

            // plataformas das peças
            posCasaVermelha = posTrilha;
            casaVermelha.Add(posTrilha);
            casaVermelha.Add(posTrilha + 8);
            casaVermelha.Add(posTrilha + 16);
            casaVermelha.Add(posTrilha + 24);
            addPontosFaces(3.6f, 5.0f, 0.0f, 0.2f, -5.8f, -7.2f);
            addPontosFaces(5.8f, 7.2f, 0.0f, 0.2f, -5.8f, -7.2f);
            addPontosFaces(3.6f, 5.0f, 0.0f, 0.2f, -3.6f, -5.0f);
            addPontosFaces(5.8f, 7.2f, 0.0f, 0.2f, -3.6f, -5.0f);

            posTrilha += 32;

            // plataformas das peças salvas
            salvoVermelho.Add(posTrilha);
            salvoVermelho.Add(posTrilha + 8);
            salvoVermelho.Add(posTrilha + 16);
            salvoVermelho.Add(posTrilha + 24);
            addPontosFaces(-5.0f, -3.6f, 0.0f, 0.2f, -5.8f, -7.2f);
            addPontosFaces(-7.2f, -5.8f, 0.0f, 0.2f, -5.8f, -7.2f);
            addPontosFaces(-5.0f, -3.6f, 0.0f, 0.2f, -3.6f, -5.0f);
            addPontosFaces(-7.2f, -5.8f, 0.0f, 0.2f, -3.6f, -5.0f);

            posTrilha += 32;

            Ponto4D pto;


            // adiciona dado
            pto      = getPontoInicialPeca(Ambiente.MEIO, 0, 0.8f);
            obj_Dado = new Dado(Utilitario.charProximo(), this, pto, 0.8f, new Cor(0, 0, 255, 255), new Cor(255, 0, 0, 255));

            Peca p;

            Cor cor = new Cor(0, 0, 255, 255);

            // adiciona peças azuis
            for (int i = 0; i < 4; i++)
            {
                pto = getPontoInicialPeca(Ambiente.CASA_AZUL, i, 0.6f);
                p   = new Peca(Utilitario.charProximo(), this, pto, 0.6f, 1, cor, Ambiente.CASA_AZUL, i);
                pecasAzuis.Add(p);
            }

            cor = new Cor(255, 0, 0, 255);

            // adiciona peças vermelhas
            for (int i = 0; i < 4; i++)
            {
                pto = getPontoInicialPeca(Ambiente.CASA_VERMELHA, i, 0.6f);
                p   = new Peca(Utilitario.charProximo(), this, pto, 0.6f, 2, cor, Ambiente.CASA_VERMELHA, i);
                pecasVermelhas.Add(p);
            }
        }
Beispiel #11
0
 protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
 {
     if (e.Key == Key.H)
     {
         Utilitario.AjudaTeclado();
     }
     else if (e.Key == Key.Escape)
     {
         Exit();
     }
     else if (e.Key == Key.E)
     {
         Console.WriteLine("--- Objetos / Pontos: ");
         for (var i = 0; i < objetosLista.Count; i++)
         {
             Console.WriteLine(objetosLista[i]);
         }
     }
     else if (e.Key == Key.O)
     {
         bBoxDesenhar = !bBoxDesenhar;
     }
     else if (e.Key == Key.Enter)
     {
         if (objetoNovo != null)
         {
             objetoNovo.PontosRemoverUltimo(); // N3-Exe6: "truque" para deixar o rastro
             objetoSelecionado = objetoNovo;
             objetoNovo        = null;
         }
     }
     else if (e.Key == Key.Left)
     {
         this.AtRotateX(-1 / 2);
         this.AtRotateY(1);
     }
     else if (e.Key == Key.Right)
     {
         this.AtRotateX(1 / 2);
         this.AtRotateY(-1);
     }
     else if (e.Key == Key.Up)
     {
         this.EyeRotate(1);
     }
     else if (e.Key == Key.Down)
     {
         this.EyeRotate(-1);
     }
     else if (objetoSelecionado != null)
     {
         if (e.Key == Key.Space)
         {
             objetoSelecionado.Matriz = objetoSelecionado.Matriz.MultiplicarMatriz(this.movimentos[i]);
             j++;
             if (j >= this.qtMovimentos[i])
             {
                 i++;
                 j = 0;
                 if (i >= this.movimentos.Count)
                 {
                     i = 0;
                 }
             }
         }
         else if (e.Key == Key.M)
         {
             Console.WriteLine(objetoSelecionado.Matriz);
         }
         else if (e.Key == Key.P)
         {
             Console.WriteLine(objetoSelecionado);
         }
         else if (e.Key == Key.I)
         {
             objetoSelecionado.AtribuirIdentidade();
             this.i = 0;
             this.j = 0;
         }
         else if (e.Key == Key.Number8)
         {
             objetoSelecionado.TranslacaoXYZ(0, 0, 10);
         }
         else if (e.Key == Key.Number9)
         {
             objetoSelecionado.TranslacaoXYZ(0, 0, -10);
         }
         else if (e.Key == Key.PageUp)
         {
             objetoSelecionado.EscalaXYZ(2, 2, 2);
         }
         else if (e.Key == Key.PageDown)
         {
             objetoSelecionado.EscalaXYZ(0.5, 0.5, 0.5);
         }
         else if (e.Key == Key.Home)
         {
             objetoSelecionado.EscalaXYZBBox(0.5, 0.5, 0.5);
         }
         else if (e.Key == Key.End)
         {
             objetoSelecionado.EscalaXYZBBox(2, 2, 2);
         }
         else if (e.Key == Key.Number1)
         {
             objetoSelecionado.Rotacao(10);
         }
         else if (e.Key == Key.Number2)
         {
             objetoSelecionado.Rotacao(-10);
         }
         else if (e.Key == Key.Number3)
         {
             objetoSelecionado.RotacaoZBBox(10);
         }
         else if (e.Key == Key.Number4)
         {
             objetoSelecionado.RotacaoZBBox(-10);
         }
         else if (e.Key == Key.Number0)
         {
             objetoSelecionado = null;
         }
         else if (e.Key == Key.X)
         {
             objetoSelecionado.TrocaEixoRotacao('x');
         }
         else if (e.Key == Key.Y)
         {
             objetoSelecionado.TrocaEixoRotacao('y');
         }
         else if (e.Key == Key.Z)
         {
             objetoSelecionado.TrocaEixoRotacao('z');
         }
         else
         {
             Console.WriteLine(" __ Tecla não implementada.");
         }
     }
     else
     {
         Console.WriteLine(" __ Tecla não implementada.");
     }
 }
Beispiel #12
0
        protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
        {
            if (e.Key == Key.H)
            {
                Utilitario.AjudaTeclado();
            }
            else if (e.Key == Key.Escape)
            {
                Exit();
            }
            else if (e.Key == Key.E)
            {
                Console.WriteLine("--- Objetos / Pontos: ");
                for (var i = 0; i < objetosLista.Count; i++)
                {
                    Console.WriteLine(objetosLista[i]);
                }
            }
            else if (e.Key == Key.O)
            {
                bBoxDesenhar = !bBoxDesenhar;
            }
            else if (e.Key == Key.Enter)
            {
                if (objetoNovo != null)
                {
                    objetoNovo.PontosRemoverUltimo();   // N3-Exe6: "truque" para deixar o rastro
                    objetoSelecionado = objetoNovo;
                    objetoNovo        = null;
                }
            }
            else if (e.Key == Key.Space)
            {
                if (objetoNovo == null)
                {
                    objetoNovo = new Poligono(objetoId + 1, null);
                    objetosLista.Add(objetoNovo);
                    objetoNovo.PontosAdicionar(new Ponto4D(mouseX, mouseY));
                    objetoNovo.PontosAdicionar(new Ponto4D(mouseX, mouseY));  // N3-Exe6: "troque" para deixar o rastro
                }
                else
                {
                    objetoNovo.PontosAdicionar(new Ponto4D(mouseX, mouseY));
                }
            }
            else if (e.Key == Key.R)
            {
                if (!poligonoQualquer)
                {
                    this.poligonoQualquer = true;
                    objetoNovo            = new Poligono(objetoId + 1, null);
                    objetoNovo.setAberto(true);
                    objetoNovo.PontosAdicionar(new Ponto4D(this.mouseX, this.mouseY));
                    objetoNovo.PontosAdicionar(new Ponto4D(this.mouseX, this.mouseY));
                    this.objetosLista.Add(objetoNovo);
                    objetoSelecionado = objetoNovo;
                }
                else
                {
                    this.poligonoQualquer = false;
                    objetoSelecionado     = null;
                    objetoNovo.PontosRemoverUltimo();
                    objetoNovo = null;
                }
            }
            else if (e.Key == Key.L)
            {
                //Pegar o último vertice e editar
                if (this.objetoSelecionado != null && this.verticeMaisProximo == null)
                {
                    Poligono       poligonoSelecionado   = (Poligono)this.objetoSelecionado;
                    List <Ponto4D> ponto4DsPoligono      = poligonoSelecionado.getPontosPoligono();
                    int            diferencaXSelecionado = 0;
                    int            diferencaYSelecionado = 0;
                    foreach (Ponto4D pontoPoligono in ponto4DsPoligono)
                    {
                        int diferencaXCalculado = Math.Abs(Math.Abs(this.mouseX) - Math.Abs((int)pontoPoligono.X));
                        int diferencaYCalculado = Math.Abs(Math.Abs(this.mouseY) - Math.Abs((int)pontoPoligono.Y));
                        if (this.verticeMaisProximo == null || (diferencaXCalculado < diferencaXSelecionado && diferencaYCalculado < diferencaYSelecionado))
                        {
                            this.verticeMaisProximo = pontoPoligono;
                            diferencaXSelecionado   = diferencaXCalculado;
                            diferencaYSelecionado   = diferencaYCalculado;
                        }
                    }
                }
                else
                {
                    this.objetoSelecionado  = null;
                    this.verticeMaisProximo = null;
                }
            }
            else if (e.Key == Key.T)
            {
                //Translação
                Poligono        poligono        = (Poligono)this.objetoSelecionado;
                Transformacao4D transformacao4D = poligono.Matriz;
                double[]        teste           = transformacao4D.ObterDados();
                this.translacaoX++;
                this.translacaoY++;
                teste[11] = this.translacaoX;
                teste[12] = this.translacaoY;
                teste[13] = this.translacaoY;
                Console.Write("");
            }
            else if (e.Key == Key.Q)
            {
                //Encerrar
                objetoNovo.PontosRemoverUltimo();
                this.createDynamicPolygon = false;
                objetoNovo        = null;
                objetoSelecionado = null;
            }
            else if (e.Key == Key.N)
            {
                if (!this.createDynamicPolygon)
                {
                    this.createDynamicPolygon = true;
                    objetoSelecionado         = null;
                    objetoNovo = new Poligono(objetoId + 1, null);
                    this.objetosLista.Add(objetoNovo);
                    objetoNovo.PontosAdicionar(new Ponto4D(this.mouseX, this.mouseY));
                    objetoNovo.PontosAdicionar(new Ponto4D(this.mouseX, this.mouseY));
                    objetoSelecionado = objetoNovo;
                }
                else
                {
                    objetoNovo.PontosUltimo().X = mouseX;
                    objetoNovo.PontosUltimo().Y = mouseY;
                    objetoNovo.PontosAdicionar(new Ponto4D(this.mouseX, this.mouseY));
                }
            }
            else if (objetoSelecionado != null)
            {
                if (e.Key == Key.M)
                {
                    Console.WriteLine(objetoSelecionado.Matriz);
                }
                else if (e.Key == Key.P)
                {
                    Console.WriteLine(objetoSelecionado);
                }
                else if (e.Key == Key.I)
                {
                    objetoSelecionado.AtribuirIdentidade();
                }
                //TODO: não está atualizando a BBox com as transformações geométricas
                else if (e.Key == Key.Left)
                {
                    objetoSelecionado.TranslacaoXYZ(-10, 0, 0);
                }
                else if (e.Key == Key.Right)
                {
                    objetoSelecionado.TranslacaoXYZ(10, 0, 0);
                }
                else if (e.Key == Key.Up)
                {
                    objetoSelecionado.TranslacaoXYZ(0, 10, 0);
                }
                else if (e.Key == Key.Down)
                {
                    objetoSelecionado.TranslacaoXYZ(0, -10, 0);
                }
                else if (e.Key == Key.PageUp)
                {
                    objetoSelecionado.EscalaXYZ(2, 2, 2);
                }
                else if (e.Key == Key.PageDown)
                {
                    objetoSelecionado.EscalaXYZ(0.5, 0.5, 0.5);
                }
                else if (e.Key == Key.Home)
                {
                    objetoSelecionado.EscalaXYZBBox(0.5, 0.5, 0.5);
                }
                else if (e.Key == Key.B)
                {
                    if (!TRE)
                    {
                        TRE = true;
                    }
                    else
                    {
                        TRE = false;
                    }
                }
                else if (e.Key == Key.C)
                {
                    if (!scale)
                    {
                        scale = true;
                    }
                    else
                    {
                        scale = false;
                    }
                }
                else if (e.Key == Key.X)
                {
                    if (!this.rotatate)
                    {
                        this.rotatate = true;
                    }
                    else
                    {
                        this.rotatate = false;
                    }
                }

                else if (e.Key == Key.End)
                {
                    objetoSelecionado.EscalaXYZBBox(2, 2, 2);
                }
                else if (e.Key == Key.Number1)
                {
                    objetoSelecionado.Rotacao(10);
                }
                else if (e.Key == Key.Number2)
                {
                    objetoSelecionado.Rotacao(-10);
                }
                else if (e.Key == Key.Number3)
                {
                    objetoSelecionado.RotacaoZBBox(10);
                }
                else if (e.Key == Key.Number4)
                {
                    objetoSelecionado.RotacaoZBBox(-10);
                }
                else if (e.Key == Key.Number9)
                {
                    objetoSelecionado = null;
                }
                else if (e.Key == Key.Number5)
                {
                    Poligono poligonoSelecionado = (Poligono)objetoSelecionado;
                    poligonoSelecionado.PrimitivaCor = OpenTK.Color.Red;
                }
                else if (e.Key == Key.Number6)
                {
                    Poligono poligonoSelecionado = (Poligono)objetoSelecionado;
                    poligonoSelecionado.PrimitivaCor = OpenTK.Color.Green;
                }
                else if (e.Key == Key.Number7)
                {
                    Poligono poligonoSelecionado = (Poligono)objetoSelecionado;
                    poligonoSelecionado.PrimitivaCor = OpenTK.Color.Blue;
                }
                else
                {
                    Console.WriteLine(" __ Tecla não implementada.");
                }
            }
            else
            {
                Console.WriteLine(" __ Tecla não implementada.");
            }
        }