e = e.pair.next;
} while(e != this.e);
-
// FIXME: intersection test needed?
- return true;
+ boolean good = true;
+ for(T t : Mesh.this) {
+ if (!good) break;
+ e = this.e;
+ do {
+ if (!t.has(e.p1) && !t.has(e.p2) && e.t != null && e.intersects(t)) { good = false; break; }
+ e = e.pair.next;
+ } while(e != this.e);
+ }
+ return good;
}
public boolean move(Vec v) {
public BindingGroup bind_others;
public BindingGroup other() { return bind_others; }
public BindingGroup(BindingGroup bind_others) { this.bind_others = bind_others; }
- public BindingGroup() {
- this.bind_others = new BindingGroup(this);
- }
+ public BindingGroup() { this.bind_others = new BindingGroup(this); }
+ public BindingGroup(E e) { this(); set.add(e); }
public void add(E e) {
if (set.contains(e)) return;
for (E epeer : e.bind_peers.set) {
epeer.bind_peers = this;
+ epeer.bind_to = bind_others;
set.add(epeer);
}
for (E eother : e.bind_to.set) {
- eother.bind_to = bind_others;
bind_others.add(eother);
}
- for(E ex : (!swap ? right : left)) {
- if (e.prev.isBoundTo(ex.prev)) {
- System.out.println("hit!");
+ for(E eother : bind_others.set) {
+ if (e.next.bind_to.set.contains(eother.prev)) {
+ e.next.next.bindEdge(eother.prev.prev);
}
}
}
public void shatter(BindingGroup bg1, BindingGroup bg2) {
for(E e : set) {
- e.shatter(e.midpoint(), bg1, bg2, false);
+ e.shatter(e.midpoint(), bg1, bg2);
}
}
}
E prev; // previous half-edge
E next; // next half-edge
E pair; // partner half-edge
- public BindingGroup bind_peers = new BindingGroup();
+ public BindingGroup bind_peers = new BindingGroup(this);
public BindingGroup bind_to = bind_peers.other();
boolean shattered = false;
public void bindEdge(E e) { bind_to.add(e); }
public void dobind() { bind_to.dobind(this); }
- public Point shatter() { return shatter(midpoint(), null, null, false); }
- public Point shatter(Point mid, BindingGroup bg1, BindingGroup bg2, boolean swap) {
+ public Point shatter() { return shatter(midpoint(), null, null); }
+ public Point shatter(Point mid, BindingGroup bg1, BindingGroup bg2) {
if (shattered) return mid;
shattered = true;
prev.t = null;
pair.next.t = null;
pair.prev.t = null;
+ /*
this.bind_to = null;
pair.bind_to = null;
this.bind_peers = null;
pair.bind_peers = null;
+ */
pair.prev.next = next;
next.prev = pair.prev;
prev.next = pair.next;