Understanding Gestaltung's generative design
In this exercise text is drawn and manipulated using input box, checkbox and sliders. The sketch also uses a gradient image for stroke and fill colour.
'use strict';
// Declare variables for text
let font;
let textImg;
let textTyped = 'ABC';
let fontSize = 100;
// Preload the font
function preload(){
    font = loadFont('../data/freeSansBold.ttf');
}
function setup(){
    noStroke();
    // Create and call canvas from the DOM
    let canvas = createCanvas(730, 500);
    canvas.parent('#canvasHolder');
    // Call the text graphic function
    setUptext();
    // Add the graphic created to the screen
    image(textImg, 0, 0);
}
function draw(){
}
// Create image using graphics
function setUptext(){
    textImg = createGraphics(width, height);
    textImg.pixelDensity(1);
    textImg.background(255);
    textImg.textAlign(CENTER, CENTER);
    // Use the preloaded font
    textImg.textFont(font);
    textImg.textSize(fontSize);
    textImg.text(textTyped, width/2, height/2 - 100);
    textImg.loadPixels();
}
'use strict';
let font;
let textImg;
let fontSize = 150;
let textTyped = 'ABC';
// Add a variable for typed text
let inputTxt;
// Declare a radius for the ellipse
let circleRadius = 10;
function preload(){
    font = loadFont('../data/freeSansBold.ttf');
}
function setup(){
    noStroke();
    let canvas = createCanvas(730, 500);
    canvas.parent('#canvasHolder');
    // Create input text box 
    inputTxt = createInput('');
    inputTxt.class('inputTxt');
    inputTxt.changed(update);
    inputTxt.parent('#textController');
    setUpText();
}
function draw() {
    background(255);
    // Create a grid in x and y direction
    for(let y = 0; y < height; y += circleRadius) {
        for(let x = 0; x < width; x += circleRadius) {
            // Call each pixel in the image by using the index value
            let index = (x + y * textImg.width) * 4;
            // Create the rgb value using the index
            let r = textImg.pixels[index];
            // Draw the ellipse at the x and y position where red value is less than 128
            if(r < 128) {
                noFill();
                stroke(0); 
                ellipse(x, y, circleRadius, circleRadius);
            }
        }
    }
}
// Create an update function to update the DOM fields
function update() {
    // If there is an input get the value and draw it on canvas
    if(inputTxt) {
        textTyped = inputTxt.value();
        setUpText();
    }
}
function setUpText(){
    textImg = createGraphics(width, height);
    textImg.pixelDensity(1);
    textImg.background(255);
    textImg.textAlign(CENTER, CENTER);
    textImg.textFont(font);
    textImg.textSize(fontSize);
    textImg.text(textTyped, width/2, height/2 - 100);
    textImg.loadPixels();
}
'use strict';
let font;
let textImg;
let fontSize = 150;
let textTyped = 'ABC';
let inputTxt;
let circleRadius = 10;
// Declare variables for the fill checkbox
let checkBox;
let filled = 1;
function preload(){
    font = loadFont('../data/freeSansBold.ttf');
}
function setup(){
    noStroke();
    let canvas = createCanvas(730, 500);
    canvas.parent('#canvasHolder');
     // Create checkbox
     checkBox = createCheckbox('Fill', true);
     checkBox.parent('#fillController');
     checkBox.changed(update);
    inputTxt = createInput('ABC');
    inputTxt.class('inputTxt');
    inputTxt.changed(update);
    inputTxt.parent('#textController');
    setUpText();
}
function draw() {
    background(255);
    for(let y = 0; y < height; y += circleRadius) {
        for(let x = 0; x < width; x += circleRadius) {
            let index = (x + y * textImg.width) * 4;
            let r = textImg.pixels[index];
            if(r < 128) {
               // If the variable filled is true
               if (filled) {
                    // Then draw the ellipse with a fill
                    fill(0);
                    noStroke();
                    ellipse(x, y, circleRadius, circleRadius);
                } else {
                    // Else draw the ellipse with just a stroke
                    noFill();
                    stroke(0);
                    ellipse(x, y, circleRadius, circleRadius);
                }
            }
        }
    }
}
function update() {
    if(inputTxt) {
        textTyped = inputTxt.value();
        setUpText();
    }
     // If the checkbox is checked, fill the ellipse
     if(checkBox.checked() == 1) {
        filled = 1;
    } else {
        filled = 0;
    }
}
function setUpText(){
    textImg = createGraphics(width, height);
    textImg.pixelDensity(1);
    textImg.background(255);
    textImg.textAlign(CENTER, CENTER);
    textImg.textFont(font);
    textImg.textSize(fontSize);
    textImg.text(textTyped, width/2, height/2 - 100);
    textImg.loadPixels();
}
'use strict';
let font;
let textImg;
// Declare point density for text
let pointDensity = 10;
let textTyped = 'ABC';
let inputTxt;
let checkBox;
let filled = 1;
// Add the slider for circle radius
let radiusSlider;
let circleRadius = 5;
// Add the slider for font size
let sizeSlider;
let fontSize = 150;
function preload(){
    font = loadFont('../data/freeSansBold.ttf');
}
function setup(){
    noStroke();
    let canvas = createCanvas(730, 500);
    canvas.parent('#canvasHolder');
    inputTxt = createInput('ABC');
    inputTxt.class('inputTxt');
    inputTxt.changed(update);
    inputTxt.parent('#textController');
    checkBox = createCheckbox('Fill', true);
    checkBox.parent('#fillController');
    checkBox.changed(update);
    // Create sliders 
    radiusSlider = createSlider(5, 20, circleRadius);
    radiusSlider.parent('#radiusController');
    radiusSlider.mouseReleased(update);
    sizeSlider = createSlider(50, 700, fontSize);
    sizeSlider.parent('#sizeController');
    sizeSlider.mouseReleased(update);
    setUpText();
}
function draw() {
    background(255);
    for(let y = 0; y < height; y += pointDensity) {
        for(let x = 0; x < width; x += pointDensity) {
            let index = (x + y * textImg.width) * 4;
            let r = textImg.pixels[index];
            if(r < 128) {
                if (filled) {
                    fill(0);
                    noStroke();
                    ellipse(x, y, circleRadius, circleRadius);
                } else {
                    noFill();
                    stroke(0);
                    ellipse(x, y, circleRadius, circleRadius);
                }
            }
        }
    }
}
function update() {
    if(inputTxt) {
        textTyped = inputTxt.value();
        setUpText();
    }
     if(checkBox.checked() == 1) {
        filled = 1;
    } else {
        filled = 0;
    }
    // Get the value from the radius slider
    circleRadius = radiusSlider.value();
    // Get the value from the font size slider
    fontSize = sizeSlider.value();
}
function setUpText(){
    textImg = createGraphics(width, height);
    textImg.pixelDensity(1);
    textImg.background(255);
    textImg.textAlign(CENTER, CENTER);
    textImg.textFont(font);
    textImg.textSize(fontSize);
    textImg.text(textTyped, width/2, height/2 - 100);
    textImg.loadPixels();
}
'use strict';
let font;
let textImg;
let pointDensity = 10;
let gradient;   // Declare the gradient variable 
let textTyped = 'ABC';
let inputTxt;
let checkBox;
let filled = 1;
let radiusSlider;
let circleRadius = 5;
let sizeSlider;
let fontSize = 150;
function preload(){
    font = loadFont('../data/freeSansBold.ttf');
    // Preload a gradient image to be used as fill colour
    gradient = loadImage('../images/gradient.png');
}
function setup(){
    noStroke();
    let canvas = createCanvas(730, 500);
    canvas.parent('#canvasHolder');
    inputTxt = createInput('ABC');
    inputTxt.class('inputTxt');
    inputTxt.changed(update);
    inputTxt.parent('#textController');
    checkBox = createCheckbox('Fill', true);
    checkBox.parent('#fillController');
    checkBox.changed(update);
    radiusSlider = createSlider(5, 20, circleRadius);
    radiusSlider.parent('#radiusController');
    radiusSlider.mouseReleased(update);
    sizeSlider = createSlider(50, 700, fontSize);
    sizeSlider.parent('#sizeController');
    sizeSlider.mouseReleased(update);
    setUpText();
    // Load the image pixels
    gradient.loadPixels();
}
function draw() {
    background(255);
    for(let y = 0; y < height; y += pointDensity) {
        for(let x = 0; x < width; x += pointDensity) {
            let index = (x + y * textImg.width) * 4;
            let r = textImg.pixels[index];
            if(r < 128) {
                // Set each rgba colour to a pixel from gradient image
                let r = gradient.pixels[index];
                let g = gradient.pixels[index + 1];
                let b = gradient.pixels[index + 2];
                let a = gradient.pixels[index + 3];
                // Declare the colour using the rgba gradient pixels
                let col = color(r, g, b, a);
                
                // Set the colour and stroke to the new value
                if (filled) {
                    fill(col);
                    noStroke();
                    ellipse(x, y, circleRadius, circleRadius);
                } else {
                    noFill();
                    stroke(col);
                    ellipse(x, y, circleRadius, circleRadius);
                }
            }
        }
    }
}
function update() {
    if(inputTxt) {
        textTyped = inputTxt.value();
        setUpText();
    }
     if(checkBox.checked() == 1) {
        filled = 1;
    } else {
        filled = 0;
    }
    circleRadius = radiusSlider.value();
    fontSize = sizeSlider.value();
}
function setUpText(){
    textImg = createGraphics(width, height);
    textImg.pixelDensity(1);
    textImg.background(255);
    textImg.textAlign(CENTER, CENTER);
    textImg.textFont(font);
    textImg.textSize(fontSize);
    textImg.text(textTyped, width/2, height/2 - 100);
    textImg.loadPixels();
}
// Save canvas as a png file
function keyPressed() {
    if (key == 's' || key == 'S') saveCanvas(gd.timestamp(), '.png');
}