thread drawing
Inspired by a well known viral project of drawing renaissance portraits with thread, we set out to verify it for ourselves [via Processing, Grasshopper, and a robot].
Prototype was successfully completed with an Abe (the ABB robot arm) and Ryan (human) from GRAYSHED.
main file below - ask if you need more
import toxi.geom.*; import toxi.geom.mesh.*; import toxi.geom.mesh.subdiv.*; import toxi.geom.mesh2d.*; import toxi.math.*; import toxi.math.conversion.*; import toxi.math.noise.*; import toxi.math.waves.*; import toxi.util.*; import toxi.util.datatypes.*; import toxi.util.events.*; PImage img; // Declare a variable of type PImage boolean showImg = false; boolean showSImg = true; boolean showLine = false; boolean halt = false; SmartLine[] SLarr; int N = 5000; //how many lines to place in the beginning SmartPixels SP; Perimeter P; void setup() { size(800,800,P3D); //img = loadImage("dot.png"); //img = loadImage("dotR.png"); //img = loadImage("RadialGradient100.png"); //img = loadImage("mona100.jpg"); //img = loadImage("mona100R.jpg"); img = loadImage("mona100.png"); //img = loadImage("mona100R.png"); //setup Perimeter Vec2D A = new Vec2D (0,0); Vec2D B = new Vec2D (img.width,0); Vec2D C = new Vec2D (img.width,img.height); Vec2D D = new Vec2D (0,img.height); println("END OF SETUPss"); P = new Perimeter(new Vec2D[] ); //accepts edge vertices SP = new SmartPixels(); SLarr = new SmartLine[N]; SLarr[0] = new SmartLine ( P.nails.get(0).get(0) , 0 ); //println( "searching for 1st Best Path" ); SLarr[0].searchForBestPath(); println(); println("END OF SETUP"); //END OF SETUP } void draw() { translate(width/2-img.width/2,height/2-img.height/2,600); background(255); // Draw the image to the screen at coordinate (0,0) if (showImg) image(img,0,0); if (showSImg) image(SP.strengthImg, 0,0); //P.drawNails(); if ((frameCount) < SLarr.length) { SLarr[frameCount] = new SmartLine ( SLarr[frameCount-1].targetNail , SLarr[frameCount-1].targetVecId ); SLarr[frameCount].searchForBestPath(); SP.updateStrengthImg(); } if (showLine) {for (int i=0; ((i<=frameCount)&&(i<N)); i++) } //XW L = new XW (50,50,mouseX, mouseY ); //L.drawLine(); println(frameCount + " ***ENDFRAME"); //delay(500); //while (frameCount > 4) void keyPressed() { //print(key); if (key == 'i') { showImg = !showImg; } if (key == 's') { showSImg = !showSImg; } if (key == 'l') { showLine = !showLine; } if (key == 'h') { halt = !halt; } }