import processing.dxf.*; import peasy.*; //Camera PeasyCam cam; //Image PImage a; //Pixel Array int[][] aPixels; //Values extracted from the pixel array PVector[][] vectors; PVector[][] vectorStarts; //Image size int imgX=100; int imgY=100; //Font PFont fontA; //Object Cube[] c = new Cube[100]; int noOfCubes = 100; //DXF object RawDXF dxf; //Boolean switch to turn DXF recording on / off. boolean record; //Epsilon float EPS = 0.01f; //surface ArrayList traceChain; ArrayList traceSrf = new ArrayList(); void setup() { //init processing window size(800,640,P3D); //setup camera setupCamera(150); //Initialize arrays using image aPixels = new int[imgX][imgY]; vectors = new PVector[imgX][imgY]; vectorStarts = new PVector[imgX][imgY]; //load image a = loadImage("array-obama-col.jpg"); //process image for (int i=0; i< imgX; i+=1) { for (int j=0; j< imgY; j+=1) { aPixels[j][i] = a.pixels[i*imgX + j]; //r-> azi; g-> alt; b-> magnitude float azi = red(aPixels[j][i])/255 * TWO_PI; float alt = green(aPixels[j][i])/255 * TWO_PI; float mgn = blue(aPixels[j][i])/255 * TWO_PI; //values[j][i] = mgn; //calculate vector components float vx = mgn* cos(azi) * cos(alt); float vy = mgn* sin(azi) * cos(alt); float vz = mgn* sin(alt); //create vectors vectors[j][i] = new PVector(vx, vy, vz); vectorStarts[j][i] = new PVector(j,i,red(aPixels[j][i])/5); }//end for j } //end for i // Set the font and its size (in units of pixels) fontA = loadFont("CourierNew36.vlw"); textFont(fontA, 0.5); //Put the cube in the world for(int i =0; i < noOfCubes-1; i++) { PVector initPos = new PVector(-20,i,10); c[i] = new Cube(1,1,1,initPos); } //dxf record=false; } void draw() { //frameRate(1); //clean up background background(175); // Start dxf recording if record switch is on (true) if (record){ beginRaw(DXF, "dxfout_.dxf"); } //draw grid etc drawWorld(); for(int i =0; i0) // { // PVector t =(PVector)c[i].trace.get(n-1); // //vertex(t.x,t.y,t.z); // traceChain.add(t); // } // //} // } // // traceSrf.add(traceChain); // // fill(45,234,78,50); // stroke(0); // if(traceSrf.size() > 1) // { // beginShape(QUAD_STRIP); // for(int i =0; i < traceSrf.size()-1; i++) // { // ArrayList ch0 = (ArrayList)traceSrf.get(i); // ArrayList ch1 = (ArrayList)traceSrf.get(i+1); // for(int j = 0; j < min(ch0.size(),ch1.size()) - 1; j++) // { // PVector pv0 = (PVector)ch0.get(j); // PVector pv1 = (PVector)ch1.get(j); // vertex(pv0.x,pv0.y,pv0.z); // vertex(pv1.x,pv1.y,pv1.z); // } // } // endShape(); // } //draw processed image for (int i=0; i< imgX; i+=2) { for (int j=0; j< imgY; j+=2) { //set colors stroke(red(aPixels[j][i]),green(aPixels[j][i]),blue(aPixels[j][i])); fill(red(aPixels[j][i]),green(aPixels[j][i]),blue(aPixels[j][i])); //translate and draw geometry pushMatrix(); translate(vectorStarts[j][i].x, vectorStarts[j][i].y,vectorStarts[j][i].z); box(0.1); text("r:"+red(aPixels[j][i])+" g:"+green(aPixels[j][i]), 0, 0,0); line(0,0,0,vectors[j][i].x,vectors[j][i].y,vectors[j][i].z); popMatrix(); } } //dxf if (record){ endRaw(); record=false; } } boolean setupCamera(double dis) { cam = new PeasyCam(this, dis); cam.rotateX(-1.0); cam.rotateY(-0.5); cam.rotateZ(0.2); cam.lookAt(50,50,0); return true; } boolean drawWorld() { float markerSz = 5f; stroke(255,0,0); line(0f,0f,.3,markerSz ,0f,.3); stroke(0,255,0); line(0f,0f,.3,0f,-markerSz ,.3); stroke(0,0,255); line(0f,0f,.3,0f,0f,markerSz ); int gridSzX = 100; int gridSzY = 100; int gridStep=5; for(int i = 0; i <= gridSzY; i+=gridStep) { if(i%15 != 0) stroke(200,200,200); else stroke(150,150,150); line(0,i,0,gridSzX,i,0); line(i,0,0,i,gridSzY,0); } return true; } //-- CALLBACKS -------------------------------------------- void keyPressed(){ switch(key) { case 'r': break; case 'd': record=true; break; default: break; } }