void loadButtons() { // define buttons that control numeric values here Buttons.add(new button("# disks",3,n,1000,1,100)); // controls value of n (min=3, current=n, max=1000, increment=+-1, fast increment=+-100) } void loadToggles() { // define toggles that control boolean values here Toggles.add(new toggle(" ",false)); // toggle 1 shown at the bottom (skipped to ensure that other actions appear when projecting in class) Toggles.add(new toggle(" ",false)); Toggles.add(new toggle("Load ",false)); // toggle 3 (from bottom) load disks Toggles.add(new toggle("Save ",false)); // toggle 4 save disks Toggles.add(new toggle("Show labels",showLabels)); // Toggles.add(new toggle("Track visible",track)); // Toggles.add(new toggle("Show rays",showRays)); // Toggles.add(new toggle("Show dual",showDual)); // Toggles.add(new toggle("Show mesh",showMesh)); // shows delauynay triangulation Toggles.add(new toggle("Show disks",showDisks)); // Toggles.add(new toggle("Triangulate",false)); // computes delaunay triangulation Toggles.add(new toggle("Recompute ",false)); // recompute position and radius of each disk } void mousePressed() { int k= Buttons.click(); int m=-1; // bind value-buttons to actions here (same order as definition above) if(k== ++m) {n=int(Buttons.v(m));}; // actions for button 1 changes the number n of disks by 1 or by 100 // Can reset the value of any button with Buttons.setValue(button,value); k= Toggles.click(); m=-1; // bind boolean-toggles to actions here (same order as definition above) if(k==++m) Toggles.B[m].V=false ; // skiped to ensure that buttons are above bottom of window if(k==++m) Toggles.B[m].V=false ; // if(k==++m) {Toggles.B[m].V=false; loadDisks(); }; // actions for toggle 3, load disk data from file, always resets it to false if(k==++m) {Toggles.B[m].V=false; saveDisks(); }; // actions for toggle 4 saves disks if(k==++m) showLabels=Toggles.v(m); // actions for toggle 5, changes status of showLabels if(k==++m) track=Toggles.v(m); // if(k==++m) showRays=Toggles.v(m); // if(k==++m) showDual=Toggles.v(m); // if(k==++m) showMesh=Toggles.v(m); // if(k==++m) showDisks=Toggles.v(m); // if(k==++m) {Toggles.B[m].V=false; M.reset(); loadVertices(M); M.triangulate(); M.computeO(); }; // performs triangulaiton if(k==++m) {Toggles.B[m].V=false; reset(); }; // recomputes disk positions // ***** pick: find index p of point closest to the mouse when clicked if (mouse().isInWindow()) { if (!keyPressed) p=0; else { if (key=='z') {printIt=true; println("?"); };// to print something once. Used for debugging. printIt is reset to false before next frame if (key=='c') {p=0; float d=P[0].disToMouse(); for (int i=1; i| "+Format(V,4,4)+" = "+name,x,y+14); noFill(); }; boolean click() { if ( (x+i=0) sign="+"; String spaces = " "; String s=nf(abs(f),n,z); while (s.indexOf("0")==0) {s=s.substring(1,s.length());}; int b=s.indexOf("."); int a=max(0,n-b); int c=s.length()-b-1; int d=0; if (c>z) {s=s.substring(0,b+1+z); c=z;} else { d=z-c;}; String front = spaces.substring(0, a); String back = spaces.substring(0, d); return(front+sign+s+back); };