Last active
May 10, 2016 13:36
-
-
Save edmorais/419f220ae4938e4607d3a107e686fbc8 to your computer and use it in GitHub Desktop.
Pequena ferramenta de desenho com controlos de teclado (versão com Array de cores).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*_ ___ ___ ___ __ _ __ | |
| | / __|_ _|_ ) \/ |/ / | |
| |__\__ \| | / / () | / _ \ | |
|____|___/___/___\__/|_\___/ | |
Aula de 9/5/2016: | |
Pequena ferramenta de desenho com controlos de teclado (versão com Array de cores). | |
Por Eduardo Morais / FBAUP - www.eduardomorais.pt/fbaup/ | |
*/ | |
/* | |
Declarações de variáveis: | |
*/ | |
color cor; // cor actualmente seleccionada. | |
// Array de cores, declarado e preenchido: | |
color[] cores = { | |
color(255,255,255), // cores[0] | |
color(255,160,0), // cores[1] ... | |
color(66,160,66), | |
color(66,128,255), | |
color(0,255,70), | |
color(255,0,255), | |
color(128,128,128) // ... cores[6] | |
}; | |
boolean efeito = false; // determina se o efeito de desvanecer está ligado. | |
int contador = 1; // contador de ficheiros gravados. | |
/* | |
Função setup(): | |
Executada automaticamente no início do programa: | |
*/ | |
void setup() { | |
// já não é preciso explicar estas funções: | |
size(600, 600); | |
background(0); | |
smooth(); | |
cor = cores[0]; // seleccionamos uma cor inicial - índice 0 do array. | |
} | |
/* | |
Função draw(): | |
Executada repetidamente a cada 'frame'/fotograma de animação. | |
*/ | |
void draw() { | |
/* | |
Se o efeito de desvanecimento estiver ligado, desenhamos um rectângulo muito transparente a tapar toda a janela: | |
*/ | |
if (efeito == true) { | |
noStroke(); // não queremos que o rectângulo tenha contornos. | |
fill(0, 3); | |
rect(0, 0, width, height); | |
} | |
/* | |
O Processing dá-nos várias variáveis automáticamente preenchidas que descrevem o estado do rato. | |
Se esivermos a carregar no botão esquerdo: | |
*/ | |
if (mousePressed == true) { | |
// vamos determinar a distância entre as coordenadas do rato no anterior (pmouse) e actual draw(): | |
float d = dist(pmouseX, pmouseY, mouseX, mouseY); | |
// vamos 'mapear' a distância entre 1 e 30 para um valor entre 20 e 1. | |
// https://processing.org/reference/map_.html | |
float l = abs(map(d, 1, 30, 10, 1)); | |
// queremos que a grossura do traço varie inversamente com a velocidade do rato (distâncias maiores = traço mais fino): | |
strokeWeight(l); | |
stroke(cor); // seleccionamos a cor actual como cor de traço. | |
// desenhamos uma linha entre as coordenadas anteriores e actuais do rato (com um random para tornar o traço mais impreciso): | |
line(mouseX+random(-5, 5), mouseY+random(-5, 5), pmouseX, pmouseY); | |
} | |
} | |
/* | |
Função keyPressed(): | |
Executada automaticamente quando carregamos numa tecla! | |
Dá-nos a variável key com a tecla que carregámos. | |
*/ | |
void keyPressed() { | |
/* | |
Vamos fazer as teclas numéricas escolher a cor actual | |
(copiamos o valor de uma das variáveis que define a nossa 'paleta'). | |
O operador && significa E / AND, logo ambas as condições têm que ser verdadeiras: | |
*/ | |
if (key >= '1' && key < '1' + cores.length) { | |
// Conforme a tabela ASCII, o caracter '1' equivale ao número 49, '2' ao número 50, etc. | |
// A propriedade .length dá-nos o tamanho do array (no caso 7 elementos). | |
// Logo '1' + 7 = 56. Menor que 56 dá-nos até à tecla '7' (código 55) inclusivé. | |
// Podemos também calcular o índice conforme a tecla em que se carregou: | |
cor = cores[key - '1']; | |
} | |
/* | |
Vamos por a tecla C a limpar o ecrã, prevendo maiúsculas - caso o caps lock esteja ligado - e minúsculas. | |
O operador || significa OU / OR: | |
*/ | |
if (key == 'c' || key=='C') background(0); | |
/* | |
A tecla E liga ou desliga o efeito de desvanecimento. | |
Para tal invertemos o valor da variável booleana (true/false) com o operador de negação '!': | |
*/ | |
if (key == 'e' || key=='E') efeito = !efeito; | |
/* | |
A tecla S grava uma imagem na pasta do sketch. | |
Incrementamos o contador para que a imagem seguinte que gravarmos tenha outro nome: | |
*/ | |
if (key == 's' || key=='S') { | |
save("imagem"+contador+".png"); | |
contador++; // igual a: contador = contador + 1; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment