iD3o3
YaBB Newbies
Offline
Posts: 1
Replace 2D primitive with a user SVG
Mar 19th , 2010, 12:10am
Hi!.. I'm doing some experiments and am looking to import a user-made SVG to replace a standard 2D primitive.. (such as rect / ellipse) .. Is there a general rule I can follow to write (or rewrite) code to replace a 2D rectangle with a more complex SVG/Pshape/etc.. (not always possible, I know! :]) Heres an example below .. Boxfitting by J Tarbell.. Which adjustments to be made to replace the Box with a SVG? .. THANKS! :] // Box Fitting // j.tarbell January, 2004 // Processing 0085 Beta syntax update April, 2005 // Albuquerque, New Mexico // complexification.net int num = 0; int maxnum = 1000; int dim = 600; Box[] boxes; int maxpal = 256; int numpal = 0; color[] goodcolor = new color[maxpal]; // MAIN ----------------------------------------------------------- void setup() { size(600,600,P3D); // size(dim,dim,P3D); frameRate(30); rectMode(CENTER); noStroke(); takecolor("bosque2.gif"); background(255); boxes = new Box[maxnum]; for (int i=0;i<3;i++) { makeNewBox(); } } void draw() { for (int n=0;n<num;n++) { boxes[n].draw(); } } void makeNewBox() { if (num<maxnum) { boxes[num] = new Box(); num++; } } // OBJECTS ------------------------------------------------------ // space filling box class Box { int x; int y; int d; color myc; boolean okToDraw; boolean chaste = true; Box() { // random initial conditions selfinit(); } void selfinit() { // position okToDraw = false; x = int(random(dim)); y = int(random(dim)); d = 0; myc = somecolor(1.0*y/dim); } void draw() { expand(); if (okToDraw) { fill(myc); rect(x,y,d,d); } } void expand() { // assume expansion is ok d+=2; // look for obstructions around perimeter at width d int obstructions = 0; for (int j=int(x-d/2-1);j<int(x+d/2);j++) { int k=int(y-d/2-1); obstructions += checkPixel(j,k); k=int(y+d/2); obstructions += checkPixel(j,k); } for (int k=int(y-d/2-1);k<int(y+d/2);k++) { int j=int(x-d/2-1); obstructions += checkPixel(j,k); j=int(x+d/2); obstructions += checkPixel(j,k); } if (obstructions>0) { // reset selfinit(); if (chaste) { makeNewBox(); chaste = false; } } else { okToDraw = true; } } int checkPixel(int x, int y) { color c = get(x, y); if (brightness(c)<254) { // a lit pixel has been found return 1; } else { return 0; } } } // COLOR METHODS --------------------------------------------------- color somecolor(float p) { // pick color according to range return goodcolor[int(p*numpal)]; } void takecolor(String fn) { PImage b; b = loadImage(fn); image(b,0,0); for (int x=0;x<b.width;x++){ for (int y=0;y<b.height;y++) { color c = get(x,y); boolean exists = false; for (int n=0;n<numpal;n++) { if (c==goodcolor[n]) { exists = true; break; } } if (!exists) { // add color to pal if (numpal<maxpal) { goodcolor[numpal] = c; numpal++; } else { break; } } } } } // j.tarbell January, 2004