From ec0475bc65f93f3a918191be45a78a0ccc962a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=BCth?= Date: Sun, 8 May 2011 11:03:51 +0200 Subject: [PATCH] Made example modular --- .../at/jotschi/quadtree/BoundsQuadTree.java | 15 ++++++- .../at/jotschi/quadtree/QuadTreeTest.java | 20 ++++----- .../quadtree/RenderBoundsQuadTree.java | 42 ++++++++++++++++--- .../at/jotschi/quadtree/RenderQuadTree.java | 3 ++ .../quadtree/{ => gui}/QuadTreePanel.java | 34 ++++++++++----- 5 files changed, 85 insertions(+), 29 deletions(-) rename src/test/java/at/jotschi/quadtree/{ => gui}/QuadTreePanel.java (89%) diff --git a/src/main/java/at/jotschi/quadtree/BoundsQuadTree.java b/src/main/java/at/jotschi/quadtree/BoundsQuadTree.java index afa40c6..bfb3984 100644 --- a/src/main/java/at/jotschi/quadtree/BoundsQuadTree.java +++ b/src/main/java/at/jotschi/quadtree/BoundsQuadTree.java @@ -13,6 +13,8 @@ */ public class BoundsQuadTree extends QuadTree { + protected BoundsNode rootNode; + /** * Create a new QuadTree with the give start coordinates and size * @@ -67,9 +69,18 @@ public void insert(Point point, Dimension elementSize, T element) { + "] / [" + point.x + elementSize.height + "]"); } - this.rootNode.insert(new BoundsNodeElement(point, elementSize, element)); + this.rootNode.insert(new BoundsNodeElement(point, elementSize, + element)); + + } + /** + * Returns the rootNode of this tree + * + * @return + */ + public BoundsNode getRootNode() { + return this.rootNode; } - } diff --git a/src/test/java/at/jotschi/quadtree/QuadTreeTest.java b/src/test/java/at/jotschi/quadtree/QuadTreeTest.java index 1b2f53b..12b8445 100644 --- a/src/test/java/at/jotschi/quadtree/QuadTreeTest.java +++ b/src/test/java/at/jotschi/quadtree/QuadTreeTest.java @@ -24,25 +24,23 @@ public void testApp() { tree.insert(552, 555, "6"); tree.insert(551, 555, "7"); - Vector> elements = (Vector>) tree.getElements(new Point(500, - 550)); + Vector> elements = (Vector>) tree + .getElements(new Point(500, 550)); for (NodeElement element : elements) { System.out.println("[" + element.getX() + "-" + element.getY() + "] " + element.getElement()); } } - + @Test public void quadTreeBoundsTest() { - BoundsQuadTree tree = new BoundsQuadTree(new Point(0, 0), - new Dimension(600, 600)); - tree.insert(new Point(11, 3),new Dimension(10,10), "1"); - tree.insert(new Point(22, 3),new Dimension(30,10), "2"); - tree.insert(new Point(33, 3),new Dimension(40,10), "3"); - + BoundsQuadTree tree = new BoundsQuadTree( + new Point(0, 0), new Dimension(600, 600)); + tree.insert(new Point(11, 3), new Dimension(10, 10), "1"); + tree.insert(new Point(22, 3), new Dimension(30, 10), "2"); + tree.insert(new Point(33, 3), new Dimension(40, 10), "3"); - } - + } diff --git a/src/test/java/at/jotschi/quadtree/RenderBoundsQuadTree.java b/src/test/java/at/jotschi/quadtree/RenderBoundsQuadTree.java index 7003d82..549bc3a 100644 --- a/src/test/java/at/jotschi/quadtree/RenderBoundsQuadTree.java +++ b/src/test/java/at/jotschi/quadtree/RenderBoundsQuadTree.java @@ -1,11 +1,17 @@ package at.jotschi.quadtree; import java.awt.Dimension; +import java.awt.Graphics; import java.awt.Point; +import java.util.Vector; + +import at.jotschi.quadtree.gui.QuadTreePanel; @SuppressWarnings("serial") public class RenderBoundsQuadTree extends QuadTreePanel { + protected BoundsQuadTree tree; + public static void main(String[] args) { new RenderBoundsQuadTree(); } @@ -17,19 +23,20 @@ protected RenderBoundsQuadTree() { tree = createQuadTree(); setupGui(); } - + /** * Create the QuadTree and add some random points * * @return */ - private QuadTree createQuadTree() { - BoundsQuadTree tree = new BoundsQuadTree(new Point(100, - 100), new Dimension(400, 400)); + private BoundsQuadTree createQuadTree() { + Point startCoordinates = new Point(100, 100); + BoundsQuadTree tree = new BoundsQuadTree( + startCoordinates, new Dimension(400, 400)); for (int i = 0; i < 200; i++) { - int x = (int) (Math.random() * 1000 * 0.4) + 100; - int y = (int) (Math.random() * 1000 * 0.4) + 100; + int x = (int) (Math.random() * 1000 * 0.3) + startCoordinates.x; + int y = (int) (Math.random() * 1000 * 0.3) + startCoordinates.y; Point point = new Point(x, y); Dimension dimension = new Dimension(50, 50); tree.insert(point, dimension, "test"); @@ -38,4 +45,27 @@ private QuadTree createQuadTree() { return tree; } + @Override + protected void paintComponent(Graphics g) { + BoundsNode rootNode = tree.getRootNode(); + drawCells(rootNode, g); + } + + + /** + * Draw all elements of the node + * + * @param g + */ + @Override + public void drawElements(Node node, Graphics g) { + + Vector> elements = (Vector>) node + .getElements(); + for (NodeElement element : elements) { + g.drawRect((int) element.getX(), (int) element.getY(), + node.getBounds().width, node.getBounds().height); + } + } + } diff --git a/src/test/java/at/jotschi/quadtree/RenderQuadTree.java b/src/test/java/at/jotschi/quadtree/RenderQuadTree.java index bce4730..634cfaa 100644 --- a/src/test/java/at/jotschi/quadtree/RenderQuadTree.java +++ b/src/test/java/at/jotschi/quadtree/RenderQuadTree.java @@ -1,5 +1,8 @@ package at.jotschi.quadtree; +import at.jotschi.quadtree.gui.QuadTreePanel; + + @SuppressWarnings("serial") public class RenderQuadTree extends QuadTreePanel { diff --git a/src/test/java/at/jotschi/quadtree/QuadTreePanel.java b/src/test/java/at/jotschi/quadtree/gui/QuadTreePanel.java similarity index 89% rename from src/test/java/at/jotschi/quadtree/QuadTreePanel.java rename to src/test/java/at/jotschi/quadtree/gui/QuadTreePanel.java index 0e3f4a1..0b6bf66 100644 --- a/src/test/java/at/jotschi/quadtree/QuadTreePanel.java +++ b/src/test/java/at/jotschi/quadtree/gui/QuadTreePanel.java @@ -1,4 +1,4 @@ -package at.jotschi.quadtree; +package at.jotschi.quadtree.gui; import java.awt.Color; import java.awt.Dimension; @@ -16,12 +16,16 @@ import org.apache.log4j.Logger; +import at.jotschi.quadtree.Node; +import at.jotschi.quadtree.NodeElement; +import at.jotschi.quadtree.QuadTree; import at.jotschi.quadtree.Node.Cell; @SuppressWarnings("serial") public class QuadTreePanel extends JPanel implements KeyListener, MouseListener { protected QuadTree tree; + protected Vector> selectedElements = new Vector>(); protected static Logger log = Logger.getLogger(QuadTreePanel.class); @@ -41,10 +45,8 @@ protected void setupGui() { f.addMouseListener(this); f.add(this); f.setLocationRelativeTo(null); - f.setSize(600, 600); f.setVisible(true); - } /** @@ -78,7 +80,7 @@ protected void paintComponent(Graphics g) { * @param node * @param g */ - private void drawCells(Node node, Graphics g) { + protected void drawCells(Node node, Graphics g) { Dimension bounds = node.getBounds(); Point startCoordinates = node.getStartCoordinates(); @@ -93,20 +95,32 @@ private void drawCells(Node node, Graphics g) { } // Draw points of this node - Vector> elements = (Vector>) node - .getElements(); - for (NodeElement element : elements) { - g.drawOval((int) element.getX(), (int) element.getY(), 4, 4); - } + drawElements(node, g); // Draw selected elements - g.setColor(Color.RED); + drawSelectedElements(g); + } + public void drawSelectedElements(Graphics g) { + g.setColor(Color.RED); for (NodeElement element : selectedElements) { g.drawOval((int) element.getX(), (int) element.getY(), 4, 4); } g.setColor(Color.BLACK); + } + + /** + * Draw all elements of the node + * + * @param g + */ + public void drawElements(Node node, Graphics g) { + Vector> elements = (Vector>) node + .getElements(); + for (NodeElement element : elements) { + g.drawOval((int) element.getX(), (int) element.getY(), 4, 4); + } } public void keyTyped(KeyEvent e) {