good checkpoint
authoradam <adam@megacz.com>
Tue, 18 Dec 2007 07:37:22 +0000 (23:37 -0800)
committeradam <adam@megacz.com>
Tue, 18 Dec 2007 07:37:22 +0000 (23:37 -0800)
darcs-hash:20071218073722-5007d-1990f450d358e327a7d6e5bb2ce73ed95b6e5de3.gz

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

index 8fcb0ab..14e6bcd 100644 (file)
@@ -51,6 +51,7 @@ public class Main extends MeshViewer {
     
     /** magnification factor */
     private static final float MAG = 1;
+    public static final float MATCHING_EPSILON = 0.01f;
 
     public Main(StlFile stlf, Frame f) {
         super(f);
@@ -93,15 +94,23 @@ public class Main extends MeshViewer {
             Matrix.translate(new Vec(rshift, -depth,    halfup)),
             */
 
-              Matrix.translate(new Vec(0,  depth,    halfup)),
-              Matrix.translate(new Vec(0, -depth,    halfup)),
-
-
-            Matrix.translate(new Vec(lshift,       0,  height)),
-            Matrix.translate(new Vec(rshift,       0,  height)),
-            Matrix.translate(new Vec(lshift,       0, -height)),
-            Matrix.translate(new Vec(rshift,       0, -height)),
+            //Matrix.translate(new Vec(0,  depth,    0)).times(Matrix.rotate(new Vec(0, 0, 1), (float)Math.PI)),
+            //Matrix.translate(new Vec(0, -depth,    0)).times(Matrix.rotate(new Vec(0, 0, 1), (float)Math.PI)),
 
+            Matrix.translate(new Vec(0,   0,    height)).times(Matrix.rotate(new Vec(0, 0, 1), (float)Math.PI)),
+            Matrix.translate(new Vec(0,   0,   -height)).times(Matrix.rotate(new Vec(0, 0, 1), (float)Math.PI)),
+            /*
+            Matrix.translate(new Vec(0,  depth, 0)),
+            Matrix.translate(new Vec(0, -depth, 0)),
+            Matrix.translate(new Vec(0,      0,  height)),
+            Matrix.translate(new Vec(0,      0, -height)),
+            */
+            //Matrix.translate(new Vec(lshift,        depth,  height/2)),
+            //Matrix.translate(new Vec(lshift,        depth, -height/2)),
+            //Matrix.translate(new Vec(rshift,       -depth,  height/2)),
+            //Matrix.translate(new Vec(rshift,       -depth, -height/2)),
+            //Matrix.translate(new Vec(rshift,       0,  height)),
+            //Matrix.translate(new Vec(rshift,       0, -height)),
 
             Matrix.translate(new Vec( width,           0,    0)),
             Matrix.translate(new Vec(-width,           0,    0)),
@@ -206,28 +215,41 @@ public class Main extends MeshViewer {
         tile.newT(rtf, mtf, rbf, null, 6);
         tile.newT(rbf, mtf, mbf, null, 6);
 
+        HashSet<Mesh.E> es = new HashSet<Mesh.E>();
+        for(Mesh.T t : tile) {
+            es.add(t.e1());
+            es.add(t.e2());
+            es.add(t.e3());
+        }
+        for(Mesh.E e : es) {
+            if (e.p1.p.x == e.p2.p.x && e.p1.p.y == e.p2.p.y) continue;
+            if (e.p1.p.z == e.p2.p.z && e.p1.p.y == e.p2.p.y) continue;
+            if (e.p1.p.x == e.p2.p.x && e.p1.p.z == e.p2.p.z) continue;
+            e.shatter();
+        }
+
         for(Matrix m : translations) {
             for(Mesh.T t1 : tile) {
                 for(Mesh.T t2 : tile) {
                     if (t1==t2) continue;
 
-                    if ((t1.v1().p.times(m).minus(t2.v1().p).mag() < Mesh.EPSILON) &&
-                        (t1.v2().p.times(m).minus(t2.v3().p).mag() < Mesh.EPSILON) &&
-                        (t1.v3().p.times(m).minus(t2.v2().p).mag() < Mesh.EPSILON)) {
+                    if ((t1.v1().p.times(m).minus(t2.v1().p).mag() < MATCHING_EPSILON) &&
+                        (t1.v2().p.times(m).minus(t2.v3().p).mag() < MATCHING_EPSILON) &&
+                        (t1.v3().p.times(m).minus(t2.v2().p).mag() < MATCHING_EPSILON)) {
                         t2.e3().bindEdge(t1.e1(), m);
                         t2.e2().bindEdge(t1.e2(), m);
                         t2.e1().bindEdge(t1.e3(), m);
                     }
-                    if ((t1.v2().p.times(m).minus(t2.v1().p).mag() < Mesh.EPSILON) &&
-                        (t1.v3().p.times(m).minus(t2.v3().p).mag() < Mesh.EPSILON) &&
-                        (t1.v1().p.times(m).minus(t2.v2().p).mag() < Mesh.EPSILON)) {
+                    if ((t1.v2().p.times(m).minus(t2.v1().p).mag() < MATCHING_EPSILON) &&
+                        (t1.v3().p.times(m).minus(t2.v3().p).mag() < MATCHING_EPSILON) &&
+                        (t1.v1().p.times(m).minus(t2.v2().p).mag() < MATCHING_EPSILON)) {
                         t2.e3().bindEdge(t1.e2(), m);
                         t2.e2().bindEdge(t1.e3(), m);
                         t2.e1().bindEdge(t1.e1(), m);
                     }
-                    if ((t1.v3().p.times(m).minus(t2.v1().p).mag() < Mesh.EPSILON) &&
-                        (t1.v1().p.times(m).minus(t2.v3().p).mag() < Mesh.EPSILON) &&
-                        (t1.v2().p.times(m).minus(t2.v2().p).mag() < Mesh.EPSILON)) {
+                    if ((t1.v3().p.times(m).minus(t2.v1().p).mag() < MATCHING_EPSILON) &&
+                        (t1.v1().p.times(m).minus(t2.v3().p).mag() < MATCHING_EPSILON) &&
+                        (t1.v2().p.times(m).minus(t2.v2().p).mag() < MATCHING_EPSILON)) {
                         t2.e3().bindEdge(t1.e3(), m);
                         t2.e2().bindEdge(t1.e1(), m);
                         t2.e1().bindEdge(t1.e2(), m);
index 64724a6..62498f8 100644 (file)
@@ -651,9 +651,11 @@ public class Mesh implements Iterable<Mesh.T> {
         public void reinsert() { triangles.remove(this); triangles.add(this); }
 
         public boolean shouldBeDrawn() {
+            /*
             if (e1().bindingGroupSize() <= 1) return false;
             if (e2().bindingGroupSize() <= 1) return false;
             if (e3().bindingGroupSize() <= 1) return false;
+            */
             return true;
         }
 
index a886aa4..c7f9d76 100644 (file)
@@ -199,13 +199,16 @@ public class MeshViewer implements GLEventListener, MouseListener, MouseMotionLi
         for(Matrix m : translations) {
             //if (v1.z==0 && v1.y==0) continue;
             i++;
-            if (i!=2&&i!=5) continue;
+            /*
             Point p = new Point(0, 0, 0).times(m);
             Vec v = new Vec(p.x, p.y, p.z);
             v = v.times((float)1.04);
             gl.glTranslatef(v.x, v.y, v.z);
-            //draw(gl, false, safeTriangles);
+            */
+            draw(gl, false, safeTriangles, m);
+            /*
             gl.glTranslatef(-v.x, -v.y, -v.z);
+            */
         }
         //gl.glEnable(GL.GL_DEPTH_TEST);
         gl.glEnable (GL.GL_LIGHTING);
@@ -213,7 +216,8 @@ public class MeshViewer implements GLEventListener, MouseListener, MouseMotionLi
 
     protected HashSet<Mesh.T> safeTriangles = new HashSet<Mesh.T>();
 
-    private void draw(GL gl, boolean triangles, Iterable<Mesh.T> tris) {
+    private void draw(GL gl, boolean triangles, Iterable<Mesh.T> tris) { draw(gl, triangles, tris, Matrix.ONE); }
+    private void draw(GL gl, boolean triangles, Iterable<Mesh.T> tris, Matrix m) {
         float red = 0.0f;
         float green = 0.0f;
         float blue = 0.0f;
@@ -247,12 +251,12 @@ public class MeshViewer implements GLEventListener, MouseListener, MouseMotionLi
                 gl.glDisable(GL.GL_LIGHTING);
                 gl.glBegin(GL.GL_LINES);
                 gl.glColor3f(1, 1, 1);
-                t.e1().p1.p.glVertex(gl);
-                t.e1().p2.p.glVertex(gl);
-                t.e2().p1.p.glVertex(gl);
-                t.e2().p2.p.glVertex(gl);
-                t.e3().p1.p.glVertex(gl);
-                t.e3().p2.p.glVertex(gl);
+                m.times(t.e1().p1.p).glVertex(gl);
+                m.times(t.e1().p2.p).glVertex(gl);
+                m.times(t.e2().p1.p).glVertex(gl);
+                m.times(t.e2().p2.p).glVertex(gl);
+                m.times(t.e3().p1.p).glVertex(gl);
+                m.times(t.e3().p2.p).glVertex(gl);
                 gl.glEnd();
                 gl.glEnable(GL.GL_LIGHTING);