node nodes[] = new node[1000]; int nodeCount; int sz = 200; node nodeSelected = null; void setup() { size(200,200); //hardcoded sz for(int i = 0; i < 12; i++){ nodes[nodeCount++] = new node(random(sz),random(sz)); } } void nodesbezier(node n0, node n1,node n2, node n3){ bezier(n0.x,n0.y, n1.x,n1.y, n2.x,n2.y, n3.x,n3.y); } void loop() { background(128); stroke(255,128,128); for(int i = 0; i < 12;i+=2 ){ line(nodes[i].x,nodes[i].y,nodes[i+1].x,nodes[i+1].y); } stroke(0); for(int i = 0; i < 9;i+=4 ){ nodesbezier(nodes[i],nodes[i+1],nodes[i+2],nodes[i+3]); } node embiggen = null; for(int i = 0; i < nodeCount; i++){ node n = nodes[i]; n.show(); if(! n.isNear(mouseX,mouseY)){ } else { embiggen = n; } } if(embiggen != null){ if(nodeSelected != null) { embiggen = nodeSelected; } embiggen.showbox(); } } void mouseDragged(){ if(nodeSelected != null){ nodeSelected.reset(mouseX,mouseY); } } void mousePressed(){ for(int i = 0; i < nodeCount; i++){ node n = nodes[i]; if(n.isNear(mouseX,mouseY)){ nodeSelected = n; } } } void mouseReleased(){ nodeSelected = null; } class node { float x, y; void reset(float inx, float iny){ x = inx; y = iny; } node(float inx, float iny){ reset(inx,iny); } void show(){ ellipse(x-2,y-2,4,4); } void showbox(){ rect(x-3,y-3,6,6); } boolean isNear(float inx, float iny){ if(abs(x-inx) < 4 && abs(y-iny) < 4) return true; else return false; } } class guide { node s = new node(0,0); node f = new node(0,0); }