int oldverts = verts;
System.out.println("doubling vertices.");
PriorityQueue<Mesh.E> es = new PriorityQueue<Mesh.E>();
- for(Mesh.E e : tile.edges()) es.add(e);
+ for(Mesh.T t : tile) {
+ es.add(t.e1());
+ es.add(t.e2());
+ es.add(t.e3());
+ }
for(int i=0; i<oldverts; i++) {
Mesh.E e = es.poll();
verts++;
tile.recomputeAllFundamentalQuadrics();
repaint();
goal.applyQuadricToNeighborAll();
+
+ safeTriangles.clear();
+ for(Mesh.T t : tile) safeTriangles.add(t);
}
}
}
+
public static void main(String[] s) throws Exception {
StlFile stlf = new StlFile();
stlf.load("fish.stl");
public static final float EPSILON = (float)0.0001;
public static final Random random = new Random();
- private PointSet<Vert> vertices = new PointSet<Vert>();
-
- public int size() { return vertices.size(); }
- public Iterable<Vert> vertices() { return vertices; }
-
- public Iterable<E> edges() {
- return
- new Iterable<E>() {
- public Iterator<E> iterator() {
- // HACK
- HashSet<E> hse = new HashSet<E>();
- for(T t : Mesh.this) {
- hse.add(t.e1());
- hse.add(t.e2());
- hse.add(t.e3());
- hse.add(t.e1().pair);
- hse.add(t.e2().pair);
- hse.add(t.e3().pair);
- }
- return hse.iterator();
- } };
- }
-
- public Iterator<T> iterator() {
- /*
- for(Vert v : vertices)
- if (v.e != null && v.e.t != null)
- return new FaceIterator(v);
- return new FaceIterator();
- */
- return ts.iterator();
- }
-
public HashSet<T> ts = new HashSet<T>();
public RTree<T> tris = new RTree<T>();
-
public Mesh score_against = null;
public double score = 0;
public float score() { return (float)score; }
-
public int numedges = 0;
public float avgedge = 0;
+ private PointSet<Vert> vertices = new PointSet<Vert>();
+
+ public int size() { return vertices.size(); }
+ public Iterable<Vert> vertices() { return vertices; }
+
+ public Iterator<T> iterator() {
+ return tris.iterator();
+ }
public void rebindPoints() {
// unbind all points
public void glVertices(GL gl) {
+ /*
if (e1().bind_to.set.size() == 0) return;
if (e2().bind_to.set.size() == 0) return;
if (e3().bind_to.set.size() == 0) return;
+ */
norm().glNormal(gl);
p1().glVertex(gl);
gl.glBegin(GL.GL_TRIANGLES);
if (tileon)
- draw(gl, true, tile);
+ draw(gl, true, safeTriangles);
if (tilemeshon)
- draw(gl, false, tile);
+ draw(gl, false, safeTriangles);
gl.glEnd();
//draw(gl, false, tile);
gl.glEnable (GL.GL_LIGHTING);
}
- private void draw(GL gl, boolean triangles, Mesh mesh) {
+ protected HashSet<Mesh.T> safeTriangles = new HashSet<Mesh.T>();
+
+ private void draw(GL gl, boolean triangles, Iterable<Mesh.T> tris) {
float red = 0.0f;
float green = 0.0f;
float blue = 0.0f;
- for(Mesh.T t : mesh) {
+ for(Mesh.T t : tris) {
if (red < 0.15) red = 1.0f;
if (green < 0.15) green = 1.0f;
if (blue < 0.15) blue = 1.0f;