From eb77bcb358e7aed2d35c70a682fe4b64be94abc1 Mon Sep 17 00:00:00 2001 From: adam Date: Tue, 4 Dec 2007 20:49:14 -0800 Subject: [PATCH 1/1] checkpoint darcs-hash:20071205044914-5007d-ce494b80fc1e03e2643f35fbb4806268cfd3856d.gz --- src/edu/berkeley/qfat/Mesh.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/edu/berkeley/qfat/Mesh.java b/src/edu/berkeley/qfat/Mesh.java index 523f6e1..5b98a31 100644 --- a/src/edu/berkeley/qfat/Mesh.java +++ b/src/edu/berkeley/qfat/Mesh.java @@ -20,7 +20,10 @@ public class Mesh implements Iterable { public HashSet es = new HashSet(); public ArrayList ts = new ArrayList(); - public Iterator iterator() { return ts.iterator(); } + public Iterator iterator() { + if (es.size() == 0) return new FaceIterator(); + return new FaceIterator(es.iterator().next().p1); + } public Point origin() { return new Point(0, 0, 0); } @@ -51,17 +54,17 @@ public class Mesh implements Iterable { int num = 0; double dist = 0; HashSet done = new HashSet(); - for(T t : ts) + for(T t : this) for(Vert p : new Vert[] { t.v1(), t.v2(), t.v3() }) { if (done.contains(p)) continue; done.add(p); p.rescore(); } - for(T t : ts) + for(T t : this) for(Vert p : new Vert[] { t.v1(), t.v2(), t.v3() }) p.kdremove(); kd = new KDTree(3); - for(T t : ts) + for(T t : this) for(Vert p : new Vert[] { t.v1(), t.v2(), t.v3() }) p.kdinsert(); return (float)(dist/num); @@ -113,7 +116,7 @@ public class Mesh implements Iterable { public float volume() { double total = 0; - for(T t : ts) { + for(T t : this) { double area = t.area(); Vec origin_to_centroid = new Vec(new Point(0, 0, 0), t.centroid()); boolean facingAway = t.norm().dot(origin_to_centroid) > 0; @@ -599,9 +602,11 @@ public class Mesh implements Iterable { return ret; } + public class FaceIterator implements Iterator { private HashSet visited = new HashSet(); private LinkedList next = new LinkedList(); + public FaceIterator() { } public FaceIterator(Vert v) { next.addFirst(v.e.t); } public boolean hasNext() { return next.peek()!=null; } public void remove() { throw new Error(); } -- 1.7.10.4