-public class MeshViewer implements GLEventListener, MouseListener, MouseMotionListener, KeyListener, MouseWheelListener {
-
- public boolean force = false;
- public Mesh tile = new Mesh(false);
- public Mesh goal = new Mesh(false);
- public Matrix[] transforms;
- public Mesh.Vertex[] points;
-
- public int whichNeighbor = 1;
-
- public double temp;
- public boolean tileon = true;
- public boolean tilemeshon = false;
- public boolean goalon = true;
- public boolean anneal = false;
- public boolean hillclimb = false;
- public boolean neighbors = false;
- public boolean neighborsWire = false;
- public boolean neighborsWireOne = false;
- public boolean errorNormals = false;
-
- public int breaks = 0;
- boolean alt = false;
- boolean shift = false;
- boolean control = false;
-
- public Point getMouse() {
- return new Point(mousex, glcanvas.getHeight()-mousey, 0);
- }
-
- public void mouseWheelMoved(MouseWheelEvent e) {
- tz -= e.getWheelRotation();
- }
-
- public void keyTyped(KeyEvent e) { }
- public void keyPressed(KeyEvent e) {
- switch(e.getKeyCode()) {
- case KeyEvent.VK_CONTROL: control = true; break;
- case KeyEvent.VK_ALT: alt = true; break;
- case KeyEvent.VK_SHIFT: shift = true; 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_RIGHT: whichNeighbor++; break;
- case KeyEvent.VK_D: dump(); 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_T: tileon = !tileon; break;
- case KeyEvent.VK_G: goalon = !goalon; break;
- case KeyEvent.VK_M: tilemeshon = !tilemeshon; break;
- }
- }
- 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); }
- }
- public void keyReleased(KeyEvent e) {
- switch(e.getKeyCode()) {
- case KeyEvent.VK_CONTROL: control = false; break;
- case KeyEvent.VK_ALT: alt = false; break;
- case KeyEvent.VK_SHIFT: shift = false; break;
- }
- }
-
- public void mouseClicked(MouseEvent e) { }
- public void mouseEntered(MouseEvent e) { }
- public void mouseExited(MouseEvent e) { }
- public void mousePressed(MouseEvent e) {
- clickPoint = getMouse();
- clickClosest = closest == null ? null : closest.getPoint();
- }
- public void mouseReleased(MouseEvent e) {
- clickPoint = null;
- clickClosest = null;
- }