checkpoint
[anneal.git] / src / edu / berkeley / qfat / Mesh.java
index d1fda3c..374f012 100644 (file)
@@ -98,7 +98,6 @@ public class Mesh implements Iterable<Mesh.T> {
         return (float)total;
     }
 
-
     public class BindingGroup {
         public HashSet<E> es = new HashSet<E>();
         public BindingGroup() { }
@@ -124,8 +123,19 @@ public class Mesh implements Iterable<Mesh.T> {
 
     public final class Vert extends HasPoint {
         public Point p;
+        E e;                // some edge *leaving* this point
+
+        Vert bound_to = this;
+        int watch_count;
+        float watch_x;
+        float watch_y;
+        float watch_z;
+        Vert watch;
+        Matrix binding = new Matrix();
+        float oldscore = 0;
+        boolean inserted = false;
+
         public Point getPoint() { return p; }
-        private Vert(Point p, E e) { this(p); }
         private Vert(Point p) {
             this.p = p;
             if (pointset.get(p) != null) throw new Error();
@@ -180,8 +190,6 @@ public class Mesh implements Iterable<Mesh.T> {
 
         /** does NOT update bound pairs! */
         public boolean transform(Matrix m) {
-            // FIXME: screws up kdtree 
-            // FIXME: screws up hashmap
             unscore();
             try {
                 if (pointset.get(this.p)==null) throw new Error();
@@ -286,17 +294,6 @@ public class Mesh implements Iterable<Mesh.T> {
             } while(e != this.e);
             return norm.norm();
         }
-
-        Vert bound_to = this;
-        int watch_count;
-        float watch_x;
-        float watch_y;
-        float watch_z;
-        Vert watch;
-        E e;                // some edge *leaving* this point
-        Matrix binding = new Matrix();
-        float oldscore = 0;
-        boolean inserted = false;
     }
 
     /** [UNIQUE] an edge */
@@ -419,9 +416,11 @@ public class Mesh implements Iterable<Mesh.T> {
         public E(Point p1, Point p2) {
             if (pointset.get(p1) != null) throw new Error();
             if (pointset.get(p2) != null) throw new Error();
-            this.p1 = new Vert(p1, this);
-            this.p2 = new Vert(p2, this);
+            this.p1 = new Vert(p1);
+            this.p2 = new Vert(p2);
             this.prev = this.next = this.pair = new E(this, this, this);
+            this.p1.e = this;
+            this.p2.e = this.pair;
             sync();
         }
 
@@ -429,7 +428,7 @@ public class Mesh implements Iterable<Mesh.T> {
         public E(E prev, Point p) {
             Vert p2;
             p2 = pointset.get(p);
-            if (p2 == null) p2 = new Vert(p, this);
+            if (p2 == null) p2 = new Vert(p);
             this.p1 = prev.p2;
             this.p2 = p2;
             this.prev = prev;
@@ -444,6 +443,7 @@ public class Mesh implements Iterable<Mesh.T> {
                 this.prev.next = this;
                 this.pair = new E(q, this, z);
             }
+            if (p2.e==null) p2.e = this.pair;
             sync();
         }
 
@@ -532,10 +532,6 @@ public class Mesh implements Iterable<Mesh.T> {
         }
     }
 
-    private Vert register(Point p) {
-        Vert v = pointset.get(p);
-        return v==null ? new Vert(p) : v;
-    }
     public E makeE(Point p1, Point p2) {
         Vert v1 = pointset.get(p1);
         Vert v2 = pointset.get(p2);