checkpoint
authoradam <adam@megacz.com>
Wed, 5 Dec 2007 05:15:19 +0000 (21:15 -0800)
committeradam <adam@megacz.com>
Wed, 5 Dec 2007 05:15:19 +0000 (21:15 -0800)
darcs-hash:20071205051519-5007d-49c64dc1f1b448c0d237b6621060e1845a39b949.gz

src/edu/berkeley/qfat/Mesh.java

index 0a26699..e06ac65 100644 (file)
@@ -11,11 +11,12 @@ import edu.berkeley.qfat.geom.Point;
 
 public class Mesh implements Iterable<Mesh.T> {
 
-    private KDTree kd = new KDTree(3);
 
     public static float EPSILON = (float)0.0001;
     public static Random random = new Random();
 
+    private PointSet<Vert> pointset = new PointSet<Vert>();
+    public Vert nearest(Point p) { return pointset.nearest(p); }
     private HashMap<Point,Vert> verts = new HashMap<Point,Vert>();
 
     public Iterable<E> edges() {
@@ -81,7 +82,7 @@ public class Mesh implements Iterable<Mesh.T> {
         for(T t : this)
             for(Vert p : new Vert[] { t.v1(), t.v2(), t.v3() })
                 p.kdremove();
-        kd = new KDTree(3);
+        pointset.clear();
         for(T t : this)
             for(Vert p : new Vert[] { t.v1(), t.v2(), t.v3() })
                 p.kdinsert();
@@ -144,11 +145,6 @@ public class Mesh implements Iterable<Mesh.T> {
         return (float)total;
     }
 
-    public Vert nearest(Point p) {
-        Object[] results;
-        try { results = kd.nearest(new double[]{p.x,p.y,p.z},1); } catch (Exception e) { throw new Error(e); }
-        return (Vert)results[0];
-    }
 
     public class BindingGroup {
         public HashSet<E> es = new HashSet<E>();
@@ -181,12 +177,12 @@ public class Mesh implements Iterable<Mesh.T> {
         public void kdremove() {
             if (!inserted) return;
             inserted = false;
-            try { kd.delete(new double[]{p.x,p.y,p.z}); } catch (Exception e) { }
+            pointset.remove(this);
         }
         public void kdinsert() {
             if (inserted) return;
             inserted = true;
-            try { kd.insert(new double[]{p.x,p.y,p.z},this); } catch (Exception e) { throw new Error(e); }
+            pointset.add(this);
         }
 
         public float score() { return oldscore; }