X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FHasBindingGroup.java;h=064b65715eb94fcb7f443386fe7f4a988d7f2ad5;hp=fc12a29465d1643fc928703a29f22ec05505e511;hb=33fcd7732290bcd1c7108ba9388af173fd139ee2;hpb=2b09dab499516873839b9bdbc972c980829e9bac diff --git a/src/edu/berkeley/qfat/geom/HasBindingGroup.java b/src/edu/berkeley/qfat/geom/HasBindingGroup.java index fc12a29..064b657 100644 --- a/src/edu/berkeley/qfat/geom/HasBindingGroup.java +++ b/src/edu/berkeley/qfat/geom/HasBindingGroup.java @@ -16,7 +16,8 @@ public abstract class HasBindingGroup { if (other.bindingGroup == null) other.bindingGroup = new BindingGroup(other); if (other.bindingGroup == this.bindingGroup) { - if (getBindingMatrix(other).equals(bindingMatrix)) return; + if (getBindingMatrix(other).equals(bindingMatrix)) + return; throw new Error("rebind attempt: "+this+" and "+other+" with " + bindingMatrix + "; expected " @@ -24,18 +25,25 @@ public abstract class HasBindingGroup { } bindingMatrix = - getBindingMatrix() + getBindingMatrix().inverse() .times(bindingMatrix) .times(other.getBindingMatrix()); other.bindingGroup.merge(bindingGroup, bindingMatrix); } + public int bindingGroupSize() { + if (bindingGroup == null) return 1; + return bindingGroup.size(); + } + + public Matrix getBindingMatrix() { if (bindingGroup==null) return Matrix.ONE; return bindingGroup.getMatrix(this); } public Matrix getBindingMatrix(HasBindingGroup other) { + if (other==this) return Matrix.ONE; return bindingGroup.getMatrix(this, other); } @@ -52,7 +60,7 @@ public abstract class HasBindingGroup { } public boolean isBoundTo(HasBindingGroup t) { - return bindingGroup.contains(t); + return t==this || (bindingGroup!=null && bindingGroup.contains(t)); } public Iterable getBoundPeers() {