checkpoint
authoradam <adam@megacz.com>
Wed, 5 Dec 2007 09:13:39 +0000 (01:13 -0800)
committeradam <adam@megacz.com>
Wed, 5 Dec 2007 09:13:39 +0000 (01:13 -0800)
darcs-hash:20071205091339-5007d-efff06b4cb2894890541bd7447474b80feb4d428.gz

src/edu/berkeley/qfat/Mesh.java

index 12b3503..02188f2 100644 (file)
@@ -334,10 +334,22 @@ public class Mesh implements Iterable<Mesh.T> {
                     ex.bg = this;
                     right.add(ex);
                 }
+
             } else {
                 (!swap ? left : right).add(e);
                 e.bg = this;
             }
+
+            for(E ex : (!swap ? right : left)) {
+                if (e.next.isBoundTo(ex.next)) {
+                    System.out.println("hit!");
+                }
+            }
+        }
+        public boolean isBoundTo(E e1, E e2) {
+            if (left.contains(e1) && right.contains(e2)) return true;
+            if (left.contains(e2) && right.contains(e1)) return true;
+            return false;
         }
         public void dobind(E e) {
             Vert v1 = null;
@@ -357,13 +369,11 @@ public class Mesh implements Iterable<Mesh.T> {
         }
         public void shatter(BindingGroup bg1, BindingGroup bg2) {
             for(E e : left) {
-                e.shatter(e.midpoint(), bg1, bg2);
+                e.shatter(e.midpoint(), bg1, bg2, false);
             }
-            /*
             for(E e : right) {
-                e.shatter(e.midpoint(), bg1, bg2);  // swap correct? 
+                e.shatter(e.midpoint(), bg1, bg2, true);  // swap correct? 
             }
-            */
         }
     }
 
@@ -378,15 +388,18 @@ public class Mesh implements Iterable<Mesh.T> {
         public BindingGroup bg = new BindingGroup(this);
         boolean shattered = false;
 
+        public boolean isBoundTo(E e) { return bg.isBoundTo(this, e); }
+
+
         public int compareTo(E e) { return e.length() > length() ? 1 : -1; }
 
         public void bindEdge(E e) {
-            bg.add(e.pair, false);
+            bg.add(e, true);
         }
         public void dobind() { if (bg != null) bg.dobind(this); }
 
-        public Point shatter() { return shatter(midpoint(), null, null); }
-        public Point shatter(Point mid, BindingGroup bg1, BindingGroup bg2) {
+        public Point shatter() { return shatter(midpoint(), null, null, false); }
+        public Point shatter(Point mid, BindingGroup bg1, BindingGroup bg2, boolean swap) {
             if (shattered) return mid;
             shattered = true;
 
@@ -402,8 +415,8 @@ public class Mesh implements Iterable<Mesh.T> {
 
             newT(r.p, p1.p, mid, null);
             newT(r.p, mid, p2.p, null);
-            bg1.add(p1.getE(mid), false);
-            bg2.add(p2.getE(mid).pair, false);
+            (swap ? bg1 : bg2).add(p1.getE(mid), swap);
+            (swap ? bg2 : bg1).add(p2.getE(mid).pair, swap);
             return mid;
         }