
The above grasshopper definition exports three dimensional coordinates for geometry to be imported into processing. You can download the definition here: cell_export.gh
The processing sketch below imports the three dimensional coordinates from the definition above and redraws them in P3D.
ArrayList <PVector> pStart = new ArrayList<PVector>();
ArrayList <PVector> pEnd = new ArrayList<PVector>();
void setup() {
size(1400, 1000,P3D);
frameRate(30);
// Load text file as a string
String[] spts = loadStrings("startpoints.txt");
// Convert string into an array of integers using ',' as a delimiter
for(int i = 0; i < (spts.length/3); ++i){
float xx = float(spts[i*3])*40;
float yy = float(spts[i*3+1])*40;
float zz = float(spts[i*3+2])*40;
pStart.add(new PVector(xx,yy,zz));
}
String[] spts2 = loadStrings("endpoints.txt");
for(int i = 0; i < (spts2.length/3); ++i){
float xx = float(spts2[i*3])*40;
float yy = float(spts2[i*3+1])*40;
float zz = float(spts2[i*3+2])*40;
pEnd.add(new PVector(xx,yy,zz));
}
}
void draw() {
background(0);
translate(width/2,height/2);
for(int i = 0; i < (pStart.size()); ++i){
PVector vs = pStart.get(i);
PVector ve = pEnd.get(i);
stroke(255);
line(vs.x, vs.y, vs.z, ve.x, ve.y, ve.z);
}
}
The sketch below adds camera functionality.
ArrayList <PVector> pStart = new ArrayList<PVector>();
ArrayList <PVector> pEnd = new ArrayList<PVector>();
int oldx = mouseX;
int oldy = mouseY;
float rotx = PI;
float roty = 0;
float zcam = 0;
int initialize = 0;
void setup() {
size(1400, 1000,P3D);
frameRate(30);
// Load text file as a string
String[] spts = loadStrings("startpoints.txt");
// Convert string into an array of integers using ',' as a delimiter
for(int i = 0; i < (spts.length/3); ++i){
float xx = float(spts[i*3])*40;
float yy = float(spts[i*3+1])*40;
float zz = float(spts[i*3+2])*40;
pStart.add(new PVector(xx,yy,zz));
}
String[] spts2 = loadStrings("endpoints.txt");
for(int i = 0; i < (spts2.length/3); ++i){
float xx = float(spts2[i*3])*40;
float yy = float(spts2[i*3+1])*40;
float zz = float(spts2[i*3+2])*40;
pEnd.add(new PVector(xx,yy,zz));
}
}
void draw() {
background(0);
///CAMERA//////////////////
pushMatrix();
cam();
///END CAMERA//////////////////
for(int i = 0; i < (pStart.size()); ++i){
PVector vs = pStart.get(i);
PVector ve = pEnd.get(i);
stroke(255);
line(vs.x, vs.y, vs.z, ve.x, ve.y, ve.z);
}
popMatrix();
}
void cam() {
int newx = mouseX;
int newy = mouseY;
translate(width/2, height/2,zcam);
rotateY(rotx);
rotateX(roty);
translate(0,0,0);
//rotateZ(PI);
if ((mousePressed == true) && (mouseY > 200) ) {
rotx = rotx + (oldx-newx)/50.0;
roty = roty + (oldy-newy)/50.0;
}
if(initialize == 0){
rotx = rotx + (oldx-newx)/50.0;
roty = roty + (oldy-newy)/50.0;
initialize = 1;
}
oldx = newx;
oldy = newy;
}
void mouseWheel(MouseEvent event) {
float e = event.getCount();
zcam = zcam - e*5;
}
import ddf.minim.*;
import ddf.minim.analysis.*;
import controlP5.*;
ControlP5 cp5;
Minim minim;
AudioInput in;
int lifespan = 25;
int rannum = 20;
float rate = 1;
float threshold = 0.5;
float time = 100;
float amplitude = 100;
boolean Random = false;
boolean trail = true;
boolean Pulse = false;
boolean multiple = false;
float trailcount = 20000;
ArrayList <PVector> pStart = new ArrayList<PVector>();
ArrayList <PVector> pEnd = new ArrayList<PVector>();
ArrayList <PVector> light = new ArrayList<PVector>();
int[] trailseed = new int[20];
float[] trailtime = new float[20];
int tcount = 0;
FloatList chpts;
FloatList on;
float x,y,z;
float scroll;
float radius;
int spannum;
float rh = 0;
int lastmy;
float pdist = 1000;
int pcenter;
int oldx = mouseX;
int oldy = mouseY;
float rotx = PI;
float roty = 0;
float zcam = 0;
int initialize = 0;
void setup() {
size(1400, 1000,P3D);
frameRate(30);
minim = new Minim(this);
// use the getLineIn method of the Minim object to get an AudioInput
in = minim.getLineIn();
radius = 0;
x = width/2;
y = height/2;
z = 0;
on = new FloatList();
// Load text file as a string
String[] spts = loadStrings("startpoints.txt");
// Convert string into an array of integers using ',' as a delimiter
for(int i = 0; i < (spts.length/3); ++i){
float xx = float(spts[i*3])*40;
float yy = float(spts[i*3+1])*40;
float zz = float(spts[i*3+2])*40;
pStart.add(new PVector(xx,yy,zz));
on.append(0.0);
}
String[] spts2 = loadStrings("endpoints.txt");
for(int i = 0; i < (spts2.length/3); ++i){
float xx = float(spts2[i*3])*40;
float yy = float(spts2[i*3+1])*40;
float zz = float(spts2[i*3+2])*40;
pEnd.add(new PVector(xx,yy,zz));
}
for(int j = 0; j < (trailseed.length); ++j){
trailseed[j] = 0;
trailtime[j] = 0;
light.add(pEnd.get(j));
}
trailtime[0] = 2000;
cp5 = new ControlP5(this);
cp5.addSlider("lifespan")
.setPosition(300,40)
.setRange(0,100)
.setSize(240,20)
.setColorForeground(color(20,200,200))
.setColorLabel(color(255))
.setColorBackground(color(70,70,70))
.setColorValue(color(0,0,0))
.setColorActive(color(0,255,255))
;
cp5.addSlider("rate")
.setPosition(300,80)
.setRange(0.0,10.0)
.setSize(240,20)
.setColorForeground(color(20,200,200))
.setColorLabel(color(255))
.setColorBackground(color(70,70,70))
.setColorValue(color(0,0,0))
.setColorActive(color(0,255,255))
;
cp5.addSlider("time")
.setPosition(680,40)
.setRange(0.0,100.0)
.setSize(160,20)
.setColorForeground(color(20,200,200))
.setColorLabel(color(255))
.setColorBackground(color(70,70,70))
.setColorValue(color(0,0,0))
.setColorActive(color(0,255,255))
;
cp5.addSlider("rannum")
.setPosition(640,80)
.setRange(0.0,100.0)
.setSize(200,20)
.setColorForeground(color(20,200,200))
.setColorLabel(color(255))
.setColorBackground(color(70,70,70))
.setColorValue(color(0,0,0))
.setColorActive(color(0,255,255))
;
cp5.addSlider("amplitude")
.setPosition(40,40)
.setRange(0,200)
.setSize(200,20)
.setColorForeground(color(20,200,200))
.setColorLabel(color(255))
.setColorBackground(color(70,70,70))
.setColorValue(color(0,0,0))
.setColorActive(color(0,255,255))
;
cp5.addSlider("threshold")
.setPosition(40,80)
.setRange(0.0,1.0)
.setSize(200,20)
.setColorForeground(color(20,200,200))
.setColorLabel(color(255))
.setColorBackground(color(70,70,70))
.setColorValue(color(0,0,0))
.setColorActive(color(0,255,255))
;
cp5.addToggle("trail")
.setPosition(600,40)
.setSize(20,20)
.setColorForeground(color(20,20,20))
.setColorLabel(color(255))
.setColorBackground(color(70,70,70))
.setColorValue(0xffff88ff)
.setColorActive(color(0,200,200))
;
cp5.addToggle("multiple")
.setPosition(640,40)
.setSize(20,20)
.setColorForeground(color(20,20,20))
.setColorLabel(color(255))
.setColorBackground(color(70,70,70))
.setColorValue(0xffff88ff)
.setColorActive(color(0,200,200))
;
cp5.addToggle("Random")
.setPosition(600,80)
.setSize(20,20)
.setColorForeground(color(20,20,20))
.setColorLabel(color(255))
.setColorBackground(color(70,70,70))
.setColorValue(0xffff88ff)
.setColorActive(color(0,200,200))
;
cp5.addToggle("Pulse")
.setPosition(600,120)
.setSize(20,20)
.setColorForeground(color(20,20,20))
.setColorLabel(color(255))
.setColorBackground(color(70,70,70))
.setColorValue(0xffff88ff)
.setColorActive(color(0,200,200))
;
}
void draw() {
background(0);
///GET SOUND/////////////
float sd = 0;
float tnum = threshold * 200;
for(int i = 0; i < in.bufferSize(); i++){ if(abs(in.mix.get(i)) > sd){
sd = abs(in.mix.get(i));
}
}
sd = sd*2*amplitude;
///////////////////////////
if((sd > tnum)){
if(tcount == 19){
tcount = 0;
}else{
tcount++;
}
trailtime[tcount] = 2000;
trailseed[tcount] = int(random(pStart.size()));
}
if(multiple == false){
tcount = 0;
}
if(Pulse == true){
if((sd > tnum)){
pcenter = int(random(pStart.size()));
pdist = 0;
}
}
pdist = pdist + 10;
///SOUND BAR VISUALISER////
noStroke();
fill(color(70,70,70));
rect(40, 120, 60, 200);
fill(color(20,200,200));
rect(40, 320, 60, -sd);
stroke(255);
strokeWeight(1);
line(110,320-tnum,120,320-tnum);
////////////////////////////
///CAMERA//////////////////
pushMatrix();
cam();
///END CAMERA//////////////////
for(int i = 0; i < (pStart.size()); ++i){
float r = random(50);
PVector vs = pStart.get(i);
PVector ve = pEnd.get(i);
///02. RANDOM//////////////
if(Random == true){ if(sd > tnum){
float ro = random(100);
if(ro < rannum){
on.set(i,lifespan);
}
}
}
///END RANDOM//////////////
/////03. PULSE//////////////////
if((Pulse == true)){
PVector vc = pStart.get(pcenter);
float vdist = dist(vs.x,vs.y,vs.z,vc.x,vc.y,vc.z);
float dif = vdist - pdist;
if((dif < 10) && (dif > -10)){
on.set(i,lifespan);
}
}
/////PULSE END//////////////
for(int c = 0; c < (trailseed.length); ++c){
if((trail == true) && (trailtime[c]> 0)){
if( i == trailseed[c]){
on.set(i,lifespan);
float stn = random(50);
if(stn > 25){
light.set(c,vs);
}else{
light.set(c,ve);
}
}
}
}
float onoff = on.get(i);
if( onoff > 0){
stroke(0,255,255);
if((onoff/6 < 1) && (onoff/6 > 0)){
strokeWeight(1);
}else{
strokeWeight(int(onoff/6));
}
}else{
stroke(100);
strokeWeight(1);
}
onoff = on.get(i);
on.set(i,(onoff-rate));
noFill();
line(vs.x, vs.y, vs.z, ve.x, ve.y, ve.z);
}
for(int n = 0; n < (trailseed.length); ++n){
if((time == 100) && (n == 0)){
trailtime[n] = 2000;
}else{
if((trailtime[n]-(100-time)) < 0){
trailtime[n] = 0;
}else{
trailtime[n] = trailtime[n] - (100-time);
}
}
chpts = new FloatList();
int pcount = 0;
for(int i = 0; i < (pStart.size()); ++i){
PVector vs = pStart.get(i);
PVector ve = pEnd.get(i);
PVector lc = light.get(n);
PVector ivs = new PVector(int(vs.x), int(vs.y), int(vs.z));
PVector ive = new PVector(int(ve.x), int(ve.y), int(ve.z));
PVector itest = new PVector(int(lc.x), int(lc.y), int(lc.z)); int ch = 0;
if( (ivs.x == itest.x) || (ive.x == itest.x) ){ ch++; }
if( (ivs.y == itest.y) || (ive.y == itest.y) ){
ch++;
} if( (ivs.z == itest.z) || (ive.z == itest.z) ){
ch++;
} float onoff = on.get(i);
if((ch == 3) && (i != spannum)){
chpts.append(i); pcount++;
}
}
int ci = int(random(chpts.size()));
trailseed[n] = int(chpts.get(ci));
}
popMatrix();
}
void cam() {
int newx = mouseX; int newy = mouseY;
translate(width/2, height/2,zcam);
rotateY(rotx); rotateX(roty);
translate(0,0,0); //rotateZ(PI);
if ((mousePressed == true) && (mouseY > 200) ) {
rotx = rotx + (oldx-newx)/50.0;
roty = roty + (oldy-newy)/50.0;
}
if(initialize == 0){
rotx = rotx + (oldx-newx)/50.0;
roty = roty + (oldy-newy)/50.0;
initialize = 1;
}
oldx = newx;
oldy = newy;
}
void mouseWheel(MouseEvent event) {
float e = event.getCount();
zcam = zcam - e*5;
}