checkpoint
authoradam <adam@megacz.com>
Sun, 16 Dec 2007 03:24:11 +0000 (19:24 -0800)
committeradam <adam@megacz.com>
Sun, 16 Dec 2007 03:24:11 +0000 (19:24 -0800)
darcs-hash:20071216032411-5007d-bf239e57410a69f3c57e55a0b7c9eed83dd6b0cb.gz

src/edu/berkeley/qfat/Mesh.java
src/edu/berkeley/qfat/geom/HasQuadric.java

index c563563..42f03d2 100644 (file)
@@ -109,25 +109,6 @@ public class Mesh implements Iterable<Mesh.T> {
             fundamentalQuadric = m.times(1/(float)count);
         }
 
-        public void applyQuadricToNeighbor() {
-            if (score_against == null) return;
-
-            Vertex new_nearest = (Vertex)nearest();
-            if (nearest_in_other_mesh != null && new_nearest == nearest_in_other_mesh) return;
-
-            if (nearest_in_other_mesh != null) unApplyQuadricToNeighbor();
-            if (nearest_in_other_mesh != null) throw new Error();
-
-            nearest_in_other_mesh = new_nearest;
-                
-            nearest_in_other_mesh.unComputeError();
-            nearest_in_other_mesh.quadric = nearest_in_other_mesh.quadric.plus(fundamentalQuadric());
-            nearest_in_other_mesh.quadric_count++;
-            nearest_in_other_mesh.computeError();
-
-            reComputeError();
-        }
-
         public void reComputeErrorAround() {
             reComputeError();
             if (nearest_in_other_mesh != null) nearest_in_other_mesh.reComputeError();
@@ -142,7 +123,10 @@ public class Mesh implements Iterable<Mesh.T> {
             score -= oldscore;
             oldscore = 0;
         }
-        public HasQuadric nearest() { return score_against.vertices.nearest(p, this); }
+        public HasQuadric nearest() {
+            if (score_against==null) return null;
+            return score_against.vertices.nearest(p, this);
+        }
         public void computeError() {
             oldscore =
                 quadric_count != 0
index 889eaee..8addfc2 100644 (file)
@@ -37,12 +37,29 @@ public abstract class HasQuadric extends HasPoint {
             applyQuadricToNeighbor();
         }
     public abstract void _recomputeFundamentalQuadric();
-    public abstract void applyQuadricToNeighbor();
     public abstract void reComputeErrorAround();
     public abstract void reComputeError();
     public abstract void unComputeError();
     public abstract void computeError();
     public abstract HasQuadric nearest();
+        public void applyQuadricToNeighbor() {
+            HasQuadric new_nearest = nearest();
+            if (nearest_in_other_mesh != null && new_nearest == nearest_in_other_mesh) return;
+
+            if (nearest_in_other_mesh != null) unApplyQuadricToNeighbor();
+            if (nearest_in_other_mesh != null) throw new Error();
+
+            nearest_in_other_mesh = new_nearest;
+
+            if (nearest_in_other_mesh!=null) {
+                nearest_in_other_mesh.unComputeError();
+                nearest_in_other_mesh.quadric = nearest_in_other_mesh.quadric.plus(fundamentalQuadric());
+                nearest_in_other_mesh.quadric_count++;
+                nearest_in_other_mesh.computeError();
+            }
+
+            reComputeError();
+        }
         public Matrix fundamentalQuadric() {
             if (fundamentalQuadric == null) recomputeFundamentalQuadric();
             return fundamentalQuadric;