I wrote this short swarm script with GUI interface in Processing about 4 years ago (When I began to code)… Now I figure out lots of code from this script should be improved! For instance, we can implement KDTree later… Hope this code from the previous version will help people who needs or interested in it.
Processing Source Code: drawLineFish3DUI.pde
//============================================================================ // Name : drawLineFish3DUI.pde // Author : Gene Ting-Chun Kao // Version : 2012-7-19 // Copyright : GNU General Public License // Description : Swarm 3D with Tail GUI //============================================================================ import toxi.geom.*; import processing.opengl.*; import peasy.*; import controlP5.*; import java.util.Calendar; Manage man; PeasyCam jCam; ControlP5 jControl; ArrayList fishes; PMatrix3D currCameraMatrix; PGraphics3D g3; int c1 = 0; int c2 = 0; int c3 = 0; boolean attractor = false; boolean stop = false; void setup() { size(1200, 800, OPENGL); smooth(); g3 = (PGraphics3D)g; jCam = new PeasyCam(this, 100); Slider(); man = new Manage(400, 50); man.createFish(); } void draw() { if (jControl.window(this).isMouseOver()) { jCam.setActive(false); } else { jCam.setActive(true); } background(0); man.display(); gui(); } void keyReleased() { if (key == 's' || key == 'S') saveFrame(timestamp()+"_##.png"); } String timestamp() { Calendar now = Calendar.getInstance(); return String.format("%1$ty%1$tm%1$td_%1$tH%1$tM%1$tS", now); } void Slider() { jControl = new ControlP5(this); //mousePosistion jControl.addSlider("c1",-200,200,10,610,100,10); jControl.addSlider("c2",-200,200,10,630,100,10); jControl.addSlider("c3",-200,200,10,650,100,10); jControl.addToggle("attractor", false, 10, 680, 100, 10).setMode(ControlP5.SWITCH); jControl.addToggle("stop", false, 10, 715, 45, 10); jControl.setAutoDraw(false); } void gui() { currCameraMatrix = new PMatrix3D(g3.camera); camera(); jControl.draw(); g3.camera = currCameraMatrix; } Fish.pde
...