Obs: boa definição. Mas é uma biblioteca. Nota: 0,5 Trabalho Extra Turma de Terça-Feira Alunos: Leandro Donaires Figueira RA: 21992-4 Rodrigo Amato Mesquita RA: 22016-7 Prof. Jose Visão geral da linguagem. A Linguagem Graphix© possui uma sintaxe similar a do Java, porém possui características únicas. A princípio, é voltada para desenvolvedores de aplicações 3D e, portanto, todo programa rodará numa janela 3D baseada na API OpenGL, ao invés da tradicional janela 2D. Ela pode ser utilizada tanto para fazer aplicações comuns (menus 3D!) como jogos. Devido ao seu alto nível, facilita bastante o trabalho e aumenta a produtividade. Com um “Builder” (Visual), essa linguagem se torna imbatível! O espaço de trabalho é a 3ª dimensão, cujo tamanho é definido quando se constrói o espaço. Poderemos ter vários espaços de trabalho separados se necessário. Para passar de um para outro, é só ativar um evento, por exemplo, mexendo num botão de um menu. A linguagem já vem com um navegador embutido quando se roda a aplicação (porém precisa ser definido), no qual sua visão é de 1ª pessoa e com o auxilio do teclado e/ou mouse pode-se navegar para qualquer parte do espaço. Com o método de Navigator setSpeed(x) (x em km/h), podemos setar a velocidade do navegador, sendo o padrão 10km/h. Outros métodos permitem criar planos, retas, superfícies curvas, fazer recortes nas superfícies com formas pré-definidas (circulo, quadrado, etc) ou o próprio usuário pode definir sua forma, colocar física (podendo setar o valor da gravidade), rotacionar objetos, aplicar texturas/textos nos objetos, definir uma posição atual para o objeto (indicando os offsets), ... Agora, sobre a criação de objetos, pode-se criar objetos 1D (são os comuns das atuais linguagens), 2D e 3D (elementos gráficos) com formas pré-definidas ou definidas pelo usuário, combinar dois objetos 2D para fazer um 3D (ou combinar um 3D com um 2D), e pode-se associar um evento a eles, como ativar um método. O padrão é a física estar desligada e os objetos serem intransponíveis. Um programa exemplo do funcionamento: Esse programa cria um retângulo 2D e um Cone 3D. Com o navegador, pode-se interagir com o cone, pois a física foi ligada no ambiente. Quando o navegador se choca com o cone, ele vai à direção contrária ao qual foi tocado, e se tocar no retângulo, fecha o programa. Pode-se fechar o programa também tocando o retângulo com o navegador. //Exemplo.grx import bibliotecas; public class Exemplo() { public Exemplo() { // construtor // definindo o espaço de trabalho como um corredor WorkSpace espaco1 = new WorkSpace ( -500...500, -200...200, 0...100 ); // extensão do eixo x, eixo y e eixo z. Navigator nav = new Navigator ( espaco1, 0, 0, 0 ); /* criando o navegador ; deve-se indicar o WorkSpace inicial e as coordenadas iniciais. Só pode ser criada uma instância dessa classe por programa. */ nav.setSpeed ( 5 ); Obj2D botao_exit = new Obj2D ( 20, 20, -50, -50, -50, rectangle ); /* ( tamanho no eixo x, tamanho no eixo y, offset x, offset y, offset z, tipo pré-definido ou definido pelo usuário ). O tipo do usuário tem que vir entre "" e tem que estar no import e o objeto é criado paralelo ao plano xy com z = -50; */ char botao_exit_text = “Exit”; botao_exit.attachText( botao_exit_text, TimesNewRoman, 8, B ); /* ( variável char, nome da fonte, tamanho da fonte, [B, I, U]) sendo que entre [] é opcional. */ botao_exit.rotate ( -90, y ); // roda 90 graus no sentido anti-horário no eixo y. Pode-se fazer a rotação com base numa reta definida. Obj2D ponto = new Obj2D ( 0, 0, 50, 50 , 50, null ); Obj2D base_circular = new Obj2D ( 10, 10, 53, 50, 53, circle ); Obj3D cone = ponto.uniteObj2D ( base_circular, line ); /* une ponto com base_circular através de linhas. Obtemos assim um cone. É também possível : Obj3D cone_duplo = cone.uniteObj3D ( ponto_oposto, line ); Sendo o primeiro argumento necessariamente um Obj2D. Pode-se criar um objeto 3D direto : Obj3D bola_pequena = new Obj3D (5, 5, 5, 20, 20, 20, circle); Sendo os argumentos (tam. x, tam. y, tam. z, offset x, offset y, offset z, tipo). */ espaco1.setPhysics(1); // liga a física do ambiente espaco1.setGravity(0); // tira a gravidade, ja que nao definimos um plano. Se tivesse gravidade o navegador cairia até o limite do WorkSpace espaco1.setInertia(50); /* coloca moderada resistência do ar (valores aceitos de 0 - sem inércia (não sai do lugar) - até 100 - inércia infinita (nunca para). Pode-se usar esta funcão em Obj2D e Obj3D para um objeto específico, "sobrescrevendo" a inércia do ambiente. */ botao_exit.setInertia(0); } // fim do construtor private void setEvents() { botao_exit.setEvent( on_touch /* | on_click */, exit_program ); // ( como ocorre ( no toque de algum Obj, Navegador e/ou click do mouse ), método chamado ) } private void exit_program() { System.exit(0); } } // fim da classe Exemplo // Main.grx public class Main() { Exemplo exemplo = new Exemplo(); exemplo.setEvents(); }