import javax.media.opengl.*;
import java.util.*;
+/** tracks an equivalence class of geometric objects which are related to each other by transformation matrices */
public class BindingGroup<T extends HasBindingGroup> implements Iterable<T> {
private T master = null;
matrices.put(master, Matrix.ONE);
}
+ public int size() { return matrices.size(); }
+
public void merge(BindingGroup<T> bg, Matrix m) {
+ if (bg==this) throw new Error();
for(HasBindingGroup hbg : bg.matrices.keySet()) {
matrices.put((T)hbg, bg.matrices.get(hbg).times(m));
hbg.bindingGroup = this;
}
+
+ Matrix v = getMatrix(bg.master, master);
+
+ HashSet<HasBindingGroup> stuff = new HashSet<HasBindingGroup>();
+ for(HasBindingGroup hbg : bg.matrices.keySet())
+ stuff.add(hbg);
bg.matrices.clear();
bg.master = null;
+ for(HasBindingGroup hbg : stuff)
+ hbg.bindingGroupChanged(this);
}
- public T getMaster() { return master; }
public Matrix getMatrix(T t) { return matrices.get(t); }
public Iterator<T> iterator() { return matrices.keySet().iterator(); }