X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FRTree.java;h=c2fd9b4ba2a0274da5f6a22dfbec0076f53122ca;hp=48fade20639e1448d0353044e5c2fa28a9c62084;hb=f9488635746daea6f8ccbb4680ff7f169dc5b2e5;hpb=0f9ce20a060db6537a47b549cbf24fd268699ac6 diff --git a/src/edu/berkeley/qfat/geom/RTree.java b/src/edu/berkeley/qfat/geom/RTree.java index 48fade2..c2fd9b4 100644 --- a/src/edu/berkeley/qfat/geom/RTree.java +++ b/src/edu/berkeley/qfat/geom/RTree.java @@ -20,6 +20,7 @@ public class RTree { rtree.init(props); } + public void add(V v) { insert(v); } public void insert(V v) { int id = lowid++; idToV.put(id, v); @@ -30,7 +31,9 @@ public class RTree { } public void remove(V v) { - int id = vToId.get(v); + Integer idi = vToId.get(v); + if (idi==null) return; + int id = idi; idToV.remove(id); vToId.remove(v); rtree.delete(new com.infomatiq.jsi.Rectangle(v.getMinX(), v.getMinY(), v.getMinZ(), @@ -38,9 +41,8 @@ public class RTree { id); } - + // gross... V found = null; - private IntProcedure finder = new IntProcedure() { public boolean execute(int id) { found = idToV.get(id); @@ -54,4 +56,21 @@ public class RTree { found = null; return ret; } + + Visitor visitor = null; + private IntProcedure searcher = new IntProcedure() { + public boolean execute(int id) { + V v = idToV.get(id); + visitor.visit(v); + return true; + } + }; + public void range(HasBoundingBox v, Visitor vis) { + visitor = vis; + rtree.intersects(new com.infomatiq.jsi.Rectangle(v.getMinX(), v.getMinY(), v.getMinZ(), + v.getMaxX(), v.getMaxY(), v.getMaxZ()), + searcher); + visitor = null; + } + }