Skip to content

Instantly share code, notes, and snippets.

@edmorais
Last active May 10, 2016 13:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edmorais/419f220ae4938e4607d3a107e686fbc8 to your computer and use it in GitHub Desktop.
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).
/*_ ___ ___ ___ __ _ __
| | / __|_ _|_ ) \/ |/ /
| |__\__ \| | / / () | / _ \
|____|___/___/___\__/|_\___/
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