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:
  1. Ferramenta de criação de segmentos de retas;
  2. ferramenta de criação de elipses;
  3. ferramenta de agrupamento de figuras;
  4. ferramenta de desagrupamento de figuras;
  5. manipulação de cores, tanto de preenchimento quanto de bordas (linhas);
  6. salvar arquivos;
  7. 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, y1ní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:

  1. Criação de Segmentos de Reta:

  2. 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.
  3. Criação de Elipses:

  4. 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.
  5. Agrupamentos de Figuras:

  6. 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.
  7. Desagrupamento de figuras:

  8. 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.
  9. Manipulação de Cores:

  10. 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".
  11. 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.