fundamentalQuadric = m.times(1/(float)count);
}
- public void applyQuadricToNeighbor() {
- if (score_against == null) return;
-
- Vertex new_nearest = (Vertex)nearest();
- if (nearest_in_other_mesh != null && new_nearest == nearest_in_other_mesh) return;
-
- if (nearest_in_other_mesh != null) unApplyQuadricToNeighbor();
- if (nearest_in_other_mesh != null) throw new Error();
-
- nearest_in_other_mesh = new_nearest;
-
- nearest_in_other_mesh.unComputeError();
- nearest_in_other_mesh.quadric = nearest_in_other_mesh.quadric.plus(fundamentalQuadric());
- nearest_in_other_mesh.quadric_count++;
- nearest_in_other_mesh.computeError();
-
- reComputeError();
- }
-
public void reComputeErrorAround() {
reComputeError();
if (nearest_in_other_mesh != null) nearest_in_other_mesh.reComputeError();
score -= oldscore;
oldscore = 0;
}
- public HasQuadric nearest() { return score_against.vertices.nearest(p, this); }
+ public HasQuadric nearest() {
+ if (score_against==null) return null;
+ return score_against.vertices.nearest(p, this);
+ }
public void computeError() {
oldscore =
quadric_count != 0
applyQuadricToNeighbor();
}
public abstract void _recomputeFundamentalQuadric();
- public abstract void applyQuadricToNeighbor();
public abstract void reComputeErrorAround();
public abstract void reComputeError();
public abstract void unComputeError();
public abstract void computeError();
public abstract HasQuadric nearest();
+ public void applyQuadricToNeighbor() {
+ HasQuadric new_nearest = nearest();
+ if (nearest_in_other_mesh != null && new_nearest == nearest_in_other_mesh) return;
+
+ if (nearest_in_other_mesh != null) unApplyQuadricToNeighbor();
+ if (nearest_in_other_mesh != null) throw new Error();
+
+ nearest_in_other_mesh = new_nearest;
+
+ if (nearest_in_other_mesh!=null) {
+ nearest_in_other_mesh.unComputeError();
+ nearest_in_other_mesh.quadric = nearest_in_other_mesh.quadric.plus(fundamentalQuadric());
+ nearest_in_other_mesh.quadric_count++;
+ nearest_in_other_mesh.computeError();
+ }
+
+ reComputeError();
+ }
public Matrix fundamentalQuadric() {
if (fundamentalQuadric == null) recomputeFundamentalQuadric();
return fundamentalQuadric;