//
// ProjectionControlJ2D.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.java2d;

import visad.*;

import java.awt.geom.AffineTransform;

import java.rmi.*;

/**
   ProjectionControlJ2D is the VisAD class for controlling the Projection
   from 3-D to 2-D.  It manipulates a TransformGroup node in the
   scene graph.

*/ public class ProjectionControlJ2D extends ProjectionControl { private transient AffineTransform Matrix; private transient VisADCanvasJ2D canvas; /** * Construct a new ProjectionControl for the display in question. * @param d display to control. * @throws VisADException some VisAD error */ public ProjectionControlJ2D(DisplayImpl d) throws VisADException { super(d); /* WLH 5 April 99 Matrix = new AffineTransform(); */ Matrix = init(); matrix = new double[MATRIX2D_LENGTH]; Matrix.getMatrix(matrix); ((DisplayRendererJ2D) getDisplayRenderer()).setTransform2D(Matrix); canvas = null; saveProjection(); } /** * Set the matrix that defines the graphics projection * @param m array of the matrix values (6 elements in Java2D case) * @throws VisADException some VisAD error * @throws RemoteException Java RMI failure. */ public void setMatrix(double[] m) throws VisADException, RemoteException { super.setMatrix(m); Matrix = new AffineTransform(matrix); DisplayRendererJ2D dr = (DisplayRendererJ2D) getDisplayRenderer(); dr.setTransform2D(Matrix); if (canvas == null) { canvas = dr.getCanvas(); } canvas.scratchImages(); // WLH 5 May 2000 // changeControl(true); changeControl(false); } /** * Set aspect ratio of axes. * @param aspect ratios; 2 elements for Java2D * @throws VisADException invalid array length or some other VisAD failure. * @throws RemoteException Java RMI failure. */ public void setAspect(double[] aspect) throws VisADException, RemoteException { if (aspect == null || aspect.length != 2) { throw new DisplayException("aspect array must be length = 2"); } AffineTransform transform = new AffineTransform(); transform.setToScale(aspect[0], aspect[1]); double[] mult = new double[MATRIX2D_LENGTH]; transform.getMatrix(mult); AffineTransform mat = init(); double[] m = new double[MATRIX2D_LENGTH]; mat.getMatrix(m); setMatrix(getDisplay().multiply_matrix(mult, m)); saveProjection(); } private AffineTransform init() { AffineTransform mat = new AffineTransform(); // SWAP flip y AffineTransform t1 = new AffineTransform(1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f); mat.concatenate(t1); return mat; } }

Ads help maintain this website.