- 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;
- }
-
- Point clickPoint = null;
- Point clickClosest = null;
-
- int mousex;
- int mousey;
- public void mouseMoved(MouseEvent e) {
- mousex = e.getX();
- mousey = e.getY();
- }
-
- float tx = 0;
- float ty = 0;
- float tz = 0;
- float anglex = 0;
- float angley = 0;
- public void mouseDragged(MouseEvent e) {
- if (shift) {
- /*
- tx += (mousex - e.getX())/(float)20;
- ty += (mousey - e.getY())/(float)20;
- */
- if (closest != null && lastGL != null && projection != null && clickClosest != null) {
- synchronized(safeTriangles) {
- Vec d1 = projection.inverse().times(getMouse()).minus(projection.inverse().times(clickPoint));
- Vec delta = d1.plus(clickClosest).minus(closest.getPoint());
- //System.out.println(delta + " " + closest.getPoint());
- System.out.println(getMouse().minus(clickPoint));
- closest.move(Matrix.translate(delta), true);
- }
- }
- } else {
- anglex -= mousex - e.getX();
- angley += mousey - e.getY();
- }
- mousex = e.getX();
- mousey = e.getY();
- }