/* 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 */ // // TCDataTest.java // // Version 3 April 2001 package visad.bom; import visad.*; import java.rmi.RemoteException; // import visad.java3d.DisplayImplJ3D; import visad.java2d.DisplayImplJ2D; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JPanel; /** * Test program to demonstrate TCData, a class for representing * Tropical Cyclones in VisAD * * Creates some static TC Data, and displays a simple plot * */ public class TCDataTest { public static void main(String[] args) throws VisADException, RemoteException { MathType mtTC; TCData data = new TCData(); mtTC = data.getType(); System.out.println("MathType:\n" + mtTC); // Step 1 // Aim: set up the Data Model // // make a FIX and store in the FlatField ffFixes // double[] daTimes = {0.0d, 1000.0d, 2000.0d}; // int[] iaFixIds = {0, 1, 2}; float[] faLats = {10.0f, 11.0f, 12.0f}; float[] faLons = {160.0f, 165.0f, 170.0f}; float[] faErrors = {0.0f, 0.0f, 0.0f}; int[] iaConfidence = {2, 3, 4}; int[] iaLocationStyles = {2, 3, 4}; float[] faWind_means = {50.0f, 60.0f, 70.0f}; float[] faWind_gusts = {60.0f, 70.0f, 80.0f}; float[] faCentral_pressures = {990.0f, 985.0f, 980.0f}; int[] iaCategories = {2, 3, 4}; int[] iaIntensityStyles = {2, 3, 4}; float[] faGaleRadii = {200.0f, 210.0f, 220.0f}; float[] faStormRadii = {100.0f, 110.0f, 120.0f}; float[] faHurricaneRadii = {60.0f, 70.0f, 80.0f}; float[] faRadiiOfMaximumWinds = {50.0f, 60.0f, 70.0f}; int[] iaSizeStyles = {2, 3, 4}; float[] faDepth = {200.0f, 200.0f, 200.0f}; float[] faEyeDiameter = {50.0f, 60.0f, 70.0f}; float[] faPressureOfLastClosedIsobar = {200.0f, 210.0f, 220.0f}; int[] iaStructureStyles = {2, 3, 4}; FlatField ffFixes = TCData.makeLocations(daTimes, faLats, faLons, faErrors, iaConfidence, iaLocationStyles, faWind_means, faWind_gusts, faCentral_pressures, iaCategories, iaIntensityStyles, faGaleRadii, faStormRadii, faHurricaneRadii, faRadiiOfMaximumWinds, iaSizeStyles, faDepth, faEyeDiameter, faPressureOfLastClosedIsobar, iaStructureStyles); // System.out.println("ffIntensities:\n" + ffFixes); // // make an INTENSITY and store in the FlatField ffIntensities // // FlatField ffIntensities = TCData.makeIntensities( daTimes, iaIntensityIds, faWind_means, // faWind_gusts, faCentral_pressures, iaCategories); // System.out.println("ffIntensities:\n" + ffIntensities); // // make a SIZE and store in the FlatField ffSizes // // FlatField ffSizes = TCData.makeSizes( daTimes, iaSizeIds, faGale_radii, // faStorm_radii, faHurricane_radii, faRadii_of_maximum_winds, // iaSizeStyles); // System.out.println("ffSizes:\n" + ffSizes); // // make a STEERING and store in the FlatField ffSteering // // FlatField ffSteerings = TCData.makeSteerings( daTimes, iaSteeringIds, faSteering_directions, // iaSteeringStyles); // System.out.println("ffSteerings:\n" + ffSteerings); // // now make a TRACK // String sTrackType = new String("Observed"); String sTrackName = new String("RealTime"); int iBaseDateTime = 4000; int iCreateDateTime = 5000; String sDisplayType = new String("IDunno"); Tuple tTrack = TCData.makeTrack(sTrackType, sTrackName, iBaseDateTime, iCreateDateTime, sDisplayType, ffFixes); // ffFixes, ffIntensities, ffSizes, ffSteerings); // System.out.println("tTrack:\n" + tTrack); // // now make a field of TRACKs // int iTrackID = 0; FieldImpl fiTrack = TCData.makeTrackField(iTrackID, tTrack); // System.out.println("fiTrack:\n" + fiTrack); // // now make a disturbance // String sCountry = new String("Australia"); String sState = new String("WA"); int iYear = 2000; int iNumber = 0; String sHistoricalName = new String("Olga"); int iOpenDate = 5000; int iCloseDate = 15000; int iArchiveMode = 0; int iRealTimeMode = 0; Tuple tDisturbance = TCData.makeDisturbance(sCountry, sState, iYear, iNumber, sHistoricalName, iOpenDate, iCloseDate, iArchiveMode, iRealTimeMode, fiTrack); // System.out.println("tDisturbance:\n" + tDisturbance); // // now make a field of disturbances // TCData tcd = new TCData(); tcd.addDisturbance(0, tDisturbance); FieldImpl fiTCD = tcd.getData(); // System.out.println("TCData:\n" + fiTCD); // Step 2 // Aim: create the View Model // Result: display which is an implementation of the visad.Display interface DisplayImpl display = new DisplayImplJ2D("display"); display.addMap(new ScalarMap(TCData.rtTime, Display.XAxis)); display.addMap(new ScalarMap(TCData.rtCentralPressure, Display.YAxis)); // Step 3 // Aim: create the Communication Model // Result: dri which is an implementation of the visad.DataReference interface DataReferenceImpl driTC = new DataReferenceImpl("TC"); // driTC.setData(ffFixes); driTC.setData(tTrack); // link the View Model (display) to the Data Model (via the DataReference) display.addReference(driTC, null); // Step 4 // Do the swing magic JFrame frame = new JFrame("TCData Display Test"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.setAlignmentY(JPanel.TOP_ALIGNMENT); panel.setAlignmentX(JPanel.LEFT_ALIGNMENT); frame.getContentPane().add(panel); panel.add(display.getComponent()); frame.setSize(300, 300); frame.setVisible(true); /* C:\jamesk\java\tc\visad\bom>java visad.bom.TCDataTest MathType: (DISTURBANCEID -> (COUNTRY(Text), STATE(Text), YEAR, NUM, HISTORICALNAME(Text), OPENDATE, CLOSEDATE, ARCHIVEMODE, REALTIMEMODE, (TRACKID -> (TRACKTYPE(Text), TRACKNAME(Text), BASEDATETIME, CREATEDATETIME, TRACKSTYLE(Text), (Time -> (Latitude, Longitude, ERROR, CONFIDENCE, LOCATIONSTYLE, WINDMEAN, WINDGUST, CENTRALPRESSURE, CATEGORY, INTENSITYSTYLE, GALERADIUS, STORMRADIUS, HURRICANERADIUS, RADIUSOFMAXIMUMWINDS, SIZESTYLE, DEPTH, EYEDIAMETER, PRESSUREOFLASTCLOSEDISOBAR, STRUCTURESTYLE)))))) was: doll% java visad.bom.TCData MathType: (DisturbanceID -> (Country(Text), State(Text), Year, Number, HistoricalName(Text), OpenDate, CloseDate, ArchiveMode, RealtimeMode, (TrackID -> (TrackType(Text), TrackName(Text), BaseDateTime, CreateDateTime, DisplayType(Text), (Time -> (FixID, Latitude, Longitude, Error, FixStyle)), (Time -> (IntensityID, WindMean, WindGust, CentralPressure, Category)), (Time -> (SizeID, GaleRadius, StormRadius, HurricaneRadius, RadiusOfMaximumWinds, SizeStyle)), (Time -> (SteeringID, SteeringDirection, SteeringStyle)))))) */ } }