Projeto de Computação Gráfica:
Será implementada uma ferramenta para edição
e manipulação de figuras em 2D. O projeto será implementado
em C++, usando wxWindows somente nas funções para lidar com
elementos de interface gráfica. O programa terá sua própria
implementação de rotinas para desenhar as primitivas gráficas
necessárias (segmento de reta e elipse). Os recursos oferecidos
pela ferramenta serão:
-
Ferramenta de criação de segmentos de retas;
-
ferramenta de criação de elipses;
-
ferramenta de agrupamento de figuras;
-
ferramenta de desagrupamento de figuras;
-
manipulação de cores, tanto de preenchimento
quanto de bordas (linhas);
-
salvar arquivos;
-
abrir arquivos.
Os arquivos interpretados pelo programa terão o formato
de um arquivo .txt, com a seguinte representação:
Código da primitiva (0 = seg. de reta) P0(x0,
y0)
P1(x1, y1) nível código da
cor (3 números) transparente(0) ou opaco(1)
Código da primitiva (1 = elipse) xmax
xmin ymax ymin nível
código da cor (6 números) transparente(0)
ou opaco(1)
Código de agrupamento ponteiros para linha
das primitivas indicação de final |
Onde: nível significa a ordem em que as figuras
foram desenhadas, ou seja, a primeira desenhada ficará no 1º
plano (o mais distante do usuário), a segunda ficará no 2º
plano, mais próxima do usuário que a primeira, e assim sucessivamente.
Com relação às cores serão
fornecidos os respectivos códigos. Para segmentos de reta serão
necessários três códigos, e para elipses ou outras
figuras fechadas, serão necessários seis códigos,
três para borda e três para preenchimento, sendo que eles serão
separados por 0.
Já para o agrupamento (código 2) serão
fornecidos ponteiros para a linha da primitiva a ser agrupada e usado um
0 para indicar final.
As figuras criadas pelo programa serão todas 2D,
entretanto, cada figura criada pelo usuário ficará num plano
distinto das outras, ou seja, a primeira ficará no 1º plano
(o mais distante do usuário), a segunda ficará no 2º
plano e assim respectivamente. Dessa forma, no caso de duas ou mais figuras
que se sobrepõem, a última figura desenhada pelo usuário
ficará sobreposta a que foi desenhada antes. Não será
permitido ao usuário alterar a ordem entre os objetos.
A seleção de figuras será feita da
seguinte forma: ao clicar sobre a borda da figura, ela será selecionada.
Neste caso o programa desenhará pequenos retângulos de manipulação
em volta da figura. Esses retângulos poderão ser utilizados
pelo usuário para alterar sua cor, ou redimensionar a figura (alterar
o tamanho da figura). Para facilitar o uso, o programa estará atento
a uma margem de erro de 6 pixels ao redor do ponteiro do mouse para que
não necessário clicar exatamente sobre a borda da figura.
No caso de existirem duas ou mais figuras no local selecionado, o programa
irá selecionar aquela que estiver no plano mais próximo do
observador. Para selecionar mais de uma figura, o usuário deverá
clicar nas figuras desejadas, mantendo a tecla SHIFT pressionada. Neste
caso, elas serão temporariamente agrupadas para edição,
só podendo ser definitivamente agrupadas usando-se a função
de agrupamento disponível na ferramenta.
Para mover uma figura, alterando sua posição,
o usuário deverá clicar sobre a figura, manter o botão
do mouse pressionado e arrastá-la para outra posição.
Neste caso, o programa não mostrará a figura em cada passo
intermediário, mas mostrará um retângulo que mostra
os limites da figura para que o usuário tenha uma boa noção
do espaço que a figura irá ocupar na sua nova posição.
Funcionamento das ferramentas do programa:
-
Criação de Segmentos de Reta:
Após selecionada a ferramenta de criação
de segmentos de reta, o usuário deverá clicar no início
do segmento, levar o ponteiro do mouse até o fim do segmento desejado
e somente depois soltar o botão do mouse. Entre a definição
do início e do fim do segmento, o programa mostrará onde
ficaria o segmento quando desenhado entre a posição inicial
e a posição atual.
-
Criação de Elipses:
Após selecionada a ferramenta de criação
de elipses, o usuário deverá clicar na posição
inicial da elipse, mantendo o botão esquerdo do mouse pressionado
até atingir a dimensão desejada da mesma. Assim o usuário
poderá definir o tamanho da figura. Entre a definição
de posição inicial e dimensão desejada, o programa
mostrará como seria a elipse se ele soltasse o botão do mouse.
-
Agrupamentos de Figuras:
Estando as figuras já desenhadas, o usuário
deverá selecionar uma das figuras a serem agrupadas e então
mantendo a tecla SHIFT pressionada, deve-se selecionar a outra, e assim
sucessivamente, até que todas as figuras a serem agrupadas, estejam
selecionadas. Feito isso, as figuras estarão temporariamente agrupadas
para edição, só podendo ser definitivamente agrupadas
usando-se a função de agrupamento disponível na ferramenta.
Ressaltando-se que o agrupamento de figuras não
terá efeito sobre a ordem de seus planos.
-
Desagrupamento de figuras:
Sendo selecionada a figura já agrupada, deve-se
utilizar a função de
desagrupamento disponível na ferramenta. Após
o desagrupamento as figuras permanecerão selecionadas até
que o usuário clique fora da região que compreende as figuras.
Somente assim as figuras estarão desagrupadas para serem manipuladas
separadamente.
Ressaltando-se que o desagrupamento de figuras também
não terá efeito sobre a ordem de seus planos.
-
Manipulação de Cores:
Para figuras, como por exemplo, elipses, retângulos,
triângulos, deve-se selecionar a figura a ser colorida e então
ativar a função de preenchimento disponível na ferramenta,
sendo permitido a escolha da cor. No caso do usuário optar por colorir
a borda (linha) da figura, ele deverá ativar a função
cor da linha e escolher a cor desejada. Esse procedimento é o mesmo
a ser usado para colorir figuras como segmentos de retas, ou outras figuras
"abertas".
-
Manipulação de Arquivos (salvar e abrir):
A ferramenta disponibilizará as funções
salvar e abrir arquivos no formato descrito acima. Será permitido
abrir figuras já salvas, ou já definidas pela ferramenta
como formas básicas, por exemplo. Depois de salvas, as figuras não
poderão ser desagrupadas.