//-------------------------------------------------------------------------- // Copyright (C) 2001 Geoffrey Furnish // Copyright (C) 2001-2014 Alan W. Irwin // Copyright (C) 2004 Andrew Ross // // // This file is part of PLplot. // // PLplot 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; version 2 of the License. // // PLplot 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 PLplot; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- // Implementation of PLplot example 1 in Java. //-------------------------------------------------------------------------- package plplot.examples; import plplot.core.*; import static plplot.core.plplotjavacConstants.*; import java.lang.Math; class x01 { double xscale, yscale, xoff, yoff; PLStream pls = new PLStream(); // Set this to true to test the xormod method static boolean test_xor = false; static boolean locate_mode = false; static int fontset = 1; static String f_name = null; public static void main( String[] args ) { new x01( args ); } public x01( String[] args ) { // plplot initialization // Parse and process command line arguments. // plMergeOpts(options, "x01c options", notes); pls.parseopts( args, PL_PARSE_FULL | PL_PARSE_NOPROGRAM ); // Print out version number. StringBuffer version = new StringBuffer( 80 ); // plgver no longer works for unexplained reasons. pls.gver( version ); System.out.println( "PLplot library version: " + version ); // Initialize PLplot. // Divide page into 2x2 plots unless user overrides. pls.star( 2, 2 ); // Select the multi-stroke font. if ( fontset == 1 ) pls.fontld( 1 ); else pls.fontld( 0 ); // Set up the data // Original case xscale = 6.; yscale = 1.; xoff = 0.; yoff = 0.; // Do a plot plot1( false ); // Set up the data xscale = 1.; yscale = 0.0014; yoff = 0.0185; // Do a plot int digmax = 5; pls.syax( digmax, 0 ); plot1( true ); plot2(); plot3(); // Test option to save file if ( f_name != null ) { } // Let's get some user input // if (locate_mode) { // for (;;) { // if (! plGetCursor(&gin)) break; // if (gin.keysym == PLK_Escape) break; // pltext(); // if (gin.keysym < 0xFF && isprint(gin.keysym)) // printf("wx = %f, wy = %f, dx = %f, dy = %f, c = '%c'\n", // gin.wX, gin.wY, gin.dX, gin.dY, gin.keysym); // else // printf("wx = %f, wy = %f, dx = %f, dy = %f, c = 0x%02x\n", // gin.wX, gin.wY, gin.dX, gin.dY, gin.keysym); // plgra(); // } // } // Don't forget to call plend() to finish off! pls.end(); } void plot1( boolean do_test ) { int i; double xmin, xmax, ymin, ymax; double x[] = new double[60]; double y[] = new double[60]; double xs[] = new double[6]; double ys[] = new double[6]; boolean st[] = new boolean[1]; double xx[] = new double[1]; double yy[] = new double[1]; for ( i = 0; i < 60; i++ ) { x[i] = xoff + xscale * ( i + 1 ) / 60.0; y[i] = yoff + yscale * Math.pow( x[i], 2. ); } xmin = x[0]; xmax = x[59]; ymin = y[0]; ymax = y[59]; for ( i = 0; i < 6; i++ ) { xs[i] = x[i * 10 + 3]; ys[i] = y[i * 10 + 3]; } // Set up the viewport and window using PLENV. The range in X is 0.0 to // 6.0, and the range in Y is 0.0 to 30.0. The axes are scaled separately // (just = 0), and we just draw a labelled box (axis = 0). pls.col0( 1 ); pls.env( xmin, xmax, ymin, ymax, 0, 0 ); pls.col0( 2 ); pls.lab( "(x)", "(y)", "#frPLplot Example 1 - y=x#u2" ); // Plot the data points. pls.col0( 4 ); pls.poin( xs, ys, 9 ); // Draw the line through the data. pls.col0( 3 ); pls.line( x, y ); // xor mode enable erasing a line/point/text by replotting it again // it does not work in double buffering mode, however if ( do_test && test_xor ) { pls.xormod( true, st ); // enter xor mode if ( st[0] ) { for ( i = 0; i < 60; i++ ) { xx[0] = x[i]; yy[0] = y[i]; pls.poin( xx, yy, 9 ); // draw a point try { Thread.sleep( 50 ); // wait a little } catch ( InterruptedException ie ) { } pls.flush(); // force an update of the tk driver pls.poin( xx, yy, 9 ); // erase point } pls.xormod( false, st ); // leave xor mode } } } void plot2() { int i; double x[] = new double[100]; double y[] = new double[100]; // Set up the viewport and window using PLENV. The range in X is -2.0 to // 10.0, and the range in Y is -0.4 to 2.0. The axes are scaled // separately (just = 0), and we draw a box with axes (axis = 1). pls.col0( 1 ); pls.env( -2.0, 10.0, -0.4, 1.2, 0, 1 ); pls.col0( 2 ); pls.lab( "(x)", "sin(x)/x", "#frPLplot Example 1 - Sinc Function" ); // Fill up the arrays. for ( i = 0; i < 100; i++ ) { x[i] = ( i - 19.0 ) / 6.0; y[i] = 1.0; if ( x[i] != 0.0 ) y[i] = Math.sin( x[i] ) / x[i]; } // Draw the line. pls.col0( 3 ); pls.width( 2 ); pls.line( x, y ); pls.width( 1 ); } void plot3() { int i; int space0[] = {}; int mark0[] = {}; int space1[] = { 1500 }; int mark1[] = { 1500 }; double x[] = new double[101]; double y[] = new double[101]; // For the final graph we wish to override the default tick intervals, // and so do not use plenv(). pls.adv( 0 ); // Use standard viewport, and define X range from 0 to 360 degrees, Y // range from -1.2 to 1.2. pls.vsta(); pls.wind( 0.0, 360.0, -1.2, 1.2 ); // Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y. pls.col0( 1 ); pls.box( "bcnst", 60.0, 2, "bcnstv", 0.2, 2 ); // Superimpose a dashed line grid, with 1.5 mm marks and spaces. // plstyl expects a pointer! pls.styl( mark1, space1 ); pls.col0( 2 ); pls.box( "g", 30.0, 0, "g", 0.2, 0 ); pls.styl( mark0, space0 ); pls.col0( 3 ); pls.lab( "Angle (degrees)", "sine", "#frPLplot Example 1 - Sine function" ); for ( i = 0; i < 101; i++ ) { x[i] = 3.6 * i; y[i] = Math.sin( x[i] * Math.PI / 180.0 ); } pls.col0( 4 ); pls.line( x, y ); } } //-------------------------------------------------------------------------- // End of x01.java //--------------------------------------------------------------------------