/** * PDF Complex * by Marius Watz (workshop.evolutionzone.com). * * Example using PDF to output complex 3D geometry for print. * Press "s" to save a PDF. */ import processing.opengl.*; import processing.pdf.*; // Trig lookup tables borrowed from Toxi. Cryptic but effective float sinLUT[]; float cosLUT[]; float SINCOS_PRECISION=1.0; int SINCOS_LENGTH= int((360.0/SINCOS_PRECISION)); // System data boolean dosave=false; int num; float pt[]; int style[]; void setup() { size(600, 600, OPENGL); frameRate(24); background(255); // Fill the tables sinLUT=new float[SINCOS_LENGTH]; cosLUT=new float[SINCOS_LENGTH]; for (int i = 0; i < SINCOS_LENGTH; i++) { sinLUT[i]= (float)Math.sin(i*DEG_TO_RAD*SINCOS_PRECISION); cosLUT[i]= (float)Math.cos(i*DEG_TO_RAD*SINCOS_PRECISION); } num = 150; pt = new float[6*num]; // rotx, roty, deg, rad, w, speed style = new int[2*num]; // color, render style // Set up arc shapes int index=0; float prob; for (int i=0; i90) pt[index]=(int)random(8,27)*10; pt[index++] = int(random(2,50)*5); // Radius. Space them out nicely pt[index++] = random(4,32); // Width of band if(random(100)>90) pt[index]=random(40,60); // Width of band pt[index++] = radians(random(5,30))/5; // Speed of rotation // get colors prob = random(100); if(prob<30) style[i*2]=colorBlended(random(1), 255,0,100, 255,0,0, 210); else if(prob<70) style[i*2]=colorBlended(random(1), 0,153,255, 170,225,255, 210); else if(prob<90) style[i*2]=colorBlended(random(1), 200,255,0, 150,255,0, 210); else style[i*2]=color(255,255,255, 220); if(prob<50) style[i*2]=colorBlended(random(1), 200,255,0, 50,120,0, 210); else if(prob<90) style[i*2]=colorBlended(random(1), 255,100,0, 255,255,0, 210); else style[i*2]=color(255,255,255, 220); style[i*2+1]=(int)(random(100))%3; } } void draw() { if(dosave) { // set up PGraphicsPDF for use with beginRaw() PGraphicsPDF pdf = (PGraphicsPDF)beginRaw(PDF, "pdf_complex_out.pdf"); // set default Illustrator stroke styles and paint background rect. pdf.strokeJoin(MITER); pdf.strokeCap(SQUARE); pdf.fill(0); pdf.noStroke(); pdf.rect(0,0, width,height); } background(0); int index=0; translate(width/2,height/2,0); rotateX(PI/6); rotateY(PI/6); for (int i=0; i