From: adam Date: Tue, 18 Dec 2007 02:28:45 +0000 (-0800) Subject: checkpoint X-Git-Url: http://git.megacz.com/?p=anneal.git;a=commitdiff_plain;h=468b086402bb0ccae7ce4dda8b009d61bfc37a71;hp=de98420094a537a70140842ff185e6d113ad270e checkpoint darcs-hash:20071218022845-5007d-e0b46593f2f7f9518fffca20f3d778cab79bd497.gz --- diff --git a/src/edu/berkeley/qfat/Mesh.java b/src/edu/berkeley/qfat/Mesh.java index 951f53a..d5e0db2 100644 --- a/src/edu/berkeley/qfat/Mesh.java +++ b/src/edu/berkeley/qfat/Mesh.java @@ -6,6 +6,7 @@ import javax.swing.*; import javax.media.opengl.*; import javax.media.opengl.glu.*; import edu.berkeley.qfat.geom.*; +import edu.berkeley.qfat.geom.HasBindingGroup; import edu.wlu.cs.levy.CG.KDTree; import edu.berkeley.qfat.geom.Point; import com.infomatiq.jsi.IntProcedure; @@ -165,7 +166,7 @@ public class Mesh implements Iterable { for(Vertex p : (Iterable)getBoundPeers()) if (good || ignoreProblems) p.reComputeErrorAround(); - else p.transform(p.oldp, true); + else p.transform(p.oldp, true); return good; } @@ -305,7 +306,7 @@ public class Mesh implements Iterable { } /** [UNIQUE] an edge */ - public final class E implements Comparable { + public final class E extends HasBindingGroup implements Comparable { public final Vertex p1, p2; T t; // triangle to our "left" @@ -318,6 +319,16 @@ public class Mesh implements Iterable { public boolean intersects(T t) { return t.intersects(p1.p, p2.p); } + public void bindingGroupChanged(edu.berkeley.qfat.geom.BindingGroup newBindingGroup_) { + edu.berkeley.qfat.geom.BindingGroup newBindingGroup = (edu.berkeley.qfat.geom.BindingGroup)newBindingGroup_; + if (newBindingGroup==null) return; + if (this==newBindingGroup.getMaster()) return; + for(E eother : (Iterable)newBindingGroup) { + this.next.bindTo(newBindingGroup.getMatrix(eother), eother.next); + this.prev.bindTo(newBindingGroup.getMatrix(eother), eother.prev); + } + } + public float stretchRatio() { Vertex nearest = error_against.nearest(midpoint()); float nearest_distance = midpoint().distance(nearest.p); @@ -327,8 +338,6 @@ public class Mesh implements Iterable { return nearest_distance/other_distance; } public float comparator() { - - return length(); //return t==null?0:(1/t.aspect()); } diff --git a/src/edu/berkeley/qfat/geom/BindingGroup.java b/src/edu/berkeley/qfat/geom/BindingGroup.java index 8ea271e..d1ff8b8 100644 --- a/src/edu/berkeley/qfat/geom/BindingGroup.java +++ b/src/edu/berkeley/qfat/geom/BindingGroup.java @@ -17,6 +17,8 @@ public class BindingGroup implements Iterable { matrices.put((T)hbg, bg.matrices.get(hbg).times(m)); hbg.bindingGroup = this; } + for(HasBindingGroup hbg : bg.matrices.keySet()) + hbg.bindingGroupChanged(this); bg.matrices.clear(); bg.master = null; } diff --git a/src/edu/berkeley/qfat/geom/HasBindingGroup.java b/src/edu/berkeley/qfat/geom/HasBindingGroup.java index 1c3737a..715f763 100644 --- a/src/edu/berkeley/qfat/geom/HasBindingGroup.java +++ b/src/edu/berkeley/qfat/geom/HasBindingGroup.java @@ -41,6 +41,7 @@ public abstract class HasBindingGroup { if (bindingGroup==null) return; bindingGroup.unbind(this); bindingGroup = null; + bindingGroupChanged(bindingGroup); } public boolean isBoundTo(HasBindingGroup t) { @@ -48,4 +49,5 @@ public abstract class HasBindingGroup { } public Iterable getBoundPeers() { return bindingGroup; } + public void bindingGroupChanged(BindingGroup newBindingGroup) { } } diff --git a/src/edu/berkeley/qfat/geom/Matrix.java b/src/edu/berkeley/qfat/geom/Matrix.java index 19e1a9a..9303233 100644 --- a/src/edu/berkeley/qfat/geom/Matrix.java +++ b/src/edu/berkeley/qfat/geom/Matrix.java @@ -16,10 +16,13 @@ public class Matrix { public final float a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p; /** the zero matrix */ - public static final Matrix ZERO = new Matrix(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); + public static final Matrix ZERO = new Matrix(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); /** the identity matrix */ - public static final Matrix ONE = new Matrix(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1); + public static final Matrix ONE = new Matrix(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1); + + /** the identity matrix */ + public static final Matrix NEGATIVE_ONE = new Matrix(-1,0,0,0,0,-1,0,0,0,0,-1,0,0,0,0,1); public Matrix(float a, float b, float c, float d, float e, float f, float g, float h, float i, float j, float k, float l, float m, float n, float o, float p) {