diff --git a/RangeApp/Properties.pde b/RangeApp/Properties.pde index 7c8d74d..b9129ef 100644 --- a/RangeApp/Properties.pde +++ b/RangeApp/Properties.pde @@ -4,7 +4,7 @@ color c_BLACK = color (0, 0, 0); color c_PROCBLUE = color (5,13,22); color c_LIGHTBLUE = color (0, 215, 255); color c_YELLOW = color (215, 255, 0); -color c_HILITE = color (251, 255, 20, 100);//selector filling +color c_HILITE = color (70, 255, 50, 180);//selector filling // Screen Color color c_background = color (26, 26, 26); @@ -31,7 +31,7 @@ int i_helpStrokeWidth = 2; // Point color c_pointStroke = c_BLACK; color c_pointDefault = c_WHITE; -color c_pointSelect = color (100, 255, 100); +color c_pointSelect = color (255, 50, 50); int i_pointRad = 20; // Tree stuff @@ -45,12 +45,9 @@ String[] s_helpStrings = { "e: Toggle Gnoman", "k: Toggle Relations", "j: Toggle Boundaries", - "f: Scale", - "d: Pan", - "s: Rotate", - "a: Place Point", - "g: Select Point", - "c: Clear Points" + "c: Clear Points", + "r: Add 1 Random", + "t: Add 20 Random" }; // Math Stuff diff --git a/RangeApp/RangeApp.pde b/RangeApp/RangeApp.pde index 7e599ac..492070d 100644 --- a/RangeApp/RangeApp.pde +++ b/RangeApp/RangeApp.pde @@ -3,7 +3,7 @@ TreeContainer pot;//or tree Menu menu; Selector selector; Point nearestNeighbor; -ArrayList pointList; +ArrayList pointList, selectedList; boolean drawCon, drawHelp, drawTreeRelations, drawTreeBoundaries, drawGnoman, useSelector; void setup() { @@ -16,11 +16,12 @@ void setup() { nearestNeighbor = null; menu = new Menu(); pointList = new ArrayList(); + selectedList = new ArrayList(); drawCon = false; drawHelp = false; drawGnoman = true; - drawTreeRelations = true; + drawTreeRelations = false; drawTreeBoundaries = true; } @@ -62,6 +63,7 @@ void keyPressed() { case 'c': case 'C': pointList.clear(); + selectedList.clear(); pot.clearTree(); break; case 'h': @@ -80,14 +82,38 @@ void keyPressed() { case 'E': drawGnoman = !drawGnoman; break; - case '1': - + case 'r': + case 'R': + addRandom(1); + break; + case 't': + case 'T': + addRandom(20); break; } } void checkSelect() {} +void setSelected(ArrayList pointList) { + for(Point p: selectedList) { + p.setUnSelected(); + } + selectedList = pointList; + for(Point p: selectedList) { + p.setSelected(); + } +} + +void addRandom(int n) { + for(int i = 0; i < n; i++) { + Point p = new Point((int)random(width),(int)random(height)); + Point r = cam.transform(p); + pointList.add(r); + pot.insert(r); + } +} + void GnomanDraw(int r) { pushStyle(); stroke(c_gnoman); @@ -133,4 +159,4 @@ void mouseReleased() { if(mouseButton == RIGHT) { cam.mouseReleased(); } -} \ No newline at end of file +} diff --git a/RangeApp/Selector.pde b/RangeApp/Selector.pde index b4d8ac6..a67276f 100644 --- a/RangeApp/Selector.pde +++ b/RangeApp/Selector.pde @@ -43,32 +43,21 @@ class Selector{ void resetSelection(){//triggered on mouseReleased() if(_selecting){ //selecting with rect or circle + ArrayList solution; switch(_select_mode){ case 0: Point p1 = cam.transform(new Point(_startX, _startY)); Point p2 = cam.transform(new Point(_endX+_startX, _endY+_startY)); - - if(pot.getTree() != null){//prevents query of null/empty tree - ArrayList solution = pot.getTree().queryBox(new BoundingBox(min(p1._x, p2._x), max(p1._x, p2._x), min(p1._y, p2._y), max(p1._y, p2._y))); - for(Point pp : solution) - { - ellipse(pp._x + width/2, pp._y + height/2, 30, 30); - } - println("size of list: " + solution.size()); - } + solution = pot.queryBox(new BoundingBox(min(p1._x, p2._x), max(p1._x, p2._x), min(p1._y, p2._y), max(p1._y, p2._y))); + setSelected(solution); + println("size of list: " + solution.size()); break; case 1: Point pp1 = cam.transform(new Point(_startX, _startY)); Point pp2 = cam.transform(new Point(_endX+_startX, _endY+_startY)); - - if(pot.getTree() != null){//prevents query of null/empty tree - ArrayList solution = pot.getTree().queryCircle(pp1, dist(pp1._x, pp1._y, pp2._x, pp2._y)); - for(Point pp : solution) - { - ellipse(pp._x + width/2, pp._y + height/2, 30, 30); - } - println("size of list: " + solution.size()); - } + solution = pot.queryCircle(pp1, dist(pp1._x, pp1._y, pp2._x, pp2._y)); + setSelected(solution); + println("size of list: " + solution.size()); break; } _selecting = false; @@ -128,4 +117,4 @@ class Selector{ _searching = false; } } -} \ No newline at end of file +} diff --git a/RangeApp/TreeContainer.pde b/RangeApp/TreeContainer.pde index 30e99e1..a1e3242 100644 --- a/RangeApp/TreeContainer.pde +++ b/RangeApp/TreeContainer.pde @@ -19,6 +19,21 @@ class TreeContainer { void clearTree(){ _tree = null; } + ArrayList queryBox(BoundingBox bb) { + if(_tree != null) { + return _tree.queryBox(bb); + } + return new ArrayList(); + } + + ArrayList queryCircle(Point p, float r) { + if(_tree != null) { + return _tree.queryCircle(p, r); + } + return new ArrayList(); + } + + void setTree (KdTree tree) { _tree = tree; } void drawRelations() {