}
}
- public void unApplyQuadricToNeighborAll() {
- for(Vertex p : vertices)
- p.unApplyQuadricToNeighbor();
- }
- public void recomputeAllFundamentalQuadrics() {
- for(Vertex p : vertices)
- p.recomputeFundamentalQuadric();
- }
- public void applyQuadricToNeighborAll() {
- for(Vertex p : vertices)
- p.applyQuadricToNeighbor();
- }
-
public void transform(Matrix m) {
ArrayList<Vertex> set = new ArrayList<Vertex>();
for(Vertex v : vertices) set.add(v);
}
public void recomputeFundamentalQuadric() {
- if (!quadricStale && fundamentalQuadric != null) return;
- quadricStale = false;
unApplyQuadricToNeighbor();
- Matrix m = Matrix.ZERO;
- int count = 0;
- for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
- T t = e.t;
- m = m.plus(t.norm().fundamentalQuadric(t.centroid()));
- count++;
+ if (quadricStale || fundamentalQuadric==null) {
+ Matrix m = Matrix.ZERO;
+ int count = 0;
+ for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
+ T t = e.t;
+ m = m.plus(t.norm().fundamentalQuadric(t.centroid()));
+ count++;
+ }
+ quadricStale = false;
+ fundamentalQuadric = m.times(1/(float)count);
}
- fundamentalQuadric = m.times(1/(float)count);
applyQuadricToNeighbor();
}