protected override void OnKeyDown(KeyboardKeyEventArgs e)
        {
            // N3-Exe2: usar o arquivo docs/umlClasses.wsd
            // N3-Exe3: usar o arquivo bin/documentação.XML -> ver exemplo CG_Biblioteca/bin/documentação.XML
            switch (e.Key)
            {
            case Key.Escape:     // N3-Exe4: Inserir ponto no polígono atual
                Exit();
                break;

            case Key.C:
                Console.Clear();
                break;

            case Key.X:
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.PontosExibirObjeto();
                }
                break;

            case Key.E:     // Exibe os pontos do polígono
            {
                for (var i = 0; i < objetosLista.Count; i++)
                {
                    objetosLista[i].PontosExibirObjeto();
                }
                break;
            }

            case Key.O:
                bBoxDesenhar = !bBoxDesenhar;     // N3-Exe9: exibe a BBox
                break;

            case Key.M:     // Exibe a matriz
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.ExibeMatriz();
                }
                break;

            case Key.P:     // N3-Exe7: Desenhar polígonos abertos ou fechados
                if (objetoNovo != null)
                {
                    tipoPrimitiva = tipoPrimitiva == PrimitiveType.LineStrip ? PrimitiveType.LineLoop : PrimitiveType.LineStrip;
                    objetoNovo.DefinirPrimitiva(tipoPrimitiva);
                }
                break;

            case Key.I:     // Atribui a matriz identidade
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AtribuirIdentidade();
                }
                break;

            case Key.Left:     // N3-Exe10: translação esquerda
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.TranslacaoXY, -10, 0);
                }
                break;

            case Key.Right:     // N3-Exe10: translação direita
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.TranslacaoXY, 10, 0);
                }
                break;

            case Key.Up:     // N3-Exe10: translação cima
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.TranslacaoXY, 0, 10);
                }
                break;

            case Key.Down:     // N3-Exe10: translação baixo
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.TranslacaoXY, 0, -10);
                }
                break;

            case Key.D:     // N3-Exe4: Remove vértice do polígono atual
                ApagarPontoAtual();
                break;

            case Key.V:     // N3-Exe4: Remove vértice do polígono selecionado
                RemoverPontoSelecionado();
                break;

            case Key.PageUp:     // N3-Exe11: escala
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.EscalaXY, 2, 2);
                }
                break;

            case Key.PageDown:     // N3-Exe11: escala
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.EscalaXY, 0.5, 0.5);
                }
                break;

            case Key.Home:     // N3-Exe11: escala
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.EscalaXYBBox, 0.5);
                }
                break;

            case Key.End:     // N3-Exe11: escala
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.EscalaXYBBox, 2);
                }
                break;

            case Key.Number1:     // N3-Exe12: rotação
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.RotacaoZ, 10);
                }
                break;

            case Key.Number2:     // N3-Exe12: rotação
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.RotacaoZ, -10);
                }
                break;

            case Key.Number3:     // N3-Exe12: rotação
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.RotacaoZBBox, 10);
                }
                break;

            case Key.Number4:     // N3-Exe12: rotação
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.AplicarTransformacao(ObjetoAramado.RotacaoZBBox, -10);
                }
                break;

            case Key.T:     // N3-Exe4: Remve todos os vértices do polígono selecionado
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.PontosRemoverTodos();
                }
                break;

            case Key.U:     // N3-Exe4: Remve o último vértice adicionado do polígono selecionado
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.PontosRemoverUltimo();
                    if (objetoSelecionado.QuantidadePontos() == 0)
                    {
                        objetoSelecionado = null;
                    }
                }
                break;

            case Key.R:     // N3-Exe8: Muda a cor do polígono selecionado para vermelho
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.Cor = Color.Red;
                }
                break;

            case Key.S:     // Seleciona o ponto do polígono mais próximo do clique
            {
                foreach (ObjetoAramado objeto in objetosLista)
                {
                    bool isInside = objeto.IsPointInPolygon(new Ponto4D(mouseX, mouseY));
                    if (isInside)
                    {
                        objetoSelecionado = objeto;
                        adicionarFilhos   = false;
                        break;
                    }
                }
                break;
            }

            case Key.G:     // N3-Exe8: Muda a cor do polígono selecionado para verde
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.Cor = Color.Green;
                }
                break;

            case Key.B:     // N3-Exe8: Muda a cor do polígono selecionado para azul
                if (objetoSelecionado != null)
                {
                    objetoSelecionado.Cor = Color.Blue;
                }
                break;

            case Key.Enter:     // N3-Exe4: Finaliza o polígono atual
                if (objetoFilho != null)
                {
                    objetoFilho.PontosRemoverUltimo();
                    adicionarFilhos   = false;
                    objetoFilho       = null;
                    objetoSelecionado = null;
                    objetoNovo        = null;
                    pontoSelecionado  = null;
                }
                else if (objetoNovo != null)
                {
                    objetoSelecionado = objetoNovo;
                    objetoNovo.PontosRemoverUltimo();     // N3-Exe6: "troque" para deixar o rastro
                    objetoNovo = null;
                }
                break;

            case Key.Space:     // N3-Exe4: Inserir ponto no polígono atual
                AdicionarPoligono();
                break;

            case Key.F:
                adicionarFilhos = true;
                if (pontoSelecionado != null && pontoSelecionadoOriginal != null)
                {
                    pontoSelecionado.X = pontoSelecionadoOriginal.X;
                    pontoSelecionado.Y = pontoSelecionadoOriginal.Y;
                    pontoSelecionado   = null;
                }
                break;

            case Key.Number9:
                objetoSelecionado = null;     //TODO: remover está tecla e atribuir o null qdo não tiver um poligono
                break;
            }
        }
Exemplo n.º 2
0
 protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
 {
     // N3-Exe2: usar o arquivo docs/umlClasses.wsd
     // N3-Exe3: usar o arquivo bin/documentação.XML -> ver exemplo CG_Biblioteca/bin/documentação.XML
     if (e.Key == Key.Escape)
     {
         Exit();
     }
     else if (e.Key == Key.E)    // N3-Exe4: ajuda a conferir se os poligonos e vértices estão certos
     {
         for (var i = 0; i < objetosLista.Count; i++)
         {
             objetosLista[i].PontosExibirObjeto();
         }
     }
     else if (e.Key == Key.O)
     {
         bBoxDesenhar = !bBoxDesenhar;   // N3-Exe9: exibe a BBox
     }
     else if (e.Key == Key.M)
     {
         objetoSelecionado.ExibeMatriz();
     }
     else if (e.Key == Key.P)
     {
         objetoSelecionado.PontosExibirObjeto();
     }
     else if (e.Key == Key.I)
     {
         objetoSelecionado.AtribuirIdentidade();
     }
     //FIXME: não está atualizando a BBox com as transformações geométricas
     else if (e.Key == Key.Left)
     {
         objetoSelecionado.TranslacaoXY(-10, 0);
     }
     else if (e.Key == Key.Right)
     {
         objetoSelecionado.TranslacaoXY(10, 0);
     }
     else if (e.Key == Key.Up)
     {
         objetoSelecionado.TranslacaoXY(0, 10);
     }
     else if (e.Key == Key.Down)
     {
         objetoSelecionado.TranslacaoXY(0, -10);
     }
     else if (e.Key == Key.PageUp)
     {
         objetoSelecionado.EscalaXY(1.1, 1.1);
     }
     else if (e.Key == Key.PageDown)
     {
         objetoSelecionado.EscalaXY(0.9, 0.9);
     }
     else if (e.Key == Key.Home)
     {
         objetoSelecionado.EscalaXYBBox(0.5);
     }
     else if (e.Key == Key.End)
     {
         objetoSelecionado.EscalaXYBBox(2);
     }
     else if (e.Key == Key.Number1)
     {
         objetoSelecionado.RotacaoZ(10);
     }
     else if (e.Key == Key.Number2)
     {
         objetoSelecionado.RotacaoZ(-10);
     }
     else if (e.Key == Key.Number3)
     {
         objetoSelecionado.RotacaoZBBox(10);
     }
     else if (e.Key == Key.Number4)
     {
         objetoSelecionado.RotacaoZBBox(-10);
     }
     else if (e.Key == Key.Enter)
     {
         objetoSelecionado = objetoNovo;
         objetoNovo.PontosRemoverUltimo();   // N3-Exe6: "troque" para deixar o rastro
         objetoNovo = null;
     }
     else if (e.Key == Key.Space)
     {
         if (this.criandoObjeto)
         {
             this.criandoObjeto = false;
             if (this.objetoNovo != null)
             {
                 this.objetoNovo.PontosRemoverUltimo();
             }
             this.objetoNovo = null;
         }
         else
         {
             this.criandoObjeto = true;
         }
     }
     else if (e.Key == Key.Delete)
     {
         if (this.objetoSelecionado != null && !this.movendoVertice)
         {
             if (this.objetoSelecionado.PaiRef != null)
             {
                 this.objetoSelecionado.PaiRef.RemoverFilho(this.objetoSelecionado);
             }
             else
             {
                 this.objetosLista.Remove(this.objetoSelecionado);
             }
             this.objetoSelecionado = null;
         }
         else if (this.objetoSelecionado != null && this.movendoVertice)
         {
             ((Poligono)this.objetoSelecionado).RemoverVerticeSelecionado();
             this.movendoVertice = false;
         }
     }
     else if (e.Key == Key.C)
     {
         if (this.objetoSelecionado != null)
         {
             this.objetoSelecionado.Aberto = !this.objetoSelecionado.Aberto;
         }
     }
     else if (e.Key == Key.F)
     {
         this.criandoFilho = this.objetoSelecionado != null && !this.criandoFilho;
     }
     else if (e.Key == Key.R)
     {
         if (this.objetoSelecionado != null)
         {
             this.objetoSelecionado.AddRed();
         }
     }
     else if (e.Key == Key.G)
     {
         if (this.objetoSelecionado != null)
         {
             this.objetoSelecionado.AddGreen();
         }
     }
     else if (e.Key == Key.B)
     {
         if (this.objetoSelecionado != null)
         {
             this.objetoSelecionado.AddBlue();
         }
     }
 }