//***************************************************************************** // Road editor, Jarek Rossignac, Nov 2006 //***************************************************************************** float back=0; // laplace back move int recp = 3; // recursion level int rec = 5; // recursion level int vn =4; // number of control vertices int svn =vn; // number of new vertices int cap=64; // size of control arrays int scap=cap*4096; // size of derived array pt[] P = new pt [cap]; // control points pt[] SP = new pt [scap]; // derived points pt[] LP = new pt [scap]; // derived LEFT points pt[] RP = new pt [scap]; // derived RIGHT points float[] r = new float [cap]; // radius of control points float[] sr = new float [scap]; // radius of subdivided points float t1=0, t2=0, t3=0; int bi=-1; // index of selected mouse-vertex, -1 if none selected boolean radius=false; // true when radius is being edited boolean fillDisks=true; // togle to fill disks or not boolean showControlCurve=true; boolean showCircles=false; boolean showMedian=true; boolean fillRoad=true; boolean showHats=false; boolean showLines=false; boolean showArcs=true; boolean showDistance=false; boolean showRoads=false; boolean showBulge=false; boolean showBody=false; boolean showWrinkles=false; pt Mouse = new pt(0,0); // current mouse position vec Vlabel=new vec(10,10); // vector for labels // COLORS color soft = color(200, 200, 210); color red = color(200, 10, 10); color blue = color(10, 10, 200); color green = color(0, 150, 0); color black = color(10, 10, 10); color magenta = color(250, 150, 200); color brown = color(100, 50, 20); color yellow = color(250, 245, 130); color metal = color(50, 150, 200); color orange = color(200, 150, 50); boolean numbers = false; // toggles display of vertex numberss void setup() { size(1000, 400); // strokeJoin(ROUND); strokeCap(ROUND); PFont font = loadFont("Courier-14.vlw"); textFont(font, 12); S.declare(); for (int i=0; iabs(P[in(i)].y-P[i].y)) {float dy=(P[in(i)].y-P[i].y)/2; P[in(i)].y-=dy; P[i].y+=dy;} else {float dx=(P[in(i)].x-P[i].x)/2; P[in(i)].x-=dx; P[i].x+=dx;} }; }; if (key=='C') { float sx=width; float sy=height; float bx=0.0; float by=0.0; for (int i=0; ibx) {bx=P[i].x;}; if (P[i].xby) {by=P[i].y;}; if (P[i].y