Skip to content

Instantly share code, notes, and snippets.

@edmorais
Last active April 22, 2016 16:04
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/839a05f7e8f16cdc2380bd0cf22e07e9 to your computer and use it in GitHub Desktop.
Save edmorais/839a05f7e8f16cdc2380bd0cf22e07e9 to your computer and use it in GitHub Desktop.
Pequena ferramenta de desenho com controlos de teclado. http://www.openprocessing.org/sketch/346629
/*_ ___ ___ ___ __ _ __
| | / __|_ _|_ ) \/ |/ /
| |__\__ \| | / / () | / _ \
|____|___/___/___\__/|_\___/
Aula de 18/04/2016:
Pequena ferramenta de desenho com controlos de teclado.
Por Eduardo Morais / FBAUP - www.eduardomorais.pt/fbaup/
*/
/*
Declarações de variáveis:
*/
color cor1 = color(255, 192);
color cor2 = color(255, 255, 0, 192);
color cor3 = color(255, 0, 255, 192);
color cor4 = color(0, 255, 255, 192); // 'paleta' de 4 cores à escolha.
color cor; // cor actualmente seleccionada.
boolean efeito = true; // 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 = cor1; // seleccionamos uma cor inicial.
}
/*
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, 20, 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(pmouseX, pmouseY, mouseX+random(-5, 5), mouseY+random(-5, 5));
}
}
/*
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 1-4 escolher a cor actual (copiamos o valor de uma das variáveis que define a nossa 'paleta'):
*/
if (key == '1') cor = cor1;
if (key == '2') cor = cor2;
if (key == '3') cor = cor3;
if (key == '4') cor = cor4;
/*
Vamos por a tecla C a limpar o ecrã, prevendo maiúsculas - caso o caps lock esteja ligado - e minúsculas:
*/
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