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() {