checkpoint
[anneal.git] / src / edu / berkeley / qfat / MeshViewer.java
index f7fa9c1..a0e9c61 100644 (file)
@@ -18,6 +18,7 @@ public class MeshViewer extends JPanel implements GLEventListener, MouseListener
     private float angley = 0;
 
     private Mesh.Vertex closest = null;
+    private Point       closestOriginallyAt = null;
     private int         mousex;
     private int         mousey;
     private Matrix      projection = null;
@@ -34,6 +35,8 @@ public class MeshViewer extends JPanel implements GLEventListener, MouseListener
     public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { }
     public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { }
 
+    public void addKeyListener(KeyListener kl) { glcanvas.addKeyListener(kl); }
+
     public synchronized void init(GLAutoDrawable gld) {
         GL gl = glcanvas.getGL();//gld.getGL();
         gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
@@ -114,6 +117,7 @@ public class MeshViewer extends JPanel implements GLEventListener, MouseListener
             //Matrix projection = Matrix.getProjectionMatrix(gl);
             double dist = Double.MAX_VALUE;
             closest = null;
+            closestOriginallyAt = null;
             for(Mesh mesh : meshes)
                 if (mesh.option_selectable)
                     for(Mesh.Vertex v : mesh.vertices()) {
@@ -211,9 +215,9 @@ public class MeshViewer extends JPanel implements GLEventListener, MouseListener
         if ((e.getModifiersEx() & MouseEvent.SHIFT_DOWN_MASK) != 0) {
             if (closest != null && projection != null) {
                 synchronized(this) {
-                    Point clickClosest = closest == null ? null : closest.getPoint();
+                    if (closestOriginallyAt==null) closestOriginallyAt = closest.getPoint();
                     Vec d1 = projection.inverse().times(getMouse()).minus(projection.inverse().times(clickPoint));
-                    Vec delta = d1.plus(clickClosest).minus(closest.getPoint());
+                    Vec delta = d1.plus(closestOriginallyAt).minus(closest.getPoint());
                     closest.move(delta, false);
                 }
             }