Répartition des allocataires de l'APA
6. Fonctions logarithmes
O visualizador gráfico trata-se de um painel que é usado pelos métodos da API de Java de gráficos 2D com um moldura para desenhar as células de um AC. A representação das células é feita por quadrados com 20 píxeis de lado e o painel do visualizador é também um quadrado com 600 píxeis de lado. Assim, na área do painel é possível mostrar de uma vez só 30x30 células. As dimensões adotadas advêm da opção de proporcionar uma vista imediata de um AC na janela principal da aplicação e da limitação imposta da área da mesma, de forma a conseguir integrar o maior número de funcionalidades no mesmo espaço disponível.
A representação gráfica de um AC é visível assim que o utilizador especifica as suas dimensões e quando são reajustadas, o número de células no painel é também reajustado removendo ou adicionando células. Por especificação ou reajustamento, todas as novas células que são incluídas
5.5 Gestão de gráficos 105
na matriz do AC são inicializadas com o estado zero. A informação relativa a cada célula é guardada num vetor criado pela aplicação cujo tipo de dados são objetos da classe apresentada na listagem 5.6.
Listing 5.6: Classe que implementa uma célula de um AC
p u b l i c s t a t i c c l a s s C e l l { P o i n t 2 D p o s ; P o i n t 2 D i n i t P o s ; P o i n t 2 D c o o r d s ; i n t s t a t e ; i n t p a l l e t e I D ; ( . . . ) }
A classe Point2D implementa um ponto em coordenadas cartesianas (x, y). Os objetos initPos,
pos e coords, guardam a informação relativa às coordenadas iniciais em píxeis da posição da
célula no painel, que correspondem a um offset nulo em relação à sua posição inicial, guardam as coordenadas em píxeis da posição atual da célula no painel, pelo que a diferença entre estas e às coordenadas iniciais indicam o offset de posição e guardam as coordenadas da célula (i, j) da linha e coluna da matriz onde se encontra, respetivamente. Cada célula também mantém a sua informação de estado e o número de série interno associado à palete de cor que lhe está atribuída. Quando é feita uma especificação, ajuste das dimensões do AC ou atribuição de uma nova palete de cores, o conteúdo do painel do visualizador gráfico deve ser alterado. Para isso, a API de Java de gráficos implementa o método paintComponent() que permite redesenhar o conteúdo do painel, e a sua invocação é feita indiretamente ao invocar o método repaint() sempre que é necessário fazer alterações aos gráficos. O método paintComponent() deve ser reescrito (override), isto é, substituído pelo o método original mas implementando a mesma a funcionalidade imposta pela super classe desse método. Para redesenhar os gráficos, o método paintComponent() lê o conteúdo do vetor de células e, uma a uma, invoca os métodos para desenhar um quadrado cujas coordenadas em píxeis são dadas pelo objeto de classe pos. O número de série de palete de cor é usado para consultar o banco de paletes de cor e obter a cor que mapeia o estado atual da célula, preenchendo assim o quadrado desenhado.
A gestão de gráficos implementa funcionalidades que permitem ao utilizador interagir com o painel do visualizador fazendo uso do rato, para melhorar a navegação, detetando as suas ações e desplotando eventos para as processar. Na lista abaixo são explicadas estas funcionalidades. Leitura de coordenadas e estado Quando o utilizador passa o cursor do rato por cima da matriz
de células do AC, é possível obter de imediato as coordenadas (i, j) da matriz e o estado da célula para a qual o cursor aponta.
Deslocamento da matriz do AC Uma vez que na área visível do painel de gráficos só cabem 30x30 células, para ACs de dimensões superiores, o utilizador, com o botão esquerdo do rato premido, pode deslocar a matriz para visualizar as células fora da área visível. Enquanto a matriz é deslocada, de forma a orientar o utilizador, no exterior e nos extremos do painel são indicadas as coordenadas das células que se encontram nos cantos da área visível. O método que implementa esta funcionalidade implementa os cálculos necessários para determinar as coordenadas em píxeis da nova posição de cada célula. O deslocamento corresponde à diferença entre as coordenadas atuais do cursor e a coordenadas quando o botão do rato foi clicado. A partir daí, o deslocamento, positivo ou negativo, é somado às coordenadas atuais da célula. Note-se que a origem dos eixos é no canto superior esquerdo, sendo que x cresce para a direita e y para baixo e o deslocamento é limitado em função das dimensões em píxeis da matriz para que a sua representação gráfica se mantenha dentro dos limites
do painel. O offset máximo de deslocamento (imaxos , jmaxos ) indica o número de píxeis a que
uma célula pode ser deslocada em x e y em relação às coordenadas iniciais (i0, j0) e é dado
por (l ∗ c) − L e (l ∗ r) − L, respetivamente, em que l é o lado do quadrado de uma célula e L o lado do painel, ambos em píxeis, e c é o número de colunas e r o número de linhas. Sendo l = 20 e L = 600, não é permitido deslocar as células da matriz em x se (l ∗ c) ≤ L e em y se (l ∗ r) ≤ L, pelo que o offset máximo de deslocamento é igual a zero com r ≤ 30 e
c≤ 30. Assim, o deslocamento em x ou y só ocorre se as novas coordenadas da célula (i, j)
satisfazerem a condição (i0, j0) − (imaxos , jmaxos ) < (i, j) < (i0, j0), em que a primeira condição
refere-se à limitação do deslocamento negativo e a segunda à do deslocamento positivo. A figura 5.9 ilustra o que foi explicado.
Atribuição de estado A partir da palete de cores ativa e consultando o mapeamento cor-estado respetivo, o utilizador pode selecionar a cor e “pintar” o quadrado correspondente à célula cujo estado quer alterar. A cor é selecionada clicando com o botão esquerdo do rato na palete de cores ativa e, para “pintar” um quadrado, clicar com o botão direito do rato em cima do mesmo no painel. Internamente, de facto, não se troca a cor do quadrado mas sim o estado da célula que ele representa uma vez que uma célula não retém a informação de cor. Ao trocar o estado e na invocação do método paintComponent() pelo Java, a partir do número de série interno da palete de cor atribuída à célula, consulta-se o mapeamento estado-cor e obtém-se a nova cor para o preenchimento do quadrado.
“Pintura” rápida O clique no botão do meio do rato ativa/desativa o modo de “pintura” rápida. Deslocando apenas o cursor por cima da matriz de células, sem clicar com o botão direito do rato, o estado das células é modificado de imediato e a cor dos quadrados associados é trocada para a cor selecionada da palete ativa.
Zoom in e zoom out Ao deslocar para cima ou para baixo o botão de deslocamento do rato, é possível fazer zoom in e zoom out, respetivamente, de forma a visualizar o AC todo na área disponível do painel gráfico. Da mesma forma que no deslocamento da matriz, o zoom out só é permitido, e só faz sentido, se o AC tiver dimensões superiores a 30x30 células. Esta