20001113: 3D ProjectionControl matrix & point of view

Just wanted to follow up on Stu Wier's question about setting the
projection "view".

visad.ProjectionControl as been modified with the following
methods added:

public void saveProjection()  - Saves the current display projection matrix.

public void resetProjection() - Restores to projection matrix at time of last 
                                saveProjection() call -- if one was made -- 
                                or to initial projection otherwise.

public double getSavedProjectionMatrix() - Get the matrix that defines 
                                           the saved graphics projection

saveProjection is called upon initialization and when setAspect() is
called.  This means that if you want to implement a Reset button
on your UI to reset the display to the original view, you could
do something like:

    DisplayImpl display = new DisplayImplJ3D("display");
    ProjectionControl projControl = display.getProjectionControl();
    JButton reset = new JButton("Reset");
    reset.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
            projControl.resetProjection();
        }
    });

Instead of having to keep track of the projection matrix and
setting it manually.  This has been implemented in both ProjectionControlJ2D
and ProjectionControlJ3D.

Additionally, a setOrthoView method has been added to ProjectionControlJ3D
to allow one to easily switch the projection to one of the 6 sides of
the 3D cube.  The signature is:

/**
   * Set the projection so the requested view is displayed.
   * @param  view  one of the static view fields (X_PLUS, X_MINUS, etc).  This
   *               will set the view so the selected face is orthogonal to
   *               the display.
   * @throws VisADException   VisAD failure.
   * @throws RemoteException  Java RMI failure.
   */
  public void setOrthoView(int view)
    throws VisADException, RemoteException

with valid views being:

  /** View of the postive X face of the display cube */
  public static final int X_PLUS = 0;
  /** View of the negative X face of the display cube */
  public static final int X_MINUS = 1;
  /** View of the postive Y face of the display cube */
  public static final int Y_PLUS = 2;
  /** View of the negative Y face of the display cube */
  public static final int Y_MINUS = 3;
  /** View of the postive Z face of the display cube */
  public static final int Z_PLUS = 4;
  /** View of the negative Z face of the display cube */
  public static final int Z_MINUS = 5;


So to set the view so the cube face on the positive X side is orthogonal
to your view, you could call:

    projControl.setOrthoView(ProjectionControlJ3D.X_PLUS);

If you have any questions or find any bugs, let me know.

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/
*************************************************************