/* VisAD Tutorial Copyright (C) 2000 Ugo Taddei */ package tutorial.s4; // Import needed classes import visad.*; import visad.util.*; import visad.java3d.DisplayImplJ3D; import java.rmi.RemoteException; import java.awt.*; import javax.swing.*; import java.awt.event.*; /** VisAD Tutorial example 4_14 Variation of 4_09 Change display layout: axes colors and etc Run program with "java P4_14" */ public class P4_14{ // Declare variables // The domain quantities longitude and latitude // and the dependent quantity rgbVal private RealType red, green, blue; private RealType rgbVal; // Tuple to pack longitude and latitude together private RealTupleType domain_tuple; // The function (domain_tuple -> rgbVal ) private FunctionType func_domain_rgbVal; // Our Data values for the domain are represented by the Set private Set domain_set; // The Data class FlatField private FlatField vals_ff; // The DataReference from data to display private DataReferenceImpl data_ref; // The 2D display, and its the maps private DisplayImpl display; private ScalarMap redXMap, greenYMap, blueZMap; private ScalarMap redMap, greenMap, blueMap; public P4_14(String []args) throws RemoteException, VisADException { // Create the quantities // Use RealType(String name, Unit unit, Set set); red = RealType.getRealType("RED", null, null); green = RealType.getRealType("GREEN", null, null); blue = RealType.getRealType("BLUE", null, null); domain_tuple = new RealTupleType(red, green, blue); // The independent variable rgbVal = RealType.getRealType("RGB_VALUE", null, null); // Create a FunctionType (domain_tuple -> range_tuple ) // Use FunctionType(MathType domain, MathType range) func_domain_rgbVal = new FunctionType( domain_tuple, rgbVal); // Create the domain Set // Integer3DSet(MathType type, int lengthX, int lengthY, int lengthZ) int NCOLS = 8; int NROWS = 8; int NLEVS = 8; domain_set = new Integer3DSet(domain_tuple, NROWS, NCOLS, NLEVS ); // Our 'flat' array double[][] flat_samples = new double[1][NCOLS * NROWS * NLEVS]; // Fill our 'flat' array with the rgbVal values // by looping over NCOLS and NROWS // Note the use of an index variable, indicating the order of the samples int index = 0; for(int l = 0; l < NLEVS; l++) for(int c = 0; c < NCOLS; c++) for(int r = 0; r < NROWS; r++){ // set rgbVal rgbVal flat_samples[0][ index ] = index; // // increment index index++; } // Create a FlatField // Use FlatField(FunctionType type, Set domain_set) vals_ff = new FlatField( func_domain_rgbVal, domain_set); // ...and put the rgbVal values above into it // Note the argument false, meaning that the array won't be copied vals_ff.setSamples( flat_samples , false ); // Create Display and its maps // This is new: a 3D display display = new DisplayImplJ3D("display1"); // Get display's graphics mode control and draw scales GraphicsModeControl dispGMC = (GraphicsModeControl) display.getGraphicsModeControl(); dispGMC.setScaleEnable(true); dispGMC.setPointSize(2.0f); // Get the display renderer DisplayRenderer dRenderer = display.getDisplayRenderer(); // Set the display background color dRenderer.setBackgroundColor(Color.white); // Set box on or off: you choose dRenderer.setBoxOn( false ); // could also change the foreground color dRenderer.setForegroundColor(Color.gray); // uncomment to set the box color //dRenderer.setBoxColor(Color.gray); // Create the ScalarMaps: latitude to XAxis, longitude to YAxis and // rgbVal to ZAxis and to RGB // Use ScalarMap(ScalarType scalar, DisplayRealType display_scalar) redXMap = new ScalarMap( red, Display.XAxis ); greenYMap = new ScalarMap( green, Display.YAxis ); blueZMap = new ScalarMap( blue, Display.ZAxis ); redXMap.setScalarName("The RED Component"); greenYMap.setScalarName("The GREEN Component"); blueZMap.setScalarName("The BLUE Component"); redMap = new ScalarMap( red, Display.Red ); greenMap = new ScalarMap( green, Display.Green ); blueMap = new ScalarMap( blue, Display.Blue ); // Add maps to display display.addMap( redXMap ); display.addMap( greenYMap ); display.addMap( blueZMap ); display.addMap( redMap ); display.addMap( greenMap ); display.addMap( blueMap); // Set axes colors float[] r = colorToFloats(Color.red); redXMap.setScaleColor( r ); float[] g = colorToFloats(Color.green); greenYMap.setScaleColor( g ); float[] b = colorToFloats(Color.blue); blueZMap.setScaleColor( b ); // Create a data reference and set the FlatField as our data data_ref = new DataReferenceImpl("data_ref"); data_ref.setData( vals_ff ); // Add reference to display display.addReference( data_ref ); // Create application window and add display to window JFrame jframe = new JFrame("VisAD Tutorial example 4_14"); jframe.getContentPane().add(display.getComponent()); // Set window size and make it visible jframe.setSize(300, 300); jframe.setVisible(true); } /* Utility method to transform a Java color in an array of rgb components between 0 and 1*/ private float[] colorToFloats(Color c){ float[] rgb = new float[]{0.5f,0.5f,0.5f}; //init with gray if(c != null){ rgb[0] = (float) c.getRed()/255.0f; rgb[1] = (float) c.getGreen()/255.0f; rgb[2] = (float) c.getBlue()/255.0f; } return rgb; } public static void main(String[] args) throws RemoteException, VisADException { new P4_14(args); } } //end of Visad Tutorial Program 4_14