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."); } }
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); }
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."); } }
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); }
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."); } }
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 + "]"); } }
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."); } }
// 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; } }
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); } }
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."); } }
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."); } }