• Nenhum resultado encontrado

3.2 ESPECIFICAÇÃO

3.2.2 Diagrama de classes

A Figura 6 representa as classes que compõem a aplicação assim como seus relacionamentos. Na representação, foram colocadas as classes criadas e as que são utilizadas da biblioteca V-ART, omitindo-se as classes existentes na biblioteca, mas que não são utilizadas pela aplicação. No diagrama as classes foram divididas em dois pacotes, dessa forma sabem-se quais são da aplicação e quais são da biblioteca externa. A seguir as classes são detalhadas, seguindo sua complexidade da menor para a maior. No detalhamento da modelagem foram omitidos os construtores e funções assessoras (gets()e sets()).

38

Figura 6 – Diagrama de classes

O diagrama apresenta cinco classes que pertencem à biblioteca V-ART, que são

Point, Point4D, Transform, Color e BoundingBox. A primeira, Point, possui basicamente

as funções assessoras para atribuir e retornar os três pontos de um ponto no espaço (x, y e z) e

é utilizada apenas de modelo para a segunda classe, não podendo ser instanciada. A segunda,

Point4D, permite ser instanciada e fornece funções para se trabalhar com o ponto. O que foi

utilizado dessa classe no trabalho proposto foi o construtor com valores apenas nos pontos x e y e as funções assessoras. A terceira classe, Transform, disponibiliza funções para realizar

transformações de escala, rotação e translação sobre uma matriz quadrada 4x4, definida em um vetor de 16 posições. Além dessas funções está disponível a função para fazer a identidade da matriz. A quarta classe, Color, é basicamente composta por um vetor de quatro

39

dimensões, onde cada dimensão representa uma cor, seguindo o padrão Red Green Blue Alpha (RGBA), suas funções assessoras e construtores. Dessa classe foram utilizadas as cores RGB para definir a cor das peças e objetos utilizados em toda a aplicação. E a quinta classe é utilizada para pegar os pontos máximo e mínimo em relação aos eixos de uma forma geométrica representando sua Bounding Box.

As demais classes presentes no diagrama foram construídas para que a aplicação pudesse executar suas funcionalidades corretamente. A classe ObjetoGrafico constitui

funções responsáveis por desenhar um objeto 2D. A partir dela pode ser definida a cor do objeto, sua espessura de linha, sua matriz de transformação, seus vértices, sua primitiva gráfica e seu tipo.

Na classe ObjetoGrafico também é possível adicionar peças filhas, nesse caso elas

são armazenados em um vetor de filhos. Para saber quantos filhos já existem no vetor utiliza- se a variável de controle quantidade que é incrementada a cada novo filho adicionado. Para

realizar esse controle foi utilizada a ideia do grafo de cena (ver seção 2.3), onde a estrutura que representa os pais é o vetor listaBandeja da classe Principal (ver Figura 11). E a

estrutura que representa os filhos é o vetor listaFilhos da classe ObjetoGrafico. Assim

cada pai tem uma lista de filhos.

Como a classe é genérica para qualquer objeto 2D não é possível realizar o desenho das peças. Dessa forma, é definida uma função do tipo virtual denominada Desenha() que

deve ser implementada por quem a herdar. A classe é utilizada também na aplicação exemplo que gera cena 3D, então foi criada uma classe secundária que herda a ObjetoGrafico

denominada ObjetoGraficoExercicio que possui funções utilizadas somente na AduboGL.

A classe ObjetoGraficoExercicio define se o objeto 2D poderá ser “pai” ou “filho”

de outra peça, assim como o id que a peça representa no exercício e sua BoundingBox que é

utilizada para saber se foi clicado dentro do objeto ou não. Dentro dela a BoundingBox é

calculada conforme o objeto sofre uma transformação, também existe uma função que retorna a lista dos vértices com sua transformação. Além disso, existe a função que verifica se um ponto passado como parâmetro pertence ao objeto, ou seja, se está dentro dele. Nessa classe a função Desenha(), herdada da classe ObjetoGrafico, é implementada. Como essa classe

também serve para desenhar qualquer forma 2D foram criadas outras duas classes com que herdam a ObjetoGraficoExercicio, são elas PushPop e Cubo. Essas apenas definem em

seu construtor as características que cada objeto possui. Na Figura 7 está a representação das classes ObjetoGrafico e ObjetoGraficoExercicio com suas variáveis e funções principais,

40

assim como as classes que a herdam.

Figura 7 – Classe ObjetoGrafico com suas heranças

Como a aplicação possui três peças que representam as transformações e essas dependem dos valores de x, y e z para realizar a transformação, foi criada a classe ObjetoTransformacao que herda a ObjetoGraficoExercicio e possui simplesmente as três

variáveis de controle. Para representar as três peças foram criadas as três classes Escala, Rotação e Translação que informam suas particularidades no construtor. Essa relação pode

ser analisada na Figura 8.

Figura 8 – Classe ObjetoTransformacao com suas heranças

A classe GravacaoDeArquivo, representada na Figura 9, foi criada para facilitar a

gravação do arquivo que corresponde a modelagem das peças da aplicação. Ela possui as funções para criar o arquivo; gravar ou adicionar em um arquivo já salvo um vetor de char,

um único char, uma String ou um número; e também a função para finalizar a gravação do

41

Figura 9 – Classe GravacaoDeArquivo

A classe LeituraDeArquivo é utilizada para carregar um arquivo texto,

especificamente o arquivo salvo. Ela possui funções para carregar um arquivo texto passado como parâmetro em uma variável da classe, ler e retornar o conteúdo lido do arquivo e finalizar a leitura do mesmo. Sua representação está na Figura 10.

Figura 10 – Classe LeituraDeArquivo

Por fim, Principal é a classe central da aplicação. Nela são realizadas todas as

interações da tela, como a criação de peças da fábrica, a colocação das peças na bandeja, a gravação e leitura do exercício e a visualização do código-fonte. A classe possui métodos para desenhar cada uma das telas que compõem a aplicação, assim como para criar seus menus e modelá-la. A Figura 11 representa essa classe, com seus atributos e métodos principais.

42

Figura 11 – Classe Principal

As variáveis presentes na classe, em sua maioria, são utilizadas para controles internos. Os principais exemplos são:

a) ao redimensionar a janela principal, redimensiona as janelas internas;

b) ao soltar um objeto na parte do exercício, calcula sua altura e o posiciona abaixo da última peça colocada;

c) ao criar uma peça, essa é adicionada em um vetor de peças do exercício após a última peça colocada;

d) ao trocar os objetos de local, o vetor de peças do exercício é atualizado conforme a ordem das peças colocadas;

43

armazenada;

f) ao passar com o mouse sobre as janelas é exibido um contorno em amarelo para identificar onde está o foco do mouse;

g) ao selecionar uma peça é exibido o código-fonte na janela de códigos correspondente a peça e suas filhas, quando houver;

h) a cada nova peça seu identificador é incrementado e quando a mesma é removida o identificador é decrementado e os objetos da lista são atualizados.

Documentos relacionados