X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2FMesh.java;h=747599c59e3ff26c47a82543d461665574ba3909;hp=f9c9b945551a3f292b503ee0bc78d209e937e338;hb=2f48eabf8a07e99905e1eae0b64b5a2abecb01fe;hpb=725965a06dc9a59f88b36e387f07ec3600b9364b diff --git a/src/edu/berkeley/qfat/Mesh.java b/src/edu/berkeley/qfat/Mesh.java index f9c9b94..747599c 100644 --- a/src/edu/berkeley/qfat/Mesh.java +++ b/src/edu/berkeley/qfat/Mesh.java @@ -239,9 +239,17 @@ public class Mesh implements Iterable { 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) { @@ -323,23 +331,22 @@ public class Mesh implements Iterable { 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); } } @@ -352,7 +359,7 @@ public class Mesh implements Iterable { } public void shatter(BindingGroup bg1, BindingGroup bg2) { for(E e : set) { - e.shatter(e.midpoint(), bg1, bg2, false); + e.shatter(e.midpoint(), bg1, bg2); } } } @@ -365,7 +372,7 @@ public class Mesh implements Iterable { 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; @@ -373,8 +380,8 @@ public class Mesh implements Iterable { 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; @@ -407,10 +414,12 @@ public class Mesh implements Iterable { 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;