From: adam Date: Sun, 16 Dec 2007 02:05:18 +0000 (-0800) Subject: checkpoint X-Git-Url: http://git.megacz.com/?p=anneal.git;a=commitdiff_plain;h=134533b4f701c44cf69b2c08bedf4ae7b5beba0b checkpoint darcs-hash:20071216020518-5007d-840c006313a7702eb963ba52f49f903e2a9a0a51.gz --- diff --git a/src/edu/berkeley/qfat/Mesh.java b/src/edu/berkeley/qfat/Mesh.java index ff9819d..4ee9fa1 100644 --- a/src/edu/berkeley/qfat/Mesh.java +++ b/src/edu/berkeley/qfat/Mesh.java @@ -240,10 +240,10 @@ public class Mesh implements Iterable { double ang = Math.abs(e.crossAngle()); if (ang > Math.PI) throw new Error(); /* - if (e.t != null) { - numaspects++; - aspects += e.t.aspect()*e.t.aspect(); - } + if (e.t != null) { + numaspects++; + aspects += e.t.aspect()*e.t.aspect(); + } */ float minangle = (float)(Math.PI * 0.8); @@ -301,39 +301,37 @@ public class Mesh implements Iterable { E e = this.e; do { /* - if (Math.abs(e.crossAngle()) > (Math.PI * 0.9) || - Math.abs(e.next.crossAngle()) > (Math.PI * 0.9)) { - good = false; - } - if (e.t.aspect() < 0.1) { - good = false; - } + if (Math.abs(e.crossAngle()) > (Math.PI * 0.9) || + Math.abs(e.next.crossAngle()) > (Math.PI * 0.9)) { + good = false; + } + if (e.t.aspect() < 0.1) { + good = false; + } */ e.p2.quadricStale = true; e = e.pair.next; } while(e != this.e); - if (!ignorecollision && good) triangles.range(new Segment(oldp, this.p), this); - - + if (!ignorecollision && good) triangles.range(oldp, this.p, (Visitor)this); reComputeErrorAround(); return good; } - public void visit(T t) { - if (!good) return; - E e = Vertex.this.e; - do { - if (!t.has(e.p1) && !t.has(e.p2) && e.intersects(t)) { good = false; } - if (e.t != null) { - if (!e.t.has(t.e1().p1) && !e.t.has(t.e1().p2) && t.e1().intersects(e.t)) { good = false; } - if (!e.t.has(t.e2().p1) && !e.t.has(t.e2().p2) && t.e2().intersects(e.t)) { good = false; } - if (!e.t.has(t.e3().p1) && !e.t.has(t.e3().p2) && t.e3().intersects(e.t)) { good = false; } - } - e = e.pair.next; - } while(e != Vertex.this.e); - } + public void visit(T t) { + if (!good) return; + E e = Vertex.this.e; + do { + if (!t.has(e.p1) && !t.has(e.p2) && e.intersects(t)) { good = false; } + if (e.t != null) { + if (!e.t.has(t.e1().p1) && !e.t.has(t.e1().p2) && t.e1().intersects(e.t)) { good = false; } + if (!e.t.has(t.e2().p1) && !e.t.has(t.e2().p2) && t.e2().intersects(e.t)) { good = false; } + if (!e.t.has(t.e3().p1) && !e.t.has(t.e3().p2) && t.e3().intersects(e.t)) { good = false; } + } + e = e.pair.next; + } while(e != Vertex.this.e); + } private boolean good; public boolean move(Vec v) { @@ -474,15 +472,15 @@ public class Mesh implements Iterable { Vertex nearest = score_against.nearest(midpoint()); //if (t==null) return length(); /* - double ang = Math.abs(crossAngle()); - float minangle = (float)(Math.PI * 0.9); - if (ang > minangle) - return 300; + double ang = Math.abs(crossAngle()); + float minangle = (float)(Math.PI * 0.9); + if (ang > minangle) + return 300; */ /* - if ((length() * length()) / t.area() > 10) - return (float)(length()*Math.sqrt(t.area())); - return length()*t.area(); + if ((length() * length()) / t.area() > 10) + return (float)(length()*Math.sqrt(t.area())); + return length()*t.area(); */ return (float)Math.max(length(), midpoint().distance(nearest.p)); //return length(); diff --git a/src/edu/berkeley/qfat/geom/RTree.java b/src/edu/berkeley/qfat/geom/RTree.java index 35b6f9b..1e6e39a 100644 --- a/src/edu/berkeley/qfat/geom/RTree.java +++ b/src/edu/berkeley/qfat/geom/RTree.java @@ -65,6 +65,14 @@ public class RTree implements Iterable { public void range(HasBoundingBox v, Visitor vis) { visitor = vis; + rect.set(v.getMinX(), v.getMinY(), v.getMinZ(), v.getMaxX(), v.getMaxY(), v.getMaxZ()); + rtree.intersects(rect, myIntProcedure); + visitor = null; + } + + public void range(Point p1, Point p2, Visitor vis) { + visitor = vis; + rect.set(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z); rtree.intersects(rect, myIntProcedure); visitor = null; }