//-------------------------------------------------------------------------- // Copyright (C) 2001 Geoffrey Furnish // Copyright (C) 2002-2014 Alan W. Irwin // Copyright (C) 2004,2005 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 2 in Java. //-------------------------------------------------------------------------- package plplot.examples; import plplot.core.*; import static plplot.core.plplotjavacConstants.*; import java.text.*; class x02 { private PLStream pls; public static void main( String[] args ) { new x02( args ); } x02( String[] args ) { pls = new PLStream(); // Parse and process command line arguments. pls.parseopts( args, PL_PARSE_FULL | PL_PARSE_NOPROGRAM ); // Initialize plplot. pls.init(); demo1(); demo2(); pls.end(); } void demo1() { pls.bop(); // Divide screen into 16 regions. pls.ssub( 4, 4 ); draw_windows( 16, 0 ); pls.eop(); } void demo2() { // Set up cmap0 // Use 100 custom colors in addition to base 16 int[] r = new int[116]; int[] g = new int[116]; int[] b = new int[116]; int[] r1i = new int[1]; int[] g1i = new int[1]; int[] b1i = new int[1]; // Min and max lightness values double lmin = 0.15, lmax = 0.85; int i; pls.bop(); // Divide screen into 100 regions. pls.ssub( 10, 10 ); for ( i = 0; i <= 99; i++ ) { double h, l, s; double[] r1 = new double[1]; double[] g1 = new double[1]; double[] b1 = new double[1]; // Bounds on HLS, from plhlsrgb() commentary -- // hue [0., 360.] degrees // lightness [0., 1.] magnitude // saturation [0., 1.] magnitude // // Vary hue uniformly from left to right h = ( 360. / 10. ) * ( i % 10 ); // Vary lightness uniformly from top to bottom, between min & max l = lmin + ( lmax - lmin ) * ( i / 10 ) / 9.; // Use max saturation s = 1.0; pls.hlsrgb( h, l, s, r1, g1, b1 ); r[i + 16] = (int) ( r1[0] * 255.001 ); g[i + 16] = (int) ( g1[0] * 255.001 ); b[i + 16] = (int) ( b1[0] * 255.001 ); } // Load default cmap0 colors into our custom set for ( i = 0; i <= 15; i++ ) { pls.gcol0( i, r1i, g1i, b1i ); r[i] = r1i[0]; g[i] = g1i[0]; b[i] = b1i[0]; } // Now set cmap0 all at once (faster, since fewer driver calls) pls.scmap0( r, g, b ); draw_windows( 100, 16 ); pls.eop(); } // -------------------------------------------------------------------- // draw_windows // // Draws a set of numbered boxes with colors according to cmap0 entry. // -------------------------------------------------------------------- void draw_windows( int nw, int cmap0_offset ) { int i, j; double vmin, vmax; NumberFormat nf = NumberFormat.getNumberInstance(); pls.schr( 0.0, 3.5 ); pls.font( 4 ); for ( i = 0; i < nw; i++ ) { pls.col0( i + cmap0_offset ); String text = nf.format( i ); pls.adv( 0 ); vmin = 0.1; vmax = 0.9; for ( j = 0; j <= 2; j++ ) { pls.width( j + 1 ); pls.vpor( vmin, vmax, vmin, vmax ); pls.wind( 0.0, 1.0, 0.0, 1.0 ); pls.box( "bc", 0.0, 0, "bc", 0.0, 0 ); vmin = vmin + 0.1; vmax = vmax - 0.1; } pls.width( 1 ); pls.ptex( 0.5, 0.5, 1.0, 0.0, 0.5, text ); } } } //-------------------------------------------------------------------------- // End of x02.java //--------------------------------------------------------------------------