checkpoint
[anneal.git] / src / edu / berkeley / qfat / geom / HasQuadric.java
1 package edu.berkeley.qfat.geom;
2 import javax.media.opengl.*;
3
4 /** any object associated with a specific point in 3D space */
5 public abstract class HasQuadric extends HasPoint {
6
7     public Matrix errorQuadric() { return quadric; }
8     public boolean quadricStale = false;
9     /** the nearest vertex in the "score_against" mesh */
10     public HasQuadric nearest_in_other_mesh;
11
12     /** the number of vertices in the other mesh for which this is the nearest_in_other_mesh */
13     public int    quadric_count;
14
15     /** the total error quadric (contributions from all vertices in other mesh for which this is nearest) */
16     public Matrix quadric = Matrix.ZERO;
17
18     public Matrix fundamentalQuadric = null;
19
20         public void recomputeFundamentalQuadricIfNeighborChanged() {
21             HasQuadric oldv = nearest_in_other_mesh;
22             HasQuadric newv = nearest();
23             if (oldv==newv) return;
24             recomputeFundamentalQuadric();
25             if (oldv!=null) oldv.recomputeFundamentalQuadricIfNeighborChanged();
26             // for some reason this causes an infinite loop
27             //if (newv!=null) newv.recomputeFundamentalQuadricIfNeighborChanged();
28         }
29         public void recomputeFundamentalQuadricIfStale() {
30             if (quadricStale || fundamentalQuadric==null) 
31                 recomputeFundamentalQuadric();
32         }
33     public abstract void recomputeFundamentalQuadric();
34     public abstract void unApplyQuadricToNeighbor();
35     public abstract void applyQuadricToNeighbor();
36     public abstract void reComputeErrorAround();
37     public abstract void reComputeError();
38     public abstract void unComputeError();
39     public abstract void computeError();
40     public abstract HasQuadric nearest();
41         public Matrix fundamentalQuadric() {
42             if (fundamentalQuadric == null) recomputeFundamentalQuadric();
43             return fundamentalQuadric;
44         }
45 }