X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2FInteractiveMeshViewer.java;h=f87f257ffe7a8b02ec1f0626f5112fc14a6ab393;hp=e024d04b4cc56e6767a94bf649ada729129932f1;hb=HEAD;hpb=a834467308680ec7fc4a82e2f5998b85784a7572 diff --git a/src/edu/berkeley/qfat/InteractiveMeshViewer.java b/src/edu/berkeley/qfat/InteractiveMeshViewer.java index e024d04..f87f257 100644 --- a/src/edu/berkeley/qfat/InteractiveMeshViewer.java +++ b/src/edu/berkeley/qfat/InteractiveMeshViewer.java @@ -8,59 +8,62 @@ import javax.media.opengl.*; import javax.media.opengl.glu.*; import com.sun.opengl.util.*; import java.util.*; +import edu.berkeley.qfat.bind.*; import edu.berkeley.qfat.geom.*; import edu.berkeley.qfat.geom.Point; -public class InteractiveMeshViewer extends JPanel { +public class InteractiveMeshViewer extends JPanel implements KeyListener { public Mesh tile; public Mesh goal; - private MeshViewer mv; + private HashSet mvs = new HashSet(); public InteractiveMeshViewer(JFrame f) { - mv = new MeshViewer(); - setLayout(new BorderLayout()); - this.add(mv, BorderLayout.CENTER); + MeshViewer mv1 = new MeshViewer(); + MeshViewer mv2 = new MeshViewer(); + MeshViewer mv3 = new MeshViewer(); + MeshViewer mv4 = new MeshViewer(); + mv1.main = (Main)this; + mv2.main = (Main)this; + mv3.main = (Main)this; + mv4.main = (Main)this; + mvs.add(mv1); + mvs.add(mv2); + mvs.add(mv3); + mvs.add(mv4); + f.addKeyListener(this); + addKeyListener(this); + mv1.addKeyListener(this); + mv2.addKeyListener(this); + mv3.addKeyListener(this); + mv4.addKeyListener(this); + setLayout(new GridLayout(2,2)); + this.add(mv1); + this.add(mv2); + this.add(mv3); + this.add(mv4); setTile(new Mesh(false)); setGoal(new Mesh(false)); } public void repaint() { - if (mv != null) mv.repaint(); + if (mvs != null) + for(MeshViewer mv : mvs) + mv.repaint(); } public void setTile(Mesh tile) { - mv.removeMesh(this.tile); + for(MeshViewer mv : mvs) mv.removeMesh(this.tile); this.tile = tile; - mv.addMesh(this.tile); + for(MeshViewer mv : mvs) mv.addMesh(this.tile); } public void setGoal(Mesh goal) { - mv.removeMesh(this.goal); + for(MeshViewer mv : mvs) mv.removeMesh(this.goal); this.goal = goal; goal.option_selectable = false; goal.option_wireframe = true; - mv.addMesh(this.goal); - } - - public synchronized void dump() { - try { - PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("dump.stl"))); - pw.println("solid dump"); - for(Mesh.T t : tile) { - Vec normal = t.norm(); - pw.println("facet normal " + normal.x + " " + normal.y + " " + normal.z); - pw.println(" outer loop"); - for(Mesh.Vertex v : new Mesh.Vertex[] { t.v1(), t.v2(), t.v3() }) { - pw.println(" vertex " + v.p.x + " " + v.p.y + " " + v.p.z); - } - pw.println(" endloop"); - pw.println("endfacet"); - } - pw.println("endsolid dump"); - pw.flush(); - pw.close(); - } catch (Exception e) { throw new RuntimeException(e); } + for(MeshViewer mv : mvs) mv.addMesh(this.goal); } public int whichNeighbor = 1; @@ -76,30 +79,45 @@ public class InteractiveMeshViewer extends JPanel { public boolean errorNormals = false; public boolean force = false; - public Mesh.Vertex[] points; public int breaks = 0; public int temps; public int accepts; public int vertss; + public void keyTyped(KeyEvent e) { } + public void keyReleased(KeyEvent e) { } public void keyPressed(KeyEvent e) { //super.keyPressed(e); switch(e.getKeyCode()) { - case KeyEvent.VK_SPACE: breaks++; force = true; break; + case KeyEvent.VK_SPACE: + synchronized(this) { + tile.subdivide(); + tile.rebindPoints(); + break; + } + //case KeyEvent.VK_SPACE: breaks++; force = true; break; case KeyEvent.VK_UP: temp = temp * 2; break; case KeyEvent.VK_ENTER: temp = 10; break; - case KeyEvent.VK_LEFT: whichNeighbor--; break; + case KeyEvent.VK_N: whichNeighbor++; break; case KeyEvent.VK_RIGHT: whichNeighbor++; break; - case KeyEvent.VK_D: dump(); break; + case KeyEvent.VK_D: + try { + tile.dump(new FileOutputStream("dump.stl")); + } catch (Exception ee) { + throw new RuntimeException(ee); + } + break; case KeyEvent.VK_E: errorNormals = !errorNormals; break; case KeyEvent.VK_A: hillclimb = false; anneal = !anneal; break; case KeyEvent.VK_H: anneal = true; hillclimb = !hillclimb; break; - case KeyEvent.VK_N: neighbors = !neighbors; break; + //case KeyEvent.VK_N: neighbors = !neighbors; break; case KeyEvent.VK_T: tileon = !tileon; break; case KeyEvent.VK_G: goalon = !goalon; break; case KeyEvent.VK_M: tilemeshon = !tilemeshon; break; } + if (transforms!=null) + whichNeighbor = (whichNeighbor % (transforms.length+1)); } - + public Matrix[] transforms; } \ No newline at end of file