checkpoint
authoradam <adam@megacz.com>
Sun, 16 Dec 2007 01:39:29 +0000 (17:39 -0800)
committeradam <adam@megacz.com>
Sun, 16 Dec 2007 01:39:29 +0000 (17:39 -0800)
darcs-hash:20071216013929-5007d-b16b8c08f1a2521ae8cace6a750923689904fb96.gz

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

index c330958..5896167 100644 (file)
@@ -272,7 +272,11 @@ public class Main extends MeshViewer {
         int oldverts = verts;
         System.out.println("doubling vertices.");
         PriorityQueue<Mesh.E> es = new PriorityQueue<Mesh.E>();
-        for(Mesh.E e : tile.edges()) es.add(e);
+        for(Mesh.T t : tile) {
+            es.add(t.e1());
+            es.add(t.e2());
+            es.add(t.e3());
+        }
         for(int i=0; i<oldverts; i++) {
             Mesh.E e = es.poll();
             verts++;
@@ -403,10 +407,14 @@ public class Main extends MeshViewer {
             tile.recomputeAllFundamentalQuadrics();
             repaint();
             goal.applyQuadricToNeighborAll();
+
+            safeTriangles.clear();
+            for(Mesh.T t : tile) safeTriangles.add(t);
             }
        }
     }
 
+
     public static void main(String[] s) throws Exception {
         StlFile stlf = new StlFile();
         stlf.load("fish.stl");
index a935357..16722ed 100644 (file)
@@ -14,48 +14,21 @@ public class Mesh implements Iterable<Mesh.T> {
     public static final float EPSILON = (float)0.0001;
     public static final Random random = new Random();
 
-    private PointSet<Vert> vertices = new PointSet<Vert>();
-
-    public int size() { return vertices.size(); }
-    public Iterable<Vert> vertices() { return vertices; }
-
-    public Iterable<E> edges() {
-        return
-            new Iterable<E>() {
-            public Iterator<E> iterator() {
-                // HACK
-                HashSet<E> hse = new HashSet<E>();
-                for(T t : Mesh.this) {
-                    hse.add(t.e1());
-                    hse.add(t.e2());
-                    hse.add(t.e3());
-                    hse.add(t.e1().pair);
-                    hse.add(t.e2().pair);
-                    hse.add(t.e3().pair);
-                }
-                return hse.iterator();
-            } };
-    }
-
-    public Iterator<T> iterator() {
-        /*
-        for(Vert v : vertices)
-            if (v.e != null && v.e.t != null)
-                return new FaceIterator(v);
-        return new FaceIterator();
-        */
-        return ts.iterator();
-    }
-
     public HashSet<T> ts = new HashSet<T>();
     public RTree<T> tris = new RTree<T>();
-
     public Mesh score_against = null;
     public double score = 0;
     public float score() { return (float)score; }
-
     public int numedges = 0;
     public float avgedge = 0;
+    private PointSet<Vert> vertices = new PointSet<Vert>();
+
+    public int size() { return vertices.size(); }
+    public Iterable<Vert> vertices() { return vertices; }
+
+    public Iterator<T> iterator() {
+        return tris.iterator();
+    }
 
     public void rebindPoints() {
         // unbind all points
@@ -879,9 +852,11 @@ public class Mesh implements Iterable<Mesh.T> {
 
         public void glVertices(GL gl) {
 
+            /*
             if (e1().bind_to.set.size() == 0) return;
             if (e2().bind_to.set.size() == 0) return;
             if (e3().bind_to.set.size() == 0) return;
+            */
 
             norm().glNormal(gl);
             p1().glVertex(gl);
index f869aac..b1f0e52 100644 (file)
@@ -179,9 +179,9 @@ public class MeshViewer implements GLEventListener, MouseListener, MouseMotionLi
 
         gl.glBegin(GL.GL_TRIANGLES);
         if (tileon)
-        draw(gl, true, tile);
+        draw(gl, true, safeTriangles);
         if (tilemeshon)
-        draw(gl, false, tile);
+        draw(gl, false, safeTriangles);
         gl.glEnd();
 
         //draw(gl, false, tile);
@@ -211,11 +211,13 @@ public class MeshViewer implements GLEventListener, MouseListener, MouseMotionLi
         gl.glEnable (GL.GL_LIGHTING);
     }
 
-    private void draw(GL gl, boolean triangles, Mesh mesh) {
+    protected HashSet<Mesh.T> safeTriangles = new HashSet<Mesh.T>();
+
+    private void draw(GL gl, boolean triangles, Iterable<Mesh.T> tris) {
         float red = 0.0f;
         float green = 0.0f;
         float blue = 0.0f;
-        for(Mesh.T t : mesh) {
+        for(Mesh.T t : tris) {
             if (red < 0.15) red = 1.0f;
             if (green < 0.15) green = 1.0f;
             if (blue < 0.15) blue = 1.0f;