X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FRTree.java;h=5a29093ec98bcf1a48b5b9abc3db7ecc77f8fa0b;hp=1e6e39a3e1cc9aea626fe8dcabc813f89d3f21e1;hb=5239d59bb876c25b263a24dbff11dc7a9082a431;hpb=621152904863f1ade5eed7757bfe05e91f848749 diff --git a/src/edu/berkeley/qfat/geom/RTree.java b/src/edu/berkeley/qfat/geom/RTree.java index 1e6e39a..5a29093 100644 --- a/src/edu/berkeley/qfat/geom/RTree.java +++ b/src/edu/berkeley/qfat/geom/RTree.java @@ -55,22 +55,25 @@ public class RTree implements Iterable { rtree.delete(rect, id); } - public V nearest(Point p) { + public V nearest(Point p) { return nearest(p, null); } + public V nearest(Point p, Visitor ip) { point.set(p.x, p.y, p.z); + this.visitor = ip; rtree.nearest(point, myIntProcedure, Float.POSITIVE_INFINITY); + this.visitor = null; V ret = found; found = null; return ret; } - public void range(HasBoundingBox v, Visitor vis) { + public void range(HasBoundingBox v, Visitor vis) { visitor = vis; rect.set(v.getMinX(), v.getMinY(), v.getMinZ(), v.getMaxX(), v.getMaxY(), v.getMaxZ()); rtree.intersects(rect, myIntProcedure); visitor = null; } - public void range(Point p1, Point p2, Visitor vis) { + public void range(Point p1, Point p2, Visitor vis) { visitor = vis; rect.set(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z); rtree.intersects(rect, myIntProcedure); @@ -79,12 +82,10 @@ public class RTree implements Iterable { private class MyIntProcedure implements IntProcedure { public boolean execute(int id) { + found = idToV.get(id); if (visitor != null) { - V v = idToV.get(id); - visitor.visit(v); - return true; + return visitor.visit(found); } else { - found = idToV.get(id); return false; } }