// translate to match centroid
goal.transform(Matrix.translate(tile.centroid().minus(goal.centroid())));
+ goal.makeVerticesImmutable();
//tx.e2.shatter();
//tx.e3.shatter();
tile.score_against = goal;
goal.score_against = tile;
- tile.tilemesh = true;
}
public synchronized void breakit() {
private RTree<T> tris = new RTree<T>();
private PointSet<Vertex> vertices = new PointSet<Vertex>();
- public boolean tilemesh = false;
+ public boolean immutableVertices;
public boolean ignorecollision = false;
public Mesh score_against = null;
public double score = 0;
+
+ public Mesh(boolean immutableVertices) { this.immutableVertices = immutableVertices; }
+
+ public void makeVerticesImmutable() { this.immutableVertices = true; }
public float score() { return (float)score; }
public int size() { return vertices.size(); }
public Iterable<Vertex> vertices() { return vertices; }
-
- public Iterator<T> iterator() {
- return tris.iterator();
- }
+ public Iterator<T> iterator() { return tris.iterator(); }
public void rebindPoints() {
// unbind all points
}
public void computeError() {
if (quadric_count == 0) {
- if (!tilemesh) {
+ if (immutableVertices) {
} else if (nearest_in_other_mesh == null) {
if (score_against != null) {
Vertex ne = score_against.nearest(p);
/** does NOT update bound pairs! */
public boolean transform(Matrix m) {
+ if (immutableVertices) throw new Error();
unApplyQuadricToNeighbor();
Point oldp = this.p;
try {
public class MeshViewer implements GLEventListener, MouseListener, MouseMotionListener, KeyListener, MouseWheelListener {
- public Mesh tile = new Mesh();
- public Mesh goal = new Mesh();
+ public Mesh tile = new Mesh(false);
+ public Mesh goal = new Mesh(false);
public Matrix[] translations;
public Mesh.Vertex[] points;