checkpoint
authoradam <adam@megacz.com>
Sun, 16 Dec 2007 02:16:35 +0000 (18:16 -0800)
committeradam <adam@megacz.com>
Sun, 16 Dec 2007 02:16:35 +0000 (18:16 -0800)
darcs-hash:20071216021635-5007d-fe93c6cd1ae1026019862a7b0c84060dd49fd8a8.gz

src/edu/berkeley/qfat/Mesh.java

index 18a9512..fe5baf7 100644 (file)
@@ -149,14 +149,12 @@ public class Mesh implements Iterable<Mesh.T> {
             quadricStale = false;
             unApplyQuadricToNeighbor();
             Matrix m = Matrix.ZERO;
-            E e = this.e;
             int count = 0;
-            do {
+            for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
                 T t = e.t;
                 m = m.plus(t.norm().fundamentalQuadric(t.centroid()));
                 count++;
-                e = e.pair.next;
-            } while(e != this.e);
+            }
             fundamentalQuadric = m.times(1/(float)count);
             applyQuadricToNeighbor();
         }
@@ -199,11 +197,8 @@ public class Mesh implements Iterable<Mesh.T> {
         public void reComputeErrorAround() {
             reComputeError();
             if (nearest_in_other_mesh != null) nearest_in_other_mesh.reComputeError();
-            E e = this.e;
-            do {
+            for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next)
                 e.p2.reComputeError();
-                e = e.pair.next;
-            } while (e != this.e);
         }
         public void reComputeError() {
             unComputeError();
@@ -234,8 +229,7 @@ public class Mesh implements Iterable<Mesh.T> {
 
             int numaspects = 0;
             float aspects = 0;
-            E e = this.e;
-            do {
+            for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
                 //double ang = Math.abs(e.crossAngle());
                 double ang = Math.abs(e.crossAngle());
                 if (ang > Math.PI) throw new Error();
@@ -249,9 +243,7 @@ public class Mesh implements Iterable<Mesh.T> {
                 float minangle = (float)(Math.PI * 0.8);
                 if (ang > minangle)
                     oldscore += (ang - minangle);
-
-                e = e.pair.next;
-            } while (e != this.e);
+        }
             if (numaspects > 0) oldscore += (aspects / numaspects);
 
             //System.out.println(oldscore);
@@ -260,18 +252,12 @@ public class Mesh implements Iterable<Mesh.T> {
         }
 
         private void removeTrianglesFromRTree() {
-            E e = this.e;
-            do {
+            for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next)
                 if (e.t != null) e.t.removeFromRTree();
-                e = e.pair.next;
-            } while(e != this.e);
         }
         private void addTrianglesToRTree() {
-            E e = this.e;
-            do {
+            for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next)
                 if (e.t != null) e.t.addToRTree();
-                e = e.pair.next;
-            } while(e != this.e);
         }
 
         /** does NOT update bound pairs! */
@@ -309,16 +295,14 @@ public class Mesh implements Iterable<Mesh.T> {
 
         public void visit(T t) {
             if (!good) return;
-            E e = Vertex.this.e;
-            do {
+            for(E e = Vertex.this.e; e!=null; e=e.pair.next==Vertex.this.e?null:e.pair.next) {
                 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;