// P_2_3_1_01
//
// Generative Gestaltung, ISBN: 978-3-87439-759-9
// First Edition, Hermann Schmidt, Mainz, 2009
// Hartmut Bohnacker, Benedikt Gross, Julia Laub, Claudius Lazzeroni
// Copyright 2009 Hartmut Bohnacker, Benedikt Gross, Julia Laub, Claudius Lazzeroni
//
// http://www.generative-gestaltung.de
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* draw tool. draw with a rotating line.
*
* MOUSE
* drag : draw
*
* KEYS
* 1-4 : switch default colors
* del, backspace : clear screen
* d : reverse direction and mirrow angle
* space : new random color
* arrow left : rotaion speed -
* arrow right : rotaion speed +
* arrow up : line length +
* arrow down : line length -
* s : save png
*/
var lineLength = 0;
var angle = 0;
var angleSpeed = 1.0;
var col;
var state = 1;
function setup() {
// use full screen size
createCanvas(780, 780);
background(255);
smooth();
cursor(CROSS);
}
function draw() {
if (mouseIsPressed) {
if (state == 1){
push();
col = color(181,157,0,100);
strokeWeight(1.0);
noFill();
stroke(col);
translate(mouseX,mouseY);
rotate(radians(angle));
line(0, 0, lineLength, 0);
pop();
angle += angleSpeed;
}
if (state == 2){
push();
col = color(0,130,164,100);
strokeWeight(1.0);
noFill();
stroke(col);
translate(mouseX,mouseY);
rotate(radians(angle));
line(0, 0, lineLength, 0);
pop();
angle += angleSpeed;
}
if (state == 3){
push();
col = color(87,35,129,100);
strokeWeight(1.0);
noFill();
stroke(col);
translate(mouseX,mouseY);
rotate(radians(angle));
line(0, 0, lineLength, 0);
pop();
angle += angleSpeed;
}
if (state == 4){
push();
col = color(197,0,123,100);
strokeWeight(1.0);
noFill();
stroke(col);
translate(mouseX,mouseY);
rotate(radians(angle));
line(0, 0, lineLength, 0);
pop();
angle += angleSpeed;
}
}
}
function mousePressed() {
// create a new random line length
lineLength = random(70, 200);
}
function keyTyped() {
if (key == 's' || key == 'S') save("P_2_3_1_01.png");
// reverse direction and mirrow angle
if (key=='d' || key=='D') {
angle = angle + 180;
angleSpeed = angleSpeed * -1;
}
//default colors from 1 to 4
if (key == '1') state = 1;
if (key == '2') state = 2;
if (key == '3') state = 3;
if (key == '4') state = 4;
}
function keyPressed() {
if (keyCode == DELETE || keyCode == BACKSPACE) background(255);
if (keyCode == UP_ARROW) lineLength += 10;
if (keyCode == DOWN_ARROW) lineLength -= 10;
if (keyCode == LEFT_ARROW) angleSpeed -= 0.5;
if (keyCode == RIGHT_ARROW) angleSpeed += 0.5;
}