X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FHasQuadric.java;h=8addfc23099625a783e094877968af36c35486ef;hp=889eaeeac7c90c069366500441cf5425c705302a;hb=0333b4f07d3e3cacb5975fe7ac3c8c3933150e37;hpb=366e1c99a39b4ac6e8a55828678ce0213e1badc2 diff --git a/src/edu/berkeley/qfat/geom/HasQuadric.java b/src/edu/berkeley/qfat/geom/HasQuadric.java index 889eaee..8addfc2 100644 --- a/src/edu/berkeley/qfat/geom/HasQuadric.java +++ b/src/edu/berkeley/qfat/geom/HasQuadric.java @@ -37,12 +37,29 @@ public abstract class HasQuadric extends HasPoint { 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;