// // MouseBehavior.java // /* VisAD system for interactive analysis and visualization of numerical data. Copyright (C) 1996 - 2017 Bill Hibbard, Curtis Rueden, Tom Rink, Dave Glowacki, Steve Emmerson, Tom Whittaker, Don Murray, and Tommy Jasmin. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ package visad; /** MouseBehavior is the VisAD interface for mouse behaviors for Java3D and Java2D */ public interface MouseBehavior { /** * Get the helper class used by this MouseBehavior. * The <CODE>MouseHelper</CODE> defines the actions taken based * on <CODE>MouseEvent</CODE>s. * @return <CODE>MouseHelper</CODE> being used. */ MouseHelper getMouseHelper(); /** * Return the VisAD ray corresponding to the VisAD cursor coordinates. * @param cursor array (x,y,z) of cursor location * @return corresponding VisADRay * @see visad.VisADRay * @see visad.DisplayRenderer#getCursor() */ VisADRay cursorRay(double[] cursor); /** * Return the VisAD ray corresponding to the component coordinates. * @param screen_x x coordinate of the component * @param screen_y y coordinate of the component * @return corresponding VisADRay * @see visad.VisADRay * @see visad.LocalDisplay#getComponent() */ VisADRay findRay(int screen_x, int screen_y); /** * Return the screen coordinates corresponding to the VisAD coordinates. * @param position array of VisAD coordinates * @return corresponding (x, y) screen coordinates */ int[] getScreenCoords(double[] position); /** * Multiply the two matrices together. * @param a first matrix * @param b second matrix * @return new resulting matrix */ double[] multiply_matrix(double[] a, double[] b); /** * Make a transformation matrix to perform the given rotation, scale and * translation. * @param rotx x rotation * @param roty y rotation * @param rotz z rotation * @param scale scaling factor * @param transx x translation * @param transy y translation * @param transz z translation * @return new matrix */ double[] make_matrix(double rotx, double roty, double rotz, double scale, double transx, double transy, double transz); /** * Make a transformation matrix to perform the given rotation, scale and * translation. * @param rotx x rotation * @param roty y rotation * @param rotz z rotation * @param scalex x scaling factor * @param scaley y scaling factor * @param scalez z scaling factor * @param transx x translation * @param transy y translation * @param transz z translation * @return new matrix */ double[] make_matrix(double rotx, double roty, double rotz, double scalex, double scaley, double scalez, double transx, double transy, double transz); /** * Get the rotation, scale and translation parameters for the specified * matrix. Results are not valid for non-uniform aspect (scale). * @param rot array to hold x,y,z rotation values * @param scale array to hold scale value(s). If length == 1, assumes * uniform scaling. * @param trans array to hold x,y,z translation values */ void instance_unmake_matrix(double[] rot, double[] scale, double[] trans, double[] matrix); /** * Create a translation matrix. no translation in Z direction (useful * for 2D) * @param transx x translation amount * @param transy y translation amount * @return new translation matrix. This can be used to translate * the current matrix * @see #multiply_matrix(double[] a, double[] b) */ double[] make_translate(double transx, double transy); /** * Create a translation matrix. * @param transx x translation amount * @param transy y translation amount * @param transz z translation amount * @return new translation matrix. This can be used to translate * the current matrix * @see #multiply_matrix(double[] a, double[] b) */ double[] make_translate(double transx, double transy, double transz); }