checkpoint
[anneal.git] / src / edu / berkeley / qfat / Mesh.java
index e124072..cca7321 100644 (file)
@@ -1,6 +1,7 @@
 package edu.berkeley.qfat;
 import java.awt.*;
 import java.util.*;
+import java.io.*;
 import java.awt.event.*;
 import javax.swing.*;
 import javax.media.opengl.*;
@@ -215,8 +216,19 @@ public class Mesh implements Iterable<Mesh.T> {
 
     // Vertexices //////////////////////////////////////////////////////////////////////////////
 
+
     /** a vertex in the mesh */
-    public final class Vertex extends HasQuadric implements Visitor {
+    public final class Vertex extends HasQuadric implements Visitor, HasPoint {
+        public void bindTo(Matrix bindingMatrix, HasBindingGroup other) {
+            bindTo(bindingMatrix, other, EPSILON);
+        }
+        public float getMaxX() { return getPoint().getMaxX(); }
+        public float getMinX() { return getPoint().getMinX(); }
+        public float getMaxY() { return getPoint().getMaxY(); }
+        public float getMinY() { return getPoint().getMinY(); }
+        public float getMaxZ() { return getPoint().getMaxZ(); }
+        public float getMinZ() { return getPoint().getMinZ(); }
+
         public Point p, goodp;
         public Point oldp;
         E e;                // some edge *leaving* this point
@@ -557,6 +569,10 @@ public class Mesh implements Iterable<Mesh.T> {
     /** [UNIQUE] an edge */
     public final class E extends HasBindingGroup implements Comparable<E> {
 
+        public void bindTo(Matrix bindingMatrix, HasBindingGroup other) {
+            bindTo(bindingMatrix, other, EPSILON);
+        }
+
         public void sanity() {
             if (destroyed) return;
             if (pair!=null && (pair.v1!=v2 || pair.v2!=v1)) throw new RuntimeException();
@@ -610,13 +626,9 @@ public class Mesh implements Iterable<Mesh.T> {
 
         }
 
-        public void bindingGroupChanged(BindingGroup newBindingGroup_) {
-
-            BindingGroup<E> newBindingGroup = (BindingGroup<E>)newBindingGroup_;
-            if (newBindingGroup==null) return;
-            //if (this==newBindingGroup.getMaster()) return;
+        public void bindingGroupChanged() {
             HashSet<E> nbg = new HashSet<E>();
-            for(E eother : (Iterable<E>)newBindingGroup) nbg.add(eother);
+            for(E eother : (Iterable<E>)getBoundPeers()) nbg.add(eother);
             for(E eother : nbg) {
                 if (next==null || prev==null) continue;
                 if (eother.next==null || eother.prev==null) continue;
@@ -691,8 +703,8 @@ public class Mesh implements Iterable<Mesh.T> {
                 v1.bindTo(getBindingMatrix(e), e.v1);
                 v2.bindTo(getBindingMatrix(e), e.v2);
                 /*
-                e.v1.setConstraint(getConstraint());
-                e.v2.setConstraint(getConstraint());
+                e.v1.setConstraint(getAffineConstraint());
+                e.v2.setConstraint(getAffineConstraint());
                 */
             }
         }
@@ -736,8 +748,8 @@ public class Mesh implements Iterable<Mesh.T> {
                 e.v2.getE(mid).pair.pair.bindTo(e.getBindingMatrix(firste), firstq.pair);
             }
             /*
-            first.setConstraint(firste.getConstraint());
-            firstq.setConstraint(firste.getConstraint());
+            first.setConstraint(firste.getAffineConstraint());
+            firstq.setConstraint(firste.getAffineConstraint());
             */
             return nearest(midpoint());
         }
@@ -1069,8 +1081,8 @@ public class Mesh implements Iterable<Mesh.T> {
             }
             */
             /*
-            first.setConstraint(firste.getConstraint());
-            firstq.setConstraint(firste.getConstraint());
+            first.setConstraint(firste.getAffineConstraint());
+            firstq.setConstraint(firste.getAffineConstraint());
             */
             return null;
         }
@@ -1160,4 +1172,24 @@ public class Mesh implements Iterable<Mesh.T> {
             super.glVertices(gl, m);
         }
     }
+
+    // Dump /////////////////////////////////////////////////////////////////////////////
+
+    public void dump(OutputStream os) throws IOException {
+        PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
+        pw.println("solid dump");
+        for(Mesh.T t : this) {
+            Vec normal = t.norm();
+            pw.println("facet normal " + normal.x + " " + normal.y + " " + normal.z);
+            pw.println("  outer loop");
+            for(Mesh.Vertex v : new Mesh.Vertex[] { t.v1(), t.v2(), t.v3() }) {
+                pw.println("    vertex " + v.p.x + " " + v.p.y + " " + v.p.z);
+            }
+            pw.println("  endloop");
+            pw.println("endfacet");
+        }
+        pw.println("endsolid dump");
+        pw.flush();
+    }
+
 }