checkpoint
authoradam <adam@megacz.com>
Sun, 16 Dec 2007 02:03:15 +0000 (18:03 -0800)
committeradam <adam@megacz.com>
Sun, 16 Dec 2007 02:03:15 +0000 (18:03 -0800)
darcs-hash:20071216020315-5007d-43fbcfa77666e8e96389cbcb920fbdd8963c1088.gz

src/edu/berkeley/qfat/Mesh.java

index e4b5bf4..ff9819d 100644 (file)
@@ -106,7 +106,7 @@ public class Mesh implements Iterable<Mesh.T> {
     // Vertexices //////////////////////////////////////////////////////////////////////////////
 
     /** a vertex in the mesh */
     // Vertexices //////////////////////////////////////////////////////////////////////////////
 
     /** a vertex in the mesh */
-    public final class Vertex extends HasPoint {
+    public final class Vertex extends HasPoint implements Visitor<T> {
         public String toString() { return p.toString(); }
         public Point p;
         E e;                // some edge *leaving* this point
         public String toString() { return p.toString(); }
         public Point p;
         E e;                // some edge *leaving* this point
@@ -313,47 +313,27 @@ public class Mesh implements Iterable<Mesh.T> {
                 e = e.pair.next;
             } while(e != this.e);
 
                 e = e.pair.next;
             } while(e != this.e);
 
+            if (!ignorecollision && good) triangles.range(new Segment(oldp, this.p), this);
 
 
-            if (!ignorecollision && good) {
-
-                triangles.range(new Segment(oldp, this.p),
-                            new Visitor<T>() {
-                                public void visit(T t) {
-                                    if (!good) return;
-                                    E e = Vertex.this.e;
-                                    do {
-                                        if (!t.has(e.p1) && !t.has(e.p2) && e.intersects(t)) { good = false; }
-                                        if (e.t != null) {
-                                            if (!e.t.has(t.e1().p1) && !e.t.has(t.e1().p2) && t.e1().intersects(e.t)) { good = false; }
-                                            if (!e.t.has(t.e2().p1) && !e.t.has(t.e2().p2) && t.e2().intersects(e.t)) { good = false; }
-                                            if (!e.t.has(t.e3().p1) && !e.t.has(t.e3().p2) && t.e3().intersects(e.t)) { good = false; }
-                                        }
-                                        e = e.pair.next;
-                                    } while(e != Vertex.this.e);
-                                }
-                            });
-
-                /*
-                for(T t : Mesh.this) {
-                    if (!good) break;
-                    e = this.e;
-                    do {
-                        if (!t.has(e.p1) && !t.has(e.p2) && e.intersects(t)) { good = false; break; }
-                        if (e.t != null) {
-                            if (!e.t.has(t.e1().p1) && !e.t.has(t.e1().p2) && t.e1().intersects(e.t)) { good = false; break; }
-                            if (!e.t.has(t.e2().p1) && !e.t.has(t.e2().p2) && t.e2().intersects(e.t)) { good = false; break; }
-                            if (!e.t.has(t.e3().p1) && !e.t.has(t.e3().p2) && t.e3().intersects(e.t)) { good = false; break; }
-                        }
-                        e = e.pair.next;
-                    } while(e != this.e);
-                }
-                */
-            }
 
 
             reComputeErrorAround();
             return good;
         }
 
 
             reComputeErrorAround();
             return good;
         }
+
+    public void visit(T t) {
+        if (!good) return;
+        E e = Vertex.this.e;
+        do {
+            if (!t.has(e.p1) && !t.has(e.p2) && e.intersects(t)) { good = false; }
+            if (e.t != null) {
+                if (!e.t.has(t.e1().p1) && !e.t.has(t.e1().p2) && t.e1().intersects(e.t)) { good = false; }
+                if (!e.t.has(t.e2().p1) && !e.t.has(t.e2().p2) && t.e2().intersects(e.t)) { good = false; }
+                if (!e.t.has(t.e3().p1) && !e.t.has(t.e3().p2) && t.e3().intersects(e.t)) { good = false; }
+            }
+            e = e.pair.next;
+        } while(e != Vertex.this.e);
+    }
         private boolean good;
 
         public boolean move(Vec v) {
         private boolean good;
 
         public boolean move(Vec v) {