checkpoint
authoradam <adam@megacz.com>
Sun, 16 Dec 2007 01:57:11 +0000 (17:57 -0800)
committeradam <adam@megacz.com>
Sun, 16 Dec 2007 01:57:11 +0000 (17:57 -0800)
darcs-hash:20071216015711-5007d-c9c25c67a5e02113cebc22bc52fdc8ac70115886.gz

src/edu/berkeley/qfat/Main.java
src/edu/berkeley/qfat/Mesh.java
src/edu/berkeley/qfat/MeshViewer.java

index 82ca36c..b1cef41 100644 (file)
@@ -247,6 +247,7 @@ public class Main extends MeshViewer {
 
         // translate to match centroid
         goal.transform(Matrix.translate(tile.centroid().minus(goal.centroid())));
+        goal.makeVerticesImmutable();
 
         //tx.e2.shatter();
         //tx.e3.shatter();
@@ -265,7 +266,6 @@ public class Main extends MeshViewer {
 
         tile.score_against = goal;
         goal.score_against = tile;
-        tile.tilemesh = true;
     }
 
     public synchronized void breakit() {
index c057f33..32d1aea 100644 (file)
@@ -17,18 +17,19 @@ public class Mesh implements Iterable<Mesh.T> {
     private RTree<T> tris = new RTree<T>();
     private PointSet<Vertex> vertices = new PointSet<Vertex>();
 
-    public boolean tilemesh = false;
+    public boolean immutableVertices;
     public boolean ignorecollision = false;
     public Mesh score_against = null;
     public double score = 0;
+
+    public Mesh(boolean immutableVertices) { this.immutableVertices = immutableVertices; }
+
+    public void makeVerticesImmutable() { this.immutableVertices = true; }
     public float score() { return (float)score; }
 
     public int size() { return vertices.size(); }
     public Iterable<Vertex> vertices() { return vertices; }
-
-    public Iterator<T> iterator() {
-        return tris.iterator();
-    }
+    public Iterator<T> iterator() { return tris.iterator(); }
 
     public void rebindPoints() {
         // unbind all points
@@ -213,7 +214,7 @@ public class Mesh implements Iterable<Mesh.T> {
         }
         public void computeError() {
             if (quadric_count == 0) {
-                if (!tilemesh) {
+                if (immutableVertices) {
                 } else if (nearest_in_other_mesh == null) {
                     if (score_against != null) {
                         Vertex ne = score_against.nearest(p);
@@ -274,6 +275,7 @@ public class Mesh implements Iterable<Mesh.T> {
 
         /** does NOT update bound pairs! */
         public boolean transform(Matrix m) {
+            if (immutableVertices) throw new Error();
             unApplyQuadricToNeighbor();
             Point oldp = this.p;
             try {
index 9bed900..288f7f9 100644 (file)
@@ -12,8 +12,8 @@ import edu.berkeley.qfat.geom.Point;
 
 public class MeshViewer implements GLEventListener, MouseListener, MouseMotionListener, KeyListener, MouseWheelListener  {
 
-    public Mesh tile = new Mesh();
-    public Mesh goal = new Mesh();
+    public Mesh tile = new Mesh(false);
+    public Mesh goal = new Mesh(false);
     public Matrix[] translations;
     public Mesh.Vertex[] points;