checkpoint
[anneal.git] / src / Geom.java
index a9f9bc2..316e334 100644 (file)
@@ -196,6 +196,40 @@ public class Geom implements Iterable<Geom.T> {
         E next;  // next half-edge
         E pair;  // partner half-edge
 
+
+        public E bound_to = this;
+
+        public void bind(E e) { bind(e, new M()); }
+        public void bind(E e, M m) {
+            E old = this.bound_to;
+            this.bound_to = e.bound_to;
+            e.bound_to = old;
+        }
+
+        public void dobind() {
+            for(E ex = bound_to; ex != this; ex = ex.bound_to) {
+                p1.bind(ex.p1);
+                p2.bind(ex.p2);
+            }
+        }
+
+        public boolean destroyed = false;
+        public void shatter() {
+            if (destroyed) return;
+            /*
+            HashSet<E> eh = new HashSet<E>();
+            eh.add(this);
+            for(E ex = bound_to; ex != this; ex = ex.bound_to) eh.add(ex);
+            E[] es = (E[])eh.toArray(new E[0]);
+            */
+            destroy();
+            pair.shatter();
+            for(E ex = bound_to; ex != this; ex = ex.bound_to) ex.shatter();
+        }
+        public void destroy() {
+            this.destroyed = true;
+        }
+
         private void sync() {
             this.prev.next = this;
             this.next.prev = this;
@@ -282,10 +316,6 @@ public class Geom implements Iterable<Geom.T> {
         public final E e1;
         public final int color;
 
-        public void bind(T t2, int rot) {
-            // FIXME
-        }
-
         T(E e1) {
             this.e1 = e1;
             E e2 = e1.next;