Trabalho de Computação Gráfica, faculdade de Ciência da Computação, UNIOESTE (Universidade Estadual do Oeste do Paraná)
Desenvolvido por: Gabriel Mazzuco
O algoritmo de Fill Poly é um algoritmo de preenchimento de polígonos, que consiste em preencher um polígono com uma cor sólida, a partir de um ponto inicial. O algoritmo é baseado no algoritmo de Scanline, que consiste em preencher uma linha horizontal, a partir de um ponto inicial, até um ponto final.
O código usa como base um poligono definido pelo usuário, esse poligono usa seus vértices para definir aonde começa e termina o preenchimento. Definido pelo usuário também as cores que serão usadas para o preenchimento, assim realizando uma interpolação, causando o efeito degradê.
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:
-
Python, versão 3.8.5 ou superior
sudo apt-get install python3.8
-
Tkinter, versão 8.6 ou superior
sudo apt-get install python3-tk
- Usado no código para a criação da interface gráfica e todas as suas funcionalidades
-
Pillow, versão 8.0.1 ou superior
pip install pillow
- Usado no código para manipulação de imagens e a possibilidade de tirar prints da tela do tkinter
-
Rich, versão 9.2.0 ou superior
pip install rich
- Usado no código para criação de tabelas e logs mais organizados sobre a demonstração do log do algoritmo
- Sistema operacional: Linux (Ubuntu 20.04.2 LTS)
- Processador: dual-core 1.6GHz ou superior
- Memória RAM: 2GB ou superior
- Espaço em disco: 1GB ou superior
Para usar o algoritmo, basta executar o arquivo `main.py` com o comando, dentro da pasta do projeto:
python3 main.py
Após isso, uma janela irá abrir, com a interface gráfica do algoritmo.
Para começar, basta clicar com o botão esquerdo do mouse, nos pontos que deseja criar o primeiro polígono, tendo a possibilidade de criar quantos polígonos quiser apenas clicando no menu Editar e clicando em Novo Polígono. Dentro deste menu, também é possível editar os polígonos já criados, excluindo-os ou limpar completamente a tela.
Após criar os polígono, é possivel escolher várias opções de edição para o poligo Pintar arestas, Pintar vertices, Pintar poligono, tudo isso sendo possivel apenas se escolher a cor do objeto no mesmo menu, isso irá abrir uma palheta de cores do próprio tkinter, onde é possivel escolher a cor desejada.
Para usar as opções nos poligonos, é atribuido o botão direito para realizar todas as ações esperadas.
Existe também o menu de Debug aonde é possivel ver o log do algoritmo, aonde é mostrado como está a disposição das listas que o programa utiliza na sua execução, dentre as suas informações, é possivel ver quais são os polígonos que estão sendo preenchidos, quais são as arestas que estão sendo pintadas, quais são os vértices que estão sendo pintados, quais são os polígonos que estão sendo apenas pintados, e quais são os vértices globais que estão sendo criados no formato de tabelas, usadas pela biblioteca Rich, tudo sendo mostrada no terminal.
Para realizar o uso do algoritmo de Fill Poly que é o intuito do projeto, basta clicar no menu Pintar e clicar em Fill Poly também com o botão direito do mouse, depois de ter escolhido um cor para cada vértice do polígono.
É possivel ver de forma visual quais cores foram escolhidas para cada vértice pois ele estará pintado com a cor escolhida.
Caso os três vértices do polígono não tenham sido pintados, o algoritmo irá retornar uma mensagem de erro, informando que não é possivel realizar o preenchimento do polígono. Portanto, é necessário pintar os três vértices do polígono para que o algoritmo funcione corretamente.
Interessante ressaltar que o algoritmo é bem lerdo e não é possivel atualizar a tela a todo momento, por exemplo quando editamos os vértices de um polígono, ele não atualiza o fill poly iterativamente, portanto devemos clicar no menu Refresh e clicar em Refresh Fill Poly para atualizar os poligonos que estão preenchidos mas agora nas suas novas posições.
Para carregar os dados de um arquivo, basta clicar no menu Arquivo e clicar em Carregar dados, isso irá abrir uma janela para escolher o arquivo que deseja carregar.
Primeiramente deve ter sido salvo previamente um arquivo com os dados de um polígono, para isso basta clicar no menu Arquivo e clicar em Salvar dados, isso irá abrir uma janela para escolher o local e o nome do arquivo que deseja salvar, tudo que está na tela será salvo no arquivo.
O arquivo é salvo no formato .tk com o nome indicado pelo próprio usuário, sendo com o seguinte formato:
vertices_globais = [(x1, y1), (x2, y2), (x3, y3)]
lista_poligonos_preenchidos = [Px, [[(V1, V2), (R, G, B)], [(V2, V3), (R, G, B)], [(V3, V1), (R, G, B)]]]
lista_arestas_pintadas = [[(x1, y1), (x2, y2)], (R, G, B), (a1, a2), Px]
lista_vertices_pintados = [(x1, y1), (R, G, B), Px, Vx]
lista_poligonos_apenas_pintados = [Px, (R, G, B)]
Onde:
vertices_globais
: é uma lista com todos os vértices que foram criados na tela, sendo que cada vértice é uma tupla com as coordenadas x e y do vérticelista_poligonos_preenchidos
: é uma lista com todos os polígonos que foram preenchidos com o algoritmo de fill poly, sendo que cada polígono dentro da lista é dado pelo seu número Px, coordenadas do vértice V1, V2 e V3 que formam o polígono, e a cor R, G e B que foi escolhida para o polígonolista_arestas_pintadas
: é uma lista com todas as arestas que foram pintadas, sendo que cada aresta dentro da lista é dada pelas coordenadas x1, y1, x2 e y2 que formam a aresta, e a cor R, G e B que foi escolhida para a arestalista_vertices_pintados
: é uma lista com todos os vértices que foram pintados, sendo que cada vértice dentro da lista é dado pelas coordenadas x e y do vértice, e a cor R, G e B que foi escolhida para o vértice, além do número Px que indica qual polígono o vértice pertence e o número Vx que indica qual vértice do polígono o vértice élista_poligonos_apenas_pintados
: é uma lista com todos os polígonos que foram apenas pintados com cores simples, sem usar o algoritmo de fill poly, sendo que cada polígono dentro da lista é dado pelo seu número Px, e a cor R, G e B que foi escolhida para o polígono
- INE 5420 - Computação Gráfica - Aula 11.1.Rasterização
- Scan Line Polygon Fill Algorithm | Example Of Scan Line Polygon Fill Algorithm | Computer Graphics
- OpenAI. (2023). GPT-3.5: Modelo de Linguagem Pré-Treinado
- BingAi. (2023). GPT-4.0: Modelo de Linguagem Pré-Treinado
- OpenAI e GitHub. (Ano). GitHub Copilot: Ferramenta de Autocompletar de Código