Cube C = new Cube(50,45,30,35,15,20,10,5,200); //Cube C = new Cube(20,20,20,20,0,0,0,0,200); boolean pick=false; boolean picked=false; float threshold=0; float m=0.25; boolean showRefined=false; class Cube { float s=1; // size int pi=0, pj=0, pk=0; // id of picked corner float[][][] r = new float [2][2][2]; // values at corners pt V[][][] = new pt [2][2][2]; // corner points Cube(float ps) {s=ps; makeBalls();} Cube(float a, float b, float c, float d, float e, float f, float g, float h, float ps) {s=ps; makeBalls(); r[0][0][0]=a; r[0][0][1]=b; r[0][1][0]=c; r[0][1][1]=d; r[1][0][0]=e; r[1][0][1]=f; r[1][1][0]=g; r[1][1][1]=h; } Cube(float a, float b, float c, float d, float e, float f, float g, float h) {makeBalls(); r[0][0][0]=a; r[0][0][1]=b; r[0][1][0]=c; r[0][1][1]=d; r[1][0][0]=e; r[1][0][1]=f; r[1][1][0]=g; r[1][1][1]=h; } void makeBalls() { for (int i=0; i<2; i++) for (int j=0; j<2; j++) for (int k=0; k<2; k++) {V[i][j][k]=new pt(s*(2*i-1),s*(2*j-1),s*(2*k-1)); r[i][j][k]=s/25;}; threshold=average(); } void changeRadius() {r[pi][pj][pk]+=(mouseX-pmouseX)/10.; if(r[pi][pj][pk]<0) r[pi][pj][pk]=0; } float average() {float a=0; for (int i=0; i<2; i++) for (int j=0; j<2; j++) for (int k=0; k<2; k++) a+=r[i][j][k]; return a/8;} void showBalls() { noStroke(); for (int i=0; i<2; i++) for (int j=0; j<2; j++) for (int k=0; k<2; k++) { if(r[i][j][k]