+ public void flip() {
+ // FIXME: coplanarity check needed
+ if (destroyed) return;
+ for (E e : (Iterable<E>)getBoundPeers()) {
+ if (!e.pair.isBoundTo(pair)) throw new RuntimeException("cannot flip!");
+ }
+ Vertex v1 = t.getOtherVertex(this);
+ Vertex v2 = pair.t.getOtherVertex(pair);
+ destroy();
+ pair.destroy();
+ newT(v1, v2, p2).red = true;
+ newT(v2, v1, p1).red = true;
+ for (E e : (Iterable<E>)getBoundPeers()) {
+ if (e.destroyed) continue;
+ Vertex v1e = e.t.getOtherVertex(e);
+ Vertex v2e = e.pair.t.getOtherVertex(e.pair);
+ e.destroy();
+ e.pair.destroy();
+ if (v1e.getE(v2e)!=null) throw new RuntimeException();
+ newT(v1e, v2e, e.p2).red = true;
+ newT(v2e, v1e, e.p1).red = true;
+ makeE(v1.getPoint(),
+ v2.getPoint()).bindTo(this.getBindingMatrix(e), makeE(v1e.getPoint(), v2e.getPoint()));
+ makeE(v2.getPoint(),
+ v1.getPoint()).bindTo(pair.getBindingMatrix(e.pair), makeE(v2e.getPoint(), v1e.getPoint()));
+
+ }
+ }
+