java - Strange Processing.dxf issue -
i have been tried study code , fine until press r save dxf output down.
java.lang.arrayindexoutofboundsexception java.lang.nullpointerexception @ processing.mode.java.runner.runner.findexception(runner.java:926) @ processing.mode.java.runner.runner.reportexception(runner.java:871) @ processing.mode.java.runner.runner.exceptionevent(runner.java:797) @ processing.mode.java.runner.runner$2.run(runner.java:686) it appears errors below
i thought code problem until tried basic simpleexport sample in processing dfx library. same error popup , sketch played not responding. besides,a file written disk, empty.
any ideas?
***update: using processing 2.1.1, tested in 32bit , 64bit ver
i had issues processing 2.0 , dxf a couple of years ago , whipped out basic dxf writing function. here's same approach used on code linked to:
import ddf.minim.analysis.*; import ddf.minim.*; //audio minim minim; audioinput microphone; fft fftlog; //audio-driven mesh waveform audio3d; //dxf output boolean record; printwriter out; void setup() { size(1250,750,p3d); //screen proportions nostroke(); minim = new minim(this); microphone = minim.getlinein(minim.stereo, 4096); background(255); fftlog = new fft(microphone.buffersize(),microphone.samplerate()); fftlog.logaverages(1,2); //adjust numbers adjust spacing; float w = float (width/fftlog.avgsize()); float x = w; float y = 0; float z = 50; float radius = 10; audio3d = new waveform(x,y,z,radius); } void draw() { background(0); directionallight(126,126,126,sin(radians(framecount)),cos(radians(framecount)),1); ambientlight(102,102,102); if (framecount>200) { for(int = 0; < fftlog.avgsize(); i++){ float zoom = 1; float jitter = (fftlog.getavg(i)*2); //println(jitter); pvector foc = new pvector(audio3d.x+jitter, audio3d.y+jitter, 0); pvector cam = new pvector(zoom, zoom, -zoom); camera(foc.x+cam.x+50,foc.y+cam.y+50,foc.z+cam.z,foc.x,foc.y,foc.z,0,0,1); } } //update fft fftlog.forward(microphone.mix); //update 3d mesh audio3d.update(); audio3d.textdraw(); audio3d.plottrace(); } void stop(){ microphone.close(); minim.stop(); super.stop(); } class waveform { float x,y,z; float radius; pvector[] pts = new pvector[fftlog.avgsize()]; pvector[] trace = new pvector[0]; waveform(float incomingx, float incomingy, float incomingz, float incomingradius) { x = incomingx; y = incomingy; z = incomingz; radius = incomingradius; } void update() { plot(); } void plot() { for(int = 0; < fftlog.avgsize(); i++) { int w = int(width/fftlog.avgsize()); x = i*w; y = framecount*5; z = height/4-fftlog.getavg(i)*4; //change multiplier reduces height default '10' stroke(0); point(x, y, z); pts[i] = new pvector(x, y, z); //increase size of array trace length+1 trace = (pvector[]) expand(trace, trace.length+1); //always next last trace[trace.length-1] = new pvector(pts[i].x, pts[i].y, pts[i].z); } } void textdraw() { for(int =0; i<fftlog.avgsize(); i++){ pushmatrix(); translate(pts[i].x, pts[i].y, pts[i].z); rotatey(pi/2); rotatez(pi/2); fill(255,200); text(round(fftlog.getavg(i)*100),0,0,0); popmatrix(); } } void plottrace() { stroke(255,80); int inc = fftlog.avgsize(); if(record){//init dxf writing out = createwriter("output.dxf"); out.println("0"); out.println("section"); out.println("2"); out.println("entities"); } for(int i=1; i<trace.length-inc; i++) { if(i%inc != 0) { beginshape(triangle_strip); float value = (trace[i].z*100); float m = map(value, -500, 20000, 0, 255); fill(m*2, 125, -m*2, 140); vertex(trace[i].x, trace[i].y, trace[i].z); vertex(trace[i-1].x, trace[i-1].y, trace[i-1].z); vertex(trace[i+inc].x, trace[i+inc].y, trace[i+inc].z); vertex(trace[i-1+inc].x, trace[i-1+inc].y, trace[i-1+inc].z); endshape(close); if(record){//write each quad face dxf file out.println(" 0 "); out.println("3dface"); out.println(" 10"); // first x out.println(trace[i].x); out.println(" 20 "); // first y out.println(trace[i].y); out.println(" 30 "); // first z out.println(trace[i].z); out.println(" 11"); // second x out.println(trace[i-1].x); out.println(" 21 "); // second y out.println(trace[i-1].y); out.println(" 31 "); // second z out.println(trace[i-1].z); out.println(" 12"); // third x out.println(trace[i-1+inc].x); out.println(" 22 "); // third y out.println(trace[i-1+inc].y); out.println(" 32 "); // third z out.println(trace[i-1+inc].z); out.println(" 13"); // fourth x out.println(trace[i+inc].x); out.println(" 23 "); // fourth y out.println(trace[i+inc].y); out.println(" 33 "); // fourth z out.println(trace[i+inc].z); } } } if(record)//finish writing { out.println(" 0 "); out.println("endsec"); out.println(" 0"); out.println("eof"); out.flush(); out.close(); record = false; println("wrote dxf!"); } } } void keypressed() { if (key == 'r') record = true; } it's not super pretty, feel free encapsulate functionality if want, it's not bad either (it's still ascii, human readable).
here's preview rhino (after rotating mesh because processing's coordinate system isn't same):

Comments
Post a Comment