X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FRTree.java;fp=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FRTree.java;h=2487cc7240ac17c9d728cf708451a61305883a12;hp=5a29093ec98bcf1a48b5b9abc3db7ecc77f8fa0b;hb=4e22c754574f3d410e1ddc0bc5cdedd6b3586497;hpb=37e1b841e1df6526d39f896ee3589efea2116409 diff --git a/src/edu/berkeley/qfat/geom/RTree.java b/src/edu/berkeley/qfat/geom/RTree.java index 5a29093..2487cc7 100644 --- a/src/edu/berkeley/qfat/geom/RTree.java +++ b/src/edu/berkeley/qfat/geom/RTree.java @@ -11,13 +11,14 @@ public class RTree implements Iterable { new com.infomatiq.jsi.rtree.RTree(); private int lowid = 0; - private HashMap idToV = new HashMap(); - private HashMap vToId = new HashMap(); + private HashMap idToV = new HashMap(); + private HashMap vToId = new HashMap(); + private HashMap vToRect = new HashMap(); public Iterator iterator() { return vToId.keySet().iterator(); } private final MyIntProcedure myIntProcedure = new MyIntProcedure(); - private final com.infomatiq.jsi.Rectangle rect = new com.infomatiq.jsi.Rectangle(0,0,0,0,0,0); + private final Rectangle rect = new Rectangle(0,0,0,0,0,0); private final com.infomatiq.jsi.Point point = new com.infomatiq.jsi.Point(0,0,0); private V found = null; private Visitor visitor = null; @@ -33,6 +34,7 @@ public class RTree implements Iterable { public void clear() { idToV.clear(); vToId.clear(); + vToRect.clear(); rtree.init(props); } @@ -41,8 +43,9 @@ public class RTree implements Iterable { int id = lowid++; idToV.put(id, v); vToId.put(v, id); - rect.set(v.getMinX(), v.getMinY(), v.getMinZ(), v.getMaxX(), v.getMaxY(), v.getMaxZ()); + Rectangle rect = new Rectangle(v.getMinX(), v.getMinY(), v.getMinZ(), v.getMaxX(), v.getMaxY(), v.getMaxZ()); rtree.add(rect, id); + vToRect.put(v, rect); } public void remove(V v) { @@ -52,7 +55,8 @@ public class RTree implements Iterable { idToV.remove(id); vToId.remove(v); rect.set(v.getMinX(), v.getMinY(), v.getMinZ(), v.getMaxX(), v.getMaxY(), v.getMaxZ()); - rtree.delete(rect, id); + rtree.delete(vToRect.get(v), id); + vToRect.remove(v); } public V nearest(Point p) { return nearest(p, null); }