checkpoint
[anneal.git] / src / Geom.java
index 080690e..42abd82 100644 (file)
@@ -196,10 +196,28 @@ public class Geom implements Iterable<Geom.T> {
         E next;  // next half-edge
         E pair;  // partner half-edge
 
+
+        public E bound_to = this;
+        public M bound_m  = new M();
+
         public void bind(E e) { bind(e, new M()); }
-        public void bind(E e, M m) {
-            p1.bind(e.p2);
-            p2.bind(e.p1);
+        public void bind(E e2, M m) {
+            E e1 = this;
+            while(e1.bound_to != e1) e1 = e1.bound_to;
+            while(e2.bound_to != e2) e2 = e2.bound_to;
+            e1.bound_to = e2;
+        }
+
+        public void dobind() {
+            if (bound_to == this) return;
+            E ex = this;
+            M m = new M();
+            while(ex.bound_to != ex) { m = m.times(ex.bound_m); ex = ex.bound_to; }
+            p1.bind(ex.bound_to.p1);
+            p2.bind(ex.bound_to.p2);
+        }
+
+        public void shatter() {
         }
 
         private void sync() {