NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
Hello Visaders,Those with mouse wheel and Java 1.4 or higher may find this piece of code useful, it implements the zoom. Its very simple and better than using the "shift + left button".
But the behavior is a little diferent from the "shift + left button" zoom, the center is the center of the box, not the center of the screen as the user might expect. I think this problem has already been solved in the list but I couldnt find it in the archive. Any other sugestions on funcionality and performance would also be apreciated:
//display is an instance of DisplayImpl that in this case must be declared final,
//but you can workaround this by calling a method outside the listenerdisplay.getComponent().addMouseWheelListener(new java.awt.event.MouseWheelListener() {
public void mouseWheelMoved(java.awt.event.MouseWheelEvent e) { int rot = e.getWheelRotation(); try{ ProjectionControl pControl = display.getProjectionControl(); double[] pControlMatrix = pControl.getMatrix(); // 3D if (pControlMatrix.length > 10){ // Zoom in if (rot < 0){ pControlMatrix[0] = pControlMatrix[0]*1.1f; pControlMatrix[5] = pControlMatrix[5]*1.1f; pControlMatrix[10] = pControlMatrix[10]*1.1f; } // Zoom out if (rot > 0){ pControlMatrix[0] = pControlMatrix[0]*0.9f; pControlMatrix[5] = pControlMatrix[5]*0.9f;pControlMatrix[10] = pControlMatrix[10]*0.9f; } // 2D } else {
// Zoom in if (rot < 0){ pControlMatrix[0] = pControlMatrix[0]*1.1f; pControlMatrix[3] = pControlMatrix[3]*1.1f; } // Zoom out if (rot > 0){ pControlMatrix[0] = pControlMatrix[0]*0.9f; pControlMatrix[3] = pControlMatrix[3]*0.9f; } } pControl.setMatrix(pControlMatrix); pControl.saveProjection(); } catch (RemoteException re) {} catch (VisADException ve) {} } }); Cicero Zandona
visad
archives: