X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2FMesh.java;h=e06ac65c81bfc63cd0403b3acb7e0446ba79c16e;hb=062954ad23cda577a58355ce0be542b852520c1f;hp=f7ecb4d519416eae1757fa01dc8b774b7fcfcaee;hpb=0ec883275010391cb96bb7bc1db3a6a3333f8dd9;p=anneal.git diff --git a/src/edu/berkeley/qfat/Mesh.java b/src/edu/berkeley/qfat/Mesh.java index f7ecb4d..e06ac65 100644 --- a/src/edu/berkeley/qfat/Mesh.java +++ b/src/edu/berkeley/qfat/Mesh.java @@ -11,12 +11,13 @@ import edu.berkeley.qfat.geom.Point; public class Mesh implements Iterable { - private KDTree kd = new KDTree(3); public static float EPSILON = (float)0.0001; public static Random random = new Random(); - private HashMap verts = new HashMap(); + private PointSet pointset = new PointSet(); + public Vert nearest(Point p) { return pointset.nearest(p); } + private HashMap verts = new HashMap(); public Iterable edges() { return @@ -81,7 +82,7 @@ public class Mesh implements Iterable { 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 { 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 es = new HashSet(); @@ -170,8 +166,9 @@ public class Mesh implements Iterable { } public Vert register(Point p) { Vert v = verts.get(p); return v==null ? new Vert(p) : v; } - public final class Vert { + public final class Vert extends HasPoint { public Point p; + public Point getPoint() { return p; } private Vert(Point p) { this.p = p; if (verts.get(p) != null) throw new Error(); @@ -180,12 +177,12 @@ public class Mesh implements Iterable { 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; }