Unidata - To provide the data services, tools, and cyberinfrastructure leadership that advance Earth system science, enhance educational opportunities, and broaden participation. Unidata
         
  advanced  
 

20001027: Display stuff

>From: Paul Gifford <pgg@xxxxxxxxxxxxx>
>Organization: NOAA/NGDC
>Keywords: 200010271635.e9RGZK409722

Hi Paul-

> - I use setScalarName() to get nice descriptions along the axes. 
>However, when I examine the values by holding down both left and right
>buttons, the not-nice "internal" name is displayed in the upper left of
>the display.  Is there any way to get the nice description up there
>instead?

The best bet is to not use the in-display printouts, but to turn that
off and use your own custom widgets to display values.  See comments 
below.

>- I would like to zoom in on the display.  I know I can shift-left drag
>but what I had in mind is drawing a box over the display and having the
>display zoom to the selection (changing the ranges).  Anyone have any
>starting suggestions on this?  Hopefully the ideas won't involve
>Test27...no matter how I run that test (different JDKs, in or out of
>devel environment) it brings certain death to my machine and I have to
>hit the reset button...

While it's not in core VisAD, Unidata has developed some classes
that do this to some degree.  Basically, I created zoom and translate
methods in a wrapper class for a VisAD display.  Zoom  and translate
look like:

    /**
     * Zoom in on the display
     *
     * @param  factor  zoom factor
     *                 ( > 1 = zoom in, 1 > zoom > 0 =  zoom out).  using
     *                 2.0 and .5 seems to work well.
     */
    public void zoom(double factor)
    {
         double[] currentMatrix = projControl.getMatrix();
         double[] scaleMatrix
             mouseBehavior.make_matrix(
                 0.0, 0.0, 0.0, factor, 0.0, 0.0, 0.0);
         scaleMatrix
             mouseBehavior.multiply_matrix(
                 scaleMatrix, currentMatrix);
        try {
            projControl.setMatrix(scaleMatrix);
        }
        catch (Exception e)
        { e.printStackTrace(); }
    }

    /**
     * Translate (X,Y position) of the display
     *
     * @param  xFactor   X translation factor
     * @param  yFactor   Y translation factor
     */
    public void translate(double xFactor, double yFactor)
    {
         double[] currentMatrix = projControl.getMatrix();
         double[] translateMatrix
             mouseBehavior.make_translate(xFactor, yFactor);
         translateMatrix
             mouseBehavior.multiply_matrix(
                 translateMatrix, currentMatrix);
        try {
            projControl.setMatrix(translateMatrix);
        }
        catch (Exception e)
        { e.printStackTrace(); }
    }

You can see this code in action if you download the metapps.jar, and
auxdata.jar file from the Unidata page:

http://www.unidata.ucar.edu/community/committees/metapps/SoftwareDownload.html

and run:

java -cp metapps.jar;auxdata.jar;visad.jar 
ucar.unidata.view.geoloc.MapProjectionDisplay

Zooming can be accomplished by drawing a rubberband box with the right mouse
button (manipulation button).  Panning is done is the standard VisAD way.

The code to figure out how much to pan and zoom based on the rubber band
box is ugly, but is basically what's done in visad.MouseHelper.

This example also has a readout of lat,lon points as you drag MB2 around
which addresses your first request.

Source code for these classes is available on the same download page above.
It is licensed under the LGPL (same as VisAD) and is freely available.

Don
*************************************************************
Don Murray                               UCAR Unidata Program
dmurray@xxxxxxxxxxxxxxxx                        P.O. Box 3000
(303) 497-8628                              Boulder, CO 80307
*************************************************************
Unidata WWW Server               http://www.unidata.ucar.edu/
McIDAS Demonstration Machine  http://mcdemo.unidata.ucar.edu/
*************************************************************


 
 
  Contact Us     Site Map     Search     Terms and Conditions     Privacy Policy     Participation Policy
 
National Science Foundation (NSF) UCAR Community Programs   Unidata is a member of the UCAR Community Programs, is managed by the University Corporation for Atmospheric Research, and is sponsored by the National Science Foundation.
P.O. Box 3000     Boulder, CO 80307-3000 USA     Tel: 303-497-8643     Fax: 303-497-8690