From: <ai...@us...> - 2008-07-19 17:36:32
|
Revision: 8535 http://plplot.svn.sourceforge.net/plplot/?rev=8535&view=rev Author: airwin Date: 2008-07-19 17:32:27 +0000 (Sat, 19 Jul 2008) Log Message: ----------- AWI for Hezekiah M. Carty. Add ocaml standard examples 1, 2, and 3. Modified Paths: -------------- trunk/examples/ocaml/CMakeLists.txt trunk/examples/ocaml/Makefile.examples.in trunk/plplot_test/test_ocaml.sh.in Added Paths: ----------- trunk/examples/ocaml/x01.ml trunk/examples/ocaml/x02.ml trunk/examples/ocaml/x03.ml Modified: trunk/examples/ocaml/CMakeLists.txt =================================================================== --- trunk/examples/ocaml/CMakeLists.txt 2008-07-19 17:21:37 UTC (rev 8534) +++ trunk/examples/ocaml/CMakeLists.txt 2008-07-19 17:32:27 UTC (rev 8535) @@ -21,6 +21,9 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA set(ocaml_STRING_INDICES + "01" + "02" + "03" "11" "19" ) Modified: trunk/examples/ocaml/Makefile.examples.in =================================================================== --- trunk/examples/ocaml/Makefile.examples.in 2008-07-19 17:21:37 UTC (rev 8534) +++ trunk/examples/ocaml/Makefile.examples.in 2008-07-19 17:32:27 UTC (rev 8535) @@ -28,6 +28,9 @@ @pkg_config_true@PKG_CONFIG_ENV = @PKG_CONFIG_ENV@ EXECUTABLES_list = \ + x01$(EXEEXT) \ + x02$(EXEEXT) \ + x03$(EXEEXT) \ x11$(EXEEXT) \ x19$(EXEEXT) \ Added: trunk/examples/ocaml/x01.ml =================================================================== --- trunk/examples/ocaml/x01.ml (rev 0) +++ trunk/examples/ocaml/x01.ml 2008-07-19 17:32:27 UTC (rev 8535) @@ -0,0 +1,337 @@ +(* $Id$ + + Simple line plot and multiple windows demo. A fairly straightforward + translation from the original C to OCaml. + + Copyright (C) 2008 Hezekiah M. Carty + + This file is part of PLplot. + + PLplot is free software; you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + 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 + +*) + +open Plplot +open Printf + +type ex1_params = { + xscale : float; + yscale : float; + xoff : float; + yoff : float; +} + +let pi = atan 1.0 *. 4.0 + +(* +/* Variables and data arrays used by plot generators */ + +static PLFLT x[101], y[101]; +static PLFLT xscale, yscale, xoff, yoff, xs[6], ys[6]; +static PLGraphicsIn gin; + +static int locate_mode; +static int test_xor; +static int fontset = 1; +static char *f_name = NULL; + +/* Options data structure definition. */ + +static PLOptionTable options[] = { +{ + "locate", /* Turns on test of API locate function */ + NULL, + NULL, + &locate_mode, + PL_OPT_BOOL, + "-locate", + "Turns on test of API locate function" }, +{ + "xor", /* Turns on test of xor function */ + NULL, + NULL, + &test_xor, + PL_OPT_BOOL, + "-xor", + "Turns on test of XOR" }, +{ + "font", /* For switching between font set 1 & 2 */ + NULL, + NULL, + &fontset, + PL_OPT_INT, + "-font number", + "Selects stroke font set (0 or 1, def:1)" }, +{ + "save", /* For saving in postscript */ + NULL, + NULL, + &f_name, + PL_OPT_STRING, + "-save filename", + "Save plot in color postscript `file'" }, +{ + NULL, /* option */ + NULL, /* handler */ + NULL, /* client data */ + NULL, /* address of variable to set */ + 0, /* mode flag */ + NULL, /* short syntax */ + NULL } /* long syntax */ +}; + +const char *notes[] = {"Make sure you get it right!", NULL}; + +*) + +let plot1 (do_test, test_xor) params = + let x = + Array.init 60 ( + fun i -> + params.xoff +. params.xscale *. (float_of_int i +. 1.0) /. 60.0 + ) + in + let y = + Array.init 60 ( + fun i -> + params.yoff +. params.yscale *. x.(i) ** 2.0 + ) + in + + let xmin = x.(0) in + let xmax = x.(59) in + let ymin = y.(0) in + let ymax = y.(59) in + + let xs = Array.init 6 (fun i -> x.(i * 10 + 3)) in + let ys = Array.init 6 (fun i -> y.(i * 10 + 3)) in + + (* 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). *) + plcol0 1; + plenv xmin xmax ymin ymax 0 0; + plcol0 2; + pllab "(x)" "(y)" "#frPLplot Example 1 - y=x#u2"; + + (* Plot the data points *) + plcol0 4; + plpoin xs ys 9; + + (* Draw the line through the data *) + plcol0 3; + plline x y; + + (* COMMENT THIS SECTION OUT FOR NOW, AS IT DOES NOT FUNCTION EXACTLY + AS THE C EXAMPLE. + (* xor mode enable erasing a line/point/text by replotting it again *) + (* it does not work in double buffering mode, however *) + let () = + if do_test && test_xor then + let st = plxormod 1 in (* enter xor mode *) + if st > 0 then begin + for i = 1 to 10 do + let i' = i * 6 - 6 in + plpoin (Array.sub x i' 1) (Array.sub y i' 1) 9; (* draw a point *) + Unix.sleep 1; (* wait a little *) + plflush (); (* force an update of the driver *) + plpoin (Array.sub x i' 1) (Array.sub y i' 1) 9; (* erase point *) + done; + ignore (plxormod 0) (* leave xor mode *) + end + else + print_endline "xor mode not supported." + in + END BIG BLOCK COMMENT *) + (* All done. *) + () + +let plot2 () = + (* 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). *) + plcol0 1; + plenv (-2.0) 10.0 (-0.4) 1.2 0 1; + plcol0 2; + pllab "(x)" "sin(x)/x" "#frPLplot Example 1 - Sinc Function"; + + (* Fill up the arrays *) + let x = Array.init 100 (fun i -> (float_of_int i -. 19.0) /. 6.0) in + let y = + Array.init 100 ( + fun i -> + if x.(i) <> 0.0 then + sin x.(i) /. x.(i) + else + 1.0 + ) + in + + (* Draw the line *) + plcol0 3; + plwid 2; + plline x y; + plwid 1; + + (* All done. *) + () + +let plot3 () = + let space1 = 1500 in + let mark1 = 1500 in + + (* For the final graph we wish to override the default tick intervals, and + so do not use plenv(). *) + pladv 0; + + (* Use standard viewport, and define X range from 0 to 360 degrees, Y range + from -1.2 to 1.2.*) + plvsta (); + plwind 0.0 360.0 (-1.2) 1.2; + + (* Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y. *) + plcol0 1; + plbox "bcnst" 60.0 2 "bcnstv" 0.2 2; + + (* Superimpose a dashed line grid, with 1.5 mm marks and spaces. + plstyl expects a pointer!*) + plstyl [|mark1|] [|space1|]; + plcol0 2; + plbox "g" 30.0 0 "g" 0.2 0; + plstyl [||] [||]; + + plcol0 3; + pllab "Angle (degrees)" "sine" "#frPLplot Example 1 - Sine function"; + + let x = Array.init 101 (fun i -> 3.6 *. float_of_int i) in + let y = Array.init 101 (fun i -> sin (x.(i) *. pi /. 180.0)) in + + plcol0 4; + plline x y; + + (* All done. *) + () + +(*--------------------------------------------------------------------------*\ + * main + * + * Generates several simple line plots. Demonstrates: + * - subwindow capability + * - setting up the window, drawing plot, and labelling + * - changing the color + * - automatic axis rescaling to exponential notation + * - placing the axes in the middle of the box + * - gridded coordinate axes +\*--------------------------------------------------------------------------*) +let main fontset = + (* plplot initialization *) + (* Divide page into 2x2 plots unless user overrides *) + plssub 2 2; + + (* NOT IMPLEMENTED YET + (* Parse and process command line arguments *) + plMergeOpts(options, "x01c options", notes); + plparseopts(&argc, argv, PL_PARSE_FULL); + *) + + (* Get version number, just for kicks *) + let plplot_version = plgver () in + fprintf stdout "PLplot library version: %s\n" plplot_version; + + (* Initialize plplot *) + plinit (); + + (* Select font set as per input flag *) + plfontld (if fontset then 1 else 0); + + (* Set up the data *) + (* Original case *) + let plot1_params = + { + xscale = 6.0; + yscale = 1.0; + xoff = 0.0; + yoff = 0.0; + } + in + (* Do a plot *) + plot1 (false, false) plot1_params; + + (* Set up the data *) + let plot1_params = + { + plot1_params with + xscale = 1.0; + yscale = 0.0014; + yoff = 0.0185; + } + in + (* Do a plot *) + let digmax = 5 in + plsyax digmax 0; + plot1 (true, true) plot1_params; + + plot2 (); + + plot3 (); + + (* NOT IMPLEMENTED YET + (* + * Show how to save a plot: + * Open a new device, make it current, copy parameters, + * and replay the plot buffer + *) + if (f_name) { /* command line option '-save filename' */ + + printf("The current plot was saved in color Postscript under the name `%s'.\n", f_name); + plgstrm(&cur_strm); /* get current stream */ + plmkstrm(&new_strm); /* create a new one */ + + plsfnam(f_name); /* file name */ + plsdev("psc"); /* device type */ + + plcpstrm(cur_strm, 0); /* copy old stream parameters to new stream */ + plreplot(); /* do the save by replaying the plot buffer */ + plend1(); /* finish the device */ + + plsstrm(cur_strm); /* return to previous stream */ + } + + /* 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("subwin = %d, wx = %f, wy = %f, dx = %f, dy = %f, c = '%c'\n", + gin.subwindow, gin.wX, gin.wY, gin.dX, gin.dY, gin.keysym); + else + printf("subwin = %d, wx = %f, wy = %f, dx = %f, dy = %f, c = 0x%02x\n", + gin.subwindow, gin.wX, gin.wY, gin.dX, gin.dY, gin.keysym); + + plgra(); + } + } + *) + + (* Don't forget to call plend() to finish off! *) + plend (); + () + +let () = main true Property changes on: trunk/examples/ocaml/x01.ml ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/examples/ocaml/x02.ml =================================================================== --- trunk/examples/ocaml/x02.ml (rev 0) +++ trunk/examples/ocaml/x02.ml 2008-07-19 17:32:27 UTC (rev 8535) @@ -0,0 +1,144 @@ +(* $Id$ + + Multiple window and color map 0 demo. + Copyright (C) 2008 Hezekiah M. Carty + + This file is part of PLplot. + + PLplot is free software; you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + 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 +*) + +open Plplot + +(*--------------------------------------------------------------------------*\ + * draw_windows + * + * Draws a set of numbered boxes with colors according to cmap0 entry. +\*--------------------------------------------------------------------------*) + +let draw_windows nw cmap0_offset = + plschr 0.0 3.5; + plfont 4; + + for i = 0 to nw - 1 do + plcol0 (i + cmap0_offset); + let text = string_of_int i in + pladv 0; + let vmin = 0.1 in + let vmax = 0.9 in + for j = 0 to 2 do + plwid (j + 1); + let j' = float_of_int j *. 0.1 in + plvpor (vmin +. j') (vmax -. j') (vmin +. j') (vmax -. j'); + plwind 0.0 1.0 0.0 1.0; + plbox "bc" 0.0 0 "bc" 0.0 0; + done; + plwid 1; + plptex 0.5 0.5 1.0 0.0 0.5 text; + done; + () + +(*--------------------------------------------------------------------------*\ + * demo1 + * + * Demonstrates multiple windows and default color map 0 palette. +\*--------------------------------------------------------------------------*) + +let demo1 () = + plbop (); + (* Divide screen into 16 regions *) + plssub 4 4; + draw_windows 16 0; + pleop (); + () + +(*--------------------------------------------------------------------------*\ + * demo2 + * + * Demonstrates multiple windows, user-modified color map 0 palette, and + * HLS -> RGB translation. +\*--------------------------------------------------------------------------*) + +let demo2 () = + (* Set up cmap0 *) + (* Use 100 custom colors in addition to base 16 *) + let r = Array.make 116 0 in + let g = Array.make 116 0 in + let b = Array.make 116 0 in + + (* Min & max lightness values *) + let lmin = 0.15 and lmax = 0.85 in + + plbop (); + + (* Divide screen into 100 regions *) + plssub 10 10; + + for i = 0 to 99 do + (* 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 *) + let h = (360. /. 10. ) *. float_of_int ( i mod 10 ) in + (* Vary lightness uniformly from top to bottom, between min & max *) + let l = lmin +. (lmax -. lmin) *. float_of_int (i / 10) /. 9. in + (* Use max saturation *) + let s = 1.0 in + + let (r1, g1, b1) = plhlsrgb h l s in + + r.(i+16) <- int_of_float (r1 *. 255.); + g.(i+16) <- int_of_float (g1 *. 255.); + b.(i+16) <- int_of_float (b1 *. 255.); + done; + + (* Load default cmap0 colors into our custom set *) + for i = 0 to 15 do + let (r1, g1, b1) = plgcol0 i in + r.(i) <- r1; + g.(i) <- g1; + b.(i) <- b1; + done; + + (* Now set cmap0 all at once (faster, since fewer driver calls) *) + plscmap0 r g b; + draw_windows 100 16; + pleop (); + () + +(*--------------------------------------------------------------------------*\ + * main + * + * Demonstrates multiple windows and color map 0 palette, both default and + * user-modified. +\*--------------------------------------------------------------------------*) + +let main () = + (* NOT IMPLEMENTED + (* Parse and process command line arguments *) + (void) plparseopts(&argc, argv, PL_PARSE_FULL); + *) + + (* Initialize plplot *) + plinit (); + (* Run demos *) + demo1 (); + demo2 (); + plend (); + () + +let () = main () Property changes on: trunk/examples/ocaml/x02.ml ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/examples/ocaml/x03.ml =================================================================== --- trunk/examples/ocaml/x03.ml (rev 0) +++ trunk/examples/ocaml/x03.ml 2008-07-19 17:32:27 UTC (rev 8535) @@ -0,0 +1,92 @@ +(* $Id$ + + Polar plot demo. + Copyright (C) 2008 Hezekiah M. Carty + + This file is part of PLplot. + + PLplot is free software; you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + 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 +*) + +open Plplot + +let pi = atan 1.0 *. 4.0 + +(*--------------------------------------------------------------------------*\ + * main + * + * Generates polar plot, with 1-1 scaling. +\*--------------------------------------------------------------------------*) + +let main () = + let dtr = pi /. 180.0 in + let x0 = Array.init 361 (fun i -> cos (dtr *. float_of_int i)) in + let y0 = Array.init 361 (fun i -> sin (dtr *. float_of_int i)) in + + (* NOT SUPPORTED YET + (* Parse and process command line arguments *) + (void) plparseopts(&argc, argv, PL_PARSE_FULL); + *) + + (* Initialize plplot *) + plinit (); + + (* Set up viewport and window, but do not draw box *) + plenv (-1.3) 1.3 (-1.3) 1.3 1 (-2); + for i = 1 to 10 do + let x = Array.init 361 (fun j -> 0.1 *. float_of_int i *. x0.(j)) in + let y = Array.init 361 (fun j -> 0.1 *. float_of_int i *. y0.(j)) in + (* Draw circles for polar grid *) + plline x y; + done; + + plcol0 2; + for i = 0 to 11 do + let theta = 30.0 *. float_of_int i in + let dx = cos (dtr *. theta) in + let dy = sin (dtr *. theta) in + + (* Draw radial spokes for polar grid *) + pljoin 0.0 0.0 dx dy; + let text = string_of_int (int_of_float (floor (theta +. 0.5))) in + + (* Write labels for angle *) + + (* Slightly off zero to avoid floating point logic flips at 90 and + 270 deg.*) + if dx >= -0.00001 then + plptex dx dy dx dy (-0.15) text + else + plptex dx dy (-.dx) (-.dy) 1.15 text + done; + + (* Draw the graph *) + let x = + Array.init 361 (fun i -> x0.(i) *. sin (dtr *. float_of_int (5 * i))) + in + let y = + Array.init 361 (fun i -> y0.(i) *. sin (dtr *. float_of_int (5 * i))) + in + plcol0 3; + plline x y; + + plcol0 4; + plmtex "t" 2.0 0.5 0.5 "#frPLplot Example 3 - r(#gh)=sin 5#gh"; + + (* Close the plot at end *) + plend (); + () + +let () = main () Property changes on: trunk/examples/ocaml/x03.ml ___________________________________________________________________ Added: svn:eol-style + native Modified: trunk/plplot_test/test_ocaml.sh.in =================================================================== --- trunk/plplot_test/test_ocaml.sh.in 2008-07-19 17:21:37 UTC (rev 8534) +++ trunk/plplot_test/test_ocaml.sh.in 2008-07-19 17:32:27 UTC (rev 8535) @@ -24,7 +24,7 @@ # Do the standard non-interactive examples. # Currently only 11 and 19 are implemented -for index in 11 19; do +for index in 01 02 03 11 19; do $ocamldir/x${index}ocaml -dev $device -o ${OUTPUT_DIR}/x${index}ocaml.$dsuffix \ $options 2> test.error # Look for any status codes (segfaults, plexit) from the examples themselves. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-07-19 22:02:43
|
Revision: 8543 http://plplot.svn.sourceforge.net/plplot/?rev=8543&view=rev Author: andrewross Date: 2008-07-19 21:56:21 +0000 (Sat, 19 Jul 2008) Log Message: ----------- ANR for Hezekiah M. Carty. Update to plimagefr to allow an image to be plotted with a user-supplied pltr transformation function. This is an API change, but the plimagefr API has be advertised as not yet finalised and has not been included in a release. Note: this patch disables the dev_fastimg code. Tests by Hez using the xwin driver have not shown a significant time penalty on modern hardware. It may be possible to fix this if it proves an issue. Modified Paths: -------------- trunk/bindings/f77/plstubs.h trunk/bindings/f77/scstubs.c trunk/bindings/f95/plstubs.h trunk/bindings/f95/scstubs.c trunk/bindings/f95/sfstubsf95.f90 trunk/doc/docbook/src/api.xml trunk/examples/c/x20c.c trunk/include/plplot.h trunk/include/plplotP.h trunk/src/plbuf.c trunk/src/plcore.c trunk/src/plimage.c Modified: trunk/bindings/f77/plstubs.h =================================================================== --- trunk/bindings/f77/plstubs.h 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/bindings/f77/plstubs.h 2008-07-19 21:56:21 UTC (rev 8543) @@ -218,7 +218,8 @@ #define PLHLS FNAME(PLHLS,plhls) #define PLHLSRGB FNAME(PLHLSRGB,plhlsrgb) #define PLIMAGE FNAME(PLIMAGE,plimage) -#define PLIMAGEFR FNAME(PLIMAGEFR,plimagefr) +/* Commented out for now - needs fixing to use pltr */ +/*#define PLIMAGEFR FNAME(PLIMAGEFR,plimagefr)*/ #define PLINIT FNAME(PLINIT,plinit) #define PLJOIN FNAME(PLJOIN,pljoin) #define PLLAB7 FNAME(PLLAB7,pllab7) Modified: trunk/bindings/f77/scstubs.c =================================================================== --- trunk/bindings/f77/scstubs.c 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/bindings/f77/scstubs.c 2008-07-19 21:56:21 UTC (rev 8543) @@ -396,6 +396,7 @@ c_plhlsrgb(*h, *l, *s, r, g, b); } +#if 0 void PLIMAGEFR(PLFLT *idata, PLINT *nx, PLINT *ny, PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, PLFLT *zmin, PLFLT *zmax, @@ -420,6 +421,7 @@ plFree2dGrid(pidata, *nx, *ny); } +#endif void PLIMAGE(PLFLT *idata, PLINT *nx, PLINT *ny, Modified: trunk/bindings/f95/plstubs.h =================================================================== --- trunk/bindings/f95/plstubs.h 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/bindings/f95/plstubs.h 2008-07-19 21:56:21 UTC (rev 8543) @@ -213,7 +213,8 @@ #define PLHLS FNAME(PLHLS,plhls) #define PLHLSRGB FNAME(PLHLSRGB,plhlsrgb) #define PLIMAGE FNAME(PLIMAGEF77,plimagef77) -#define PLIMAGEFR FNAME(PLIMAGEFRF77,plimagefrf77) +/* Commented out until fixed to use pltr */ +/*#define PLIMAGEFR FNAME(PLIMAGEFRF77,plimagefrf77)*/ #define PLINIT FNAME(PLINIT,plinit) #define PLJOIN FNAME(PLJOIN,pljoin) #define PLLAB7 FNAME(PLLAB7,pllab7) Modified: trunk/bindings/f95/scstubs.c =================================================================== --- trunk/bindings/f95/scstubs.c 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/bindings/f95/scstubs.c 2008-07-19 21:56:21 UTC (rev 8543) @@ -398,6 +398,7 @@ c_plhlsrgb(*h, *l, *s, r, g, b); } +#if 0 void PLIMAGEFR(PLFLT *idata, PLINT *nx, PLINT *ny, PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, PLFLT *zmin, PLFLT *zmax, @@ -422,6 +423,7 @@ plFree2dGrid(pidata, *nx, *ny); } +#endif void PLIMAGE(PLFLT *idata, PLINT *nx, PLINT *ny, Modified: trunk/bindings/f95/sfstubsf95.f90 =================================================================== --- trunk/bindings/f95/sfstubsf95.f90 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/bindings/f95/sfstubsf95.f90 2008-07-19 21:56:21 UTC (rev 8543) @@ -940,21 +940,21 @@ call plhistf77( size(data), data, datmin, datmax, nbin, oldwin ) end subroutine plhist - subroutine plimagefr( idata, xmin, xmax, ymin, ymax, zmin, zmax, & - dxmin, dxmax, dymin, dymax, valuemin, valuemax ) - real(kind=plflt), dimension(:,:) :: idata - real(kind=plflt) :: xmin, xmax, ymin, ymax, zmin, zmax - real(kind=plflt) :: dxmin, dxmax, dymin, dymax, & - valuemin, valuemax +! subroutine plimagefr( idata, xmin, xmax, ymin, ymax, zmin, zmax, & +! dxmin, dxmax, dymin, dymax, valuemin, valuemax ) +! real(kind=plflt), dimension(:,:) :: idata +! real(kind=plflt) :: xmin, xmax, ymin, ymax, zmin, zmax +! real(kind=plflt) :: dxmin, dxmax, dymin, dymax, & +! valuemin, valuemax +! +! integer :: nx, ny +! +! nx = size(idata,1) +! ny = size(idata,2) +! call plimagefrf77( idata, nx, ny, xmin, xmax, ymin, ymax, zmin, zmax, & +! dxmin, dxmax, dymin, dymax, valuemin, valuemax ) +! end subroutine plimagefr - integer :: nx, ny - - nx = size(idata,1) - ny = size(idata,2) - call plimagefrf77( idata, nx, ny, xmin, xmax, ymin, ymax, zmin, zmax, & - dxmin, dxmax, dymin, dymax, valuemin, valuemax ) - end subroutine plimagefr - subroutine plimage( idata, xmin, xmax, ymin, ymax, zmin, zmax, & dxmin, dxmax, dymin, dymax ) real(kind=plflt), dimension(:,:) :: idata Modified: trunk/doc/docbook/src/api.xml =================================================================== --- trunk/doc/docbook/src/api.xml 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/doc/docbook/src/api.xml 2008-07-19 21:56:21 UTC (rev 8543) @@ -5538,12 +5538,10 @@ <paramdef><parameter>ymax</parameter></paramdef> <paramdef><parameter>zmin</parameter></paramdef> <paramdef><parameter>zmax</parameter></paramdef> - <paramdef><parameter>Dxmin</parameter></paramdef> - <paramdef><parameter>Dxmax</parameter></paramdef> - <paramdef><parameter>Dymin</parameter></paramdef> - <paramdef><parameter>Dymax</parameter></paramdef> <paramdef><parameter>valuemin</parameter></paramdef> <paramdef><parameter>valuemax</parameter></paramdef> + <paramdef><parameter>pltr</parameter></paramdef> + <paramdef><parameter>pltr_data</parameter></paramdef> </funcprototype> </funcsynopsis> </para> @@ -5602,18 +5600,6 @@ </varlistentry> <varlistentry> <term> - <parameter>Dxmin, Dxmax, Dymin, Dymax</parameter> - (<literal>PLFLT</literal>, input) - </term> - <listitem> - <para> - Plot only the window of points whose plot coordinates fall inside - the window of (Dxmin, Dymin) to (Dxmax, Dymax). - </para> - </listitem> - </varlistentry> - <varlistentry> - <term> <parameter>valuemin, valuemax</parameter> (<literal>PLFLT</literal>, input) </term> @@ -5627,6 +5613,42 @@ </para> </listitem> </varlistentry> + <varlistentry> + <term> + <parameter>pltr</parameter> + (<literal>void (*) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer) + </literal>, input) + </term> + <listitem> + <para> + Pointer to function that defines transformation between indices + in array <literal><parameter>idata</parameter></literal> and the + world coordinates (C only). Transformation functions are + provided in the PLplot library: + &pltr0; for identity mapping, and &pltr1; and &pltr2; for + arbitrary mappings respectively defined by one- and + two-dimensional arrays. In addition, user-supplied routines + for the transformation can be used as well. Examples of + all of these approaches are given in + <xref linkend="contour-plots-c"/>. + The transformation function should + have the form given by any of &pltr0;, &pltr1;, or &pltr2;. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <parameter>pltr_data</parameter> + (<literal>PLPointer</literal>, input) + </term> + <listitem> + <para> + Extra parameter to help + pass information to &pltr0;, &pltr1;, &pltr2;, or whatever routine + that is externally supplied. + </para> + </listitem> + </varlistentry> </variablelist> <para> @@ -5637,8 +5659,7 @@ General: <function> plimagefr(idata, xmin, xmax, ymin, ymax, - zmin, zmax, Dxmin, Dxmax, Dymin, Dymax, - valuemin, valuemax) + zmin, zmax, valuemin, valuemax, pltr, pltr_data) </function> </para> </listitem> Modified: trunk/examples/c/x20c.c =================================================================== --- trunk/examples/c/x20c.c 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/examples/c/x20c.c 2008-07-19 21:56:21 UTC (rev 8543) @@ -65,6 +65,14 @@ NULL } /* long syntax */ }; +/* Transformation function */ +static void +mypltr(PLFLT x, PLFLT y, PLFLT *tx, PLFLT *ty, void *pltr_data) +{ + *tx = x + 2.0 * sin(x) + cos(y); + *ty = y + sin(x) + 2.0 * cos(y); +} + int main(int argc, const char *argv[]) { @@ -72,6 +80,8 @@ PLFLT xi, yi, xe, ye; int i, j, width, height, num_col; PLFLT **img_f; + PLFLT img_min; + PLFLT img_max; /* Bugs in plimage(): @@ -222,6 +232,22 @@ pladv(0); } + /* Base the dynamic range on the image contents. */ + plMinMax2dGrid(img_f, width, height, &img_max, &img_min); + + /* Draw a saturated version of the original image. Only use the middle 50% + of the image's full dynamic range. */ + plcol0(2); + plenv(0, width, 0, height, 1, -1); + pllab("", "", "Reduced dynamic range image example"); + plimagefr(img_f, width, height, 0., width, 0., height, 0., 0., img_min + img_max * 0.25, img_max - img_max * 0.25, NULL, NULL); + + /* Draw a distorted version of the original image, showing its full dynamic range. */ + plenv(0, width, 0, height, 1, -1); + pllab("", "", "Distorted image example"); + plimagefr(img_f, width, height, 0., width, 0., height, 0., 0., img_min, img_max, mypltr, NULL); + pladv(0); + plFree2dGrid(img_f, width, height); plend(); Modified: trunk/include/plplot.h =================================================================== --- trunk/include/plplot.h 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/include/plplot.h 2008-07-19 21:56:21 UTC (rev 8543) @@ -1463,9 +1463,10 @@ PLDLLIMPEXP void c_plimagefr(PLFLT **idata, PLINT nx, PLINT ny, - PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT zmin, PLFLT zmax, - PLFLT Dxmin, PLFLT Dxmax, PLFLT Dymin, PLFLT Dymax, - PLFLT valuemin, PLFLT valuemax); + PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT zmin, PLFLT zmax, + PLFLT valuemin, PLFLT valuemax, + void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), + PLPointer pltr_data); /* plots a 2d image (or a matrix too large for plshade() ) - colors automatically scaled */ Modified: trunk/include/plplotP.h =================================================================== --- trunk/include/plplotP.h 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/include/plplotP.h 2008-07-19 21:56:21 UTC (rev 8543) @@ -892,7 +892,8 @@ /* draw image */ void -plP_image(short *x, short *y, unsigned short *z, PLINT nx, PLINT ny, PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy, unsigned short zmin, unsigned short zmax); +plP_image(PLFLT *z, PLINT nx, PLINT ny, PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy, + void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), PLPointer pltr_data); /* End of page */ @@ -974,9 +975,10 @@ plInBuildTree(); void -plimageslow(short *x, short *y, unsigned short *data, PLINT nx, PLINT ny, - PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy, - unsigned short zmin, unsigned short zmax); +plimageslow(PLFLT *idata, PLINT nx, PLINT ny, + PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy, + void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), + PLPointer pltr_data); typedef struct { PLFLT xmin, ymin, dx, dy;} IMG_DT; Modified: trunk/src/plbuf.c =================================================================== --- trunk/src/plbuf.c 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/src/plbuf.c 2008-07-19 21:56:21 UTC (rev 8543) @@ -659,7 +659,14 @@ rd_data(pls, dev_iy, sizeof(short) * npts); rd_data(pls, dev_z, sizeof(unsigned short) * (nptsX-1)*(nptsY-1)); - plP_image(dev_ix, dev_iy, dev_z, nptsX, nptsY, xmin, ymin, dx, dy, dev_zmin, dev_zmax); + /* + * COMMENTED OUT by Hezekiah Carty + * Commented (hopefullly temporarily) until the dev_fastimg rendering + * path can be updated to support the new plimage internals. In the + * meantime this function is not actually used so the issue of how to + * update the code to support the new interface can be ignored. + */ + /*plP_image(dev_ix, dev_iy, dev_z, nptsX, nptsY, xmin, ymin, dx, dy, dev_zmin, dev_zmax);*/ free(dev_ix); free(dev_iy); Modified: trunk/src/plcore.c =================================================================== --- trunk/src/plcore.c 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/src/plcore.c 2008-07-19 21:56:21 UTC (rev 8543) @@ -3425,13 +3425,30 @@ * * Author: Alessandro Mirone, Nov 2001 * + * Updated by Hezekiah Carty, Mar 2008. + * - Added support for pltr callback + * - Commented out the "dev_fastimg" rendering path * - * \*--------------------------------------------------------------------------*/ void -plP_image(short *x, short *y, unsigned short *z , PLINT nx, PLINT ny, PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy, unsigned short zmin, unsigned short zmax) +plP_image(PLFLT *z , PLINT nx, PLINT ny, PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy, + void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), PLPointer pltr_data) { + plsc->page_status = DRAWING; + + plimageslow(z, nx, ny, xmin, ymin, dx, dy, pltr, pltr_data); + + /* + * COMMENTED OUT by Hezekiah Carty, March 2008 + * The current dev_fastimg rendering method does not work as-is with + * the plimagefr coordinate transform support. + * This is hopefully temporary, until the dev_fastimg rendering + * path can be updated to work with the new plimage internals. + * Until then, all plimage* rendering is done by the plimageslow + * rendering path. + */ +#if 0 /* BEGIN dev_fastimg COMMENT */ PLINT i, npts; short *xscl, *yscl; int plbuf_write; @@ -3497,4 +3514,5 @@ grimage(x, y, z, nx, ny ); } plsc->plbuf_write = plbuf_write; +#endif /* END dev_fastimg COMMENT */ } Modified: trunk/src/plimage.c =================================================================== --- trunk/src/plimage.c 2008-07-19 20:17:57 UTC (rev 8542) +++ trunk/src/plimage.c 2008-07-19 21:56:21 UTC (rev 8543) @@ -2,6 +2,7 @@ * * Author: Alessandro Mirone, Nov 2001 * Adapted: Joao Cardoso + * Updated: Hezekiah Carty 2008 * * Copyright (C) 2004 Alan W. Irwin * @@ -24,7 +25,11 @@ #include "plplotP.h" -/* Get better names, those are too criptic! +#define COLOR_MIN 0.0 +#define COLOR_MAX 1.0 +#define COLOR_NO_PLOT (-1.0) + +/* Get better names, those are too cryptic! * * ZEROW2B: zero writing to buffer ? * ZEROW2D: zero writing to display ? @@ -70,55 +75,63 @@ +/* + * NOTE: The plshade* functions require that both pltr and pltr_data are set + * in order for pltr to be used. plimageslow does NOT require this, so it is + * up to the user to make sure pltr_data is something non-NULL if pltr + * requires it. + * Plottable values in idata must be scaled between COLOR_MIN and COLOR_MAX. + * This is an internal function, and should not be used directly. Its + * interface may change. + */ void -plimageslow(short *x, short *y, unsigned short *data, PLINT nx, PLINT ny, - PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy, - unsigned short zmin, unsigned short zmax) +plimageslow(PLFLT *idata, PLINT nx, PLINT ny, + PLFLT xmin, PLFLT ymin, PLFLT dx, PLFLT dy, + void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), + PLPointer pltr_data) { + /* Indices */ PLINT ix, iy, i; + /* Float coordinates */ PLFLT xf[4], yf[4]; - short xs[5], ys[5]; + /* Translated (by pltr) coordinates */ + PLFLT tx, ty; + /* The corners of a single filled region */ int corners[4]; - unsigned short col; + /* The color to use in the fill */ + PLFLT color; for (ix = 0; ix < nx ; ix++) { for (iy = 0; iy < ny ; iy++) { + /* Only plot values within in appropriate range */ + color = idata[ix * ny + iy]; + if (color == COLOR_NO_PLOT) + continue; - col = data[ix*ny+iy]; - /* only plot points within zmin/zmax range */ - if (col < zmin || col > zmax) - continue; + /* The color value has to be scaled to 0.0 -> 1.0 plcol1 color values */ + plcol1(color / COLOR_MAX); - plcol1(col/(float)USHRT_MAX); + xf[0] = xf[1] = ix; + xf[2] = xf[3] = ix + 1; + yf[0] = yf[3] = iy; + yf[1] = yf[2] = iy + 1; - if (plsc->plbuf_read == 1) { - /* buffer read, is a replot to a slow device. */ - - corners[0] = ix*(ny+1)+iy; /* [ix][iy] */ - corners[1] = (ix+1)*(ny+1)+iy; /* [ix+1][iy] */ - corners[2] = (ix+1)*(ny+1)+iy+1; /* [ix+1][iy+1] */ - corners[3] = ix*(ny+1)+iy+1; /* [ix][iy+1] */ - - for (i = 0; i < 4; i++) { - xs[i] = x[corners[i]]; - ys[i] = y[corners[i]]; - } - xs[4] = xs[0]; ys[4] = ys[0]; - plP_fill(xs, ys, 5); - - } else { - - xf[0] = xf[1] = ix; - xf[2] = xf[3] = ix+1; - yf[0] = yf[3] = iy; - yf[1] = yf[2] = iy+1; - - for (i = 0; i < 4; i++) { - xf[i] = xmin + xf[i]*dx; - yf[i] = ymin + yf[i]*dy; - } - plfill(4, xf, yf); + if (pltr) { + for (i = 0; i < 4; i++) { + /* Translate the points */ + (*pltr) (xf[i], yf[i], &tx, &ty, pltr_data); + xf[i] = tx; + yf[i] = ty; + } } + else { + for (i = 0; i < 4; i++) { + /* Automatic translation to the specified plot area */ + xf[i] = xmin + xf[i] * dx; + yf[i] = ymin + yf[i] * dy; + } + } + plfill(4, xf, yf); } } } @@ -152,10 +165,6 @@ * only data within bounds zmin <= data <= zmax will be * plotted. If zmin == zmax, all data will be ploted. * - * Dxmin, Dxmax, Dymin, Dymax: - * plots only the window of points whose(x,y)'s fall - * inside the [Dxmin->Dxmax]X[Dymin->Dymax] window - * * valuemin, valuemax: * The minimum and maximum values to use for value -> color * mappings. A value in idata of valuemin or less will have @@ -170,118 +179,94 @@ * image content. * \*-------------------------------------------------------------------------*/ - void c_plimagefr(PLFLT **idata, PLINT nx, PLINT ny, PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT zmin, PLFLT zmax, - PLFLT Dxmin, PLFLT Dxmax, PLFLT Dymin, PLFLT Dymax, - PLFLT valuemin, PLFLT valuemax) + PLFLT valuemin, PLFLT valuemax, + void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), + PLPointer pltr_data) { - PLINT nnx, nny, ix, iy, ixx, iyy, xm, ym; + PLINT ix, iy; PLFLT dx, dy; - /* Zf holds transformed image pixel values - * szmin and szmax are zmin and zmax scaled to unsigned short values */ - unsigned short *Zf, szmin, szmax; - short *Xf, *Yf; + /* z holds scaled image pixel values */ + PLFLT *z; /* This is used when looping through the image array, checking to - * make sure the values are within an acceptable range. */ + make sure the values are within an acceptable range. */ PLFLT datum; + /* Color palette 0 color in use before the plimage* call */ + PLINT init_color; if (plsc->level < 3) { - plabort("plimage: window must be set up first"); + plabort("plimagefr: window must be set up first"); return; } if (nx <= 0 || ny <= 0) { - plabort("plimage: nx and ny must be positive"); + plabort("plimagefr: nx and ny must be positive"); return; } - if (Dxmin < xmin || Dxmax > xmax || Dymin < ymin || Dymax > ymax) { - plabort("plimage: Dxmin or Dxmax or Dymin or Dymax not compatible with xmin or xmax or ymin or ymax."); - return; + if ((z = (PLFLT *) malloc(ny * nx * sizeof(PLFLT))) == NULL) { + plexit("plimagefr: Insufficient memory"); } - dx = (xmax - xmin) / (nx - 1); - dy = (ymax - ymin) / (ny - 1); - nnx = (Dxmax-Dxmin)/dx + 1; - nny = (Dymax-Dymin)/dy + 1; + /* Save the currently-in-use color. */ + init_color = plsc->icol0; - if ((Zf = (unsigned short *) malloc(nny*nnx*sizeof(unsigned short)))==NULL) - { - plexit("plimage: Insufficient memory"); - } + /* If no acceptable data range is given, then set the min/max data range + to include all of the given data. */ + if (zmin == zmax) { + /* Find the minimum and maximum values in the image */ + plMinMax2dGrid(idata, nx, ny, &zmax, &zmin); + } - xm = floor((Dxmin-xmin)/dx); ym = floor((Dymin-ymin)/dy); - - /* Go through the image values and scale them to fit in an - * unsigned short range. - * Any values greater than valuemax are set to valuemax, - * and values less than valuemin are set to valuemin. */ - ixx=-1; - for (ix=xm; ix<xm+nnx; ix++) { - ixx++; iyy=0; - for (iy=ym; iy<ym+nny; iy++) { - datum = idata[ix][iy]; - if (datum < valuemin) { - datum = valuemin; + /* Go through the image values and scale them to fit in + the COLOR_MIN to COLOR_MAX range. + Any values greater than valuemax are set to valuemax, + and values less than valuemin are set to valuemin. + Any values outside of zmin to zmax are flagged so they + are not plotted. */ + for (ix = 0; ix < nx; ix++) { + for (iy = 0; iy < ny; iy++) { + if (valuemin == valuemax) { + /* If valuemin == valuemax, avoid dividing by zero. */ + z[ix * ny + iy] = (COLOR_MAX + COLOR_MIN) / 2.0; } - else if (datum > valuemax) { - datum = valuemax; + else { + datum = idata[ix][iy]; + if (datum < zmin || datum > zmax) { + /* Set to a guaranteed-not-to-plot value */ + z[ix * ny + iy] = COLOR_NO_PLOT; + } + else { + if (datum < valuemin) { + datum = valuemin; + } + else if (datum > valuemax) { + datum = valuemax; + } + /* Set to a value scaled between COLOR_MIN and COLOR_MAX. */ + z[ix * ny + iy] = + (datum - valuemin + COLOR_MIN) / (valuemax - valuemin) * COLOR_MAX; + } } - Zf[ixx*nny+iyy++] = - (datum - valuemin) / (valuemax - valuemin) * USHRT_MAX; } } - if (zmin == zmax) { - zmin = valuemin; - zmax = valuemax; - } - else { - if (zmin < valuemin) - zmin = valuemin; - if (zmax > valuemax) - zmax = valuemax; - } + /* dx and dy are the plot-coordinates pixel sizes for an untransformed + image */ + dx = (xmax - xmin) / (PLFLT)nx; + dy = (ymax - ymin) / (PLFLT)ny; - /* The value range to plot, scaled to unsigned short values */ - szmin = (zmin - valuemin) / (valuemax - valuemin) * USHRT_MAX; - szmax = (zmax - valuemin) / (valuemax - valuemin) * USHRT_MAX; + plP_image(z, nx, ny, xmin, ymin, dx, dy, pltr, pltr_data); - xmin = Dxmin; xmax = Dxmax; - ymin = Dymin; ymax = Dymax; + plcol0(init_color); - /* The X and Y arrays has size nnx*nny */ - nnx++; nny++; - - if (((Xf = (short *) malloc(nny*nnx*sizeof(short)))==NULL)|| - ((Yf = (short *) malloc(nny*nnx*sizeof(short)))==NULL)) - { - plexit("plimage: Insufficient memory"); - } - - /* adjust the step for the X/Y arrays */ - dx = dx*(nx-1)/nx; - dy = dy*(ny-1)/ny; - - for (ix = 0; ix < nnx; ix++) { - for (iy = 0; iy < nny; iy++) { - Xf[ix*nny+iy] = plP_wcpcx(xmin + ix*dx); - Yf[ix*nny+iy] = plP_wcpcy(ymin + iy*dy); - } - } - - plP_image(Xf, Yf, Zf, nnx, nny, xmin, ymin, dx, dy, szmin, szmax); - - free(Xf); - free(Yf); - free(Zf); + free(z); } /*-------------------------------------------------------------------------*\ * plimage - * (***** SUBJECT TO CHANGE ******) * * arguments are * idata: array containing image data @@ -302,31 +287,82 @@ * inside the [Dxmin->Dxmax]X[Dymin->Dymax] window * \*-------------------------------------------------------------------------*/ - void c_plimage(PLFLT **idata, PLINT nx, PLINT ny, - PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT zmin, PLFLT zmax, - PLFLT Dxmin, PLFLT Dxmax, PLFLT Dymin, PLFLT Dymax) + PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT zmin, PLFLT zmax, + PLFLT Dxmin, PLFLT Dxmax, PLFLT Dymin, PLFLT Dymax) { - PLINT ix, iy; - PLFLT data_min, data_max, iz; + PLINT ix, iy, ixx, iyy, xm, ym, nnx, nny; + PLFLT data_min, data_max, dx, dy; + /* z holds the subimage (Dxmin, Dymin) - (Dxmax, Dymax) */ + PLFLT **z; + /* Was any space allocated for z? */ + PLBOOL copied; + copied = FALSE; - /* Find the minimum and maximum values in the image, and automatically - * scale the colors scale over this range. */ - data_min = data_max = idata[0][0]; + if (nx <= 0 || ny <= 0) { + plabort("plimage: nx and ny must be positive"); + return; + } - for (ix = 0; ix < nx; ix++) { - for (iy = 0; iy < ny; iy++) { - iz = idata[ix][iy]; - if (data_max < iz) - data_max = iz; - if (data_min > iz) - data_min = iz; + if (Dxmin < xmin || Dxmax > xmax || Dymin < ymin || Dymax > ymax) { + plabort("plimage: Dxmin or Dxmax or Dymin or Dymax not compatible with xmin or xmax or ymin or ymax."); + return; + } + + if (Dxmax < Dxmin || xmax < xmin || Dymax < Dymin || ymax < ymin) { + plabort("plimage: All (Dxmin < Dxmax) and (Dymin < Dymax) and (xmin < xmax) and (ymin < ymax) must hold."); + return; + } + + /* Find the minimum and maximum values in the image. Use these values to + for the color scale range. */ + plMinMax2dGrid(idata, nx, ny, &data_max, &data_min); + + if (xmin == Dxmin && xmax == Dxmax && ymin == Dymin && ymax == Dymax) { + /* If the whole image should be shown, then no copying is needed. */ + z = idata; + nnx = nx; + nny = ny; + } + else { + /* dx and dy are the plot-coordinates pixel sizes for an untransformed + image */ + dx = (xmax - xmin) / (PLFLT)nx; + dy = (ymax - ymin) / (PLFLT)ny; + + /* Pixel dimensions of the (Dxmin, Dymin) to (Dxmax, Dymax) box */ + nnx = ceil((Dxmax - Dxmin) / dx); + nny = ceil((Dymax - Dymin) / dy); + + /* Call plimagefr with the value -> color range mapped to the minimum + Offsets for the idata indices to select + (Dxmin, Dymin) to (Dxmax, Dymax) */ + xm = floor((Dxmin - xmin) / dx); + ym = floor((Dymin - ymin) / dy); + + /* Allocate space for the sub-image */ + plAlloc2dGrid(&z, nnx, nny); + + /* Go through the image and select the pixels within the given + (Dxmin, Dymin) - (Dxmax, Dymax) window. */ + ixx = -1; + for (ix = xm; ix < xm + nnx; ix++) { + ixx++; iyy=0; + for (iy = ym; iy < ym + nny; iy++) { + z[ixx][iyy++] = idata[ix][iy]; + } } + + /* Set the appropriate values to pass in to plimagefr */ + copied = TRUE; } - /* Call plimagefr with the value -> color range mapped to the minimum - * and maximum values in idata. */ - plimagefr(idata, nx, ny, xmin, xmax, ymin, ymax, zmin, zmax, - Dxmin, Dxmax, Dymin, Dymax, data_min, data_max); + plimagefr(z, nnx, nny, Dxmin, Dxmax, Dymin, Dymax, zmin, zmax, + data_min, data_max, NULL, NULL); + + /* Only free the memory if it was allocated by us... */ + if (copied == TRUE) { + plFree2dGrid(z, nnx, nny); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-07-22 10:42:35
|
Revision: 8551 http://plplot.svn.sourceforge.net/plplot/?rev=8551&view=rev Author: andrewross Date: 2008-07-22 10:42:44 +0000 (Tue, 22 Jul 2008) Log Message: ----------- Add support for plrandd, plrandi and plseed to java bindings. Update example 21 to use these. Now consistent with C version. Modified Paths: -------------- trunk/bindings/java/PLStream.java trunk/bindings/swig-support/plplotcapi.i trunk/examples/java/x21.java Modified: trunk/bindings/java/PLStream.java =================================================================== --- trunk/bindings/java/PLStream.java 2008-07-22 09:32:10 UTC (rev 8550) +++ trunk/bindings/java/PLStream.java 2008-07-22 10:42:44 UTC (rev 8551) @@ -549,6 +549,16 @@ plplotjavac.plptex3(x, y, z, dx, dy, dz, sx, sy, sz, just, text); } +public double randd() { + if (set_stream() == -1) return 0.0; + return plplotjavac.plrandd(); +} + +public long randi() { + if (set_stream() == -1) return 0; + return plplotjavac.plrandi(); +} + public void replot() { if (set_stream() == -1) return; plplotjavac.plreplot(); @@ -674,6 +684,11 @@ plplotjavac.plsdiplz(xmin, ymin, xmax, ymax); } +public void seed(long s) { + if (set_stream() == -1) return; + plplotjavac.plseed(s); +} + public void sesc(char esc) { if (set_stream() == -1) return; plplotjavac.plsesc(esc); Modified: trunk/bindings/swig-support/plplotcapi.i =================================================================== --- trunk/bindings/swig-support/plplotcapi.i 2008-07-22 09:32:10 UTC (rev 8550) +++ trunk/bindings/swig-support/plplotcapi.i 2008-07-22 10:42:44 UTC (rev 8551) @@ -560,6 +560,14 @@ void plptex3(PLFLT x, PLFLT y, PLFLT z, PLFLT dx, PLFLT dy, PLFLT dz, PLFLT sx, PLFLT sy, PLFLT sz, PLFLT just, const char *text); +%feature("autodoc","Return a random number in the range [0,1].") plrandd; +PLFLT +plrandd(); + +%feature("autodoc","Return a random number in the range [0,1].") plrandi; +unsigned long +plrandi(); + %feature("autodoc", "Replay contents of plot buffer to current device/file.") plreplot; void plreplot(void); @@ -659,6 +667,10 @@ void plsdiplz(PLFLT xmin, PLFLT ymin, PLFLT xmax, PLFLT ymax); +%feature("autodoc", "Seed the random number generator.") plseed; +void +plseed(unsigned int s); + %feature("autodoc", "Set the escape character for text strings.") plsesc; void plsesc(char esc); Modified: trunk/examples/java/x21.java =================================================================== --- trunk/examples/java/x21.java 2008-07-22 09:32:10 UTC (rev 8550) +++ trunk/examples/java/x21.java 2008-07-22 10:42:44 UTC (rev 8551) @@ -31,7 +31,6 @@ import plplot.core.*; import java.lang.Math; -import java.util.Random; class x21 { @@ -150,7 +149,7 @@ double opt[] = {0., 0., 0., 0., 0., 0.}; xm = ym = -0.2; - xM = yM = 0.8; + xM = yM = 0.6; // plplot initialization @@ -197,11 +196,10 @@ clev = new double[nl]; - xlab = new String("Npts="+pts+" gridx="+xp+" gridy="+yp); pls.col0(1); pls.env(xm, xM, ym, yM, 2, 0); pls.col0(15); - pls.lab(xlab, "", "The original data"); + pls.lab("X", "Y", "The original data sampling"); pls.col0(2); pls.poin(x, y, 5); pls.adv(0); @@ -212,10 +210,7 @@ pls.adv(0); for (alg=1; alg<7; alg++) { - ct = System.currentTimeMillis(); pls.griddata(x, y, z, xg, yg, zg, alg, opt[alg-1]); - xlab = new String("time="+(System.currentTimeMillis() - ct)/1000+" ms"); - ylab = new String("opt="+opt[alg-1]); /* - CSA can generate NaNs (only interpolates?!). * - DTLI and NNI can generate NaNs for points outside the @@ -274,7 +269,7 @@ pls.env0(xm, xM, ym, yM, 2, 0); pls.col0(15); - pls.lab(xlab, ylab, title[alg-1]); + pls.lab("X", "Y", title[alg-1]); pls.shades(zg, xm, xM, ym, yM, clev, 1, 0, 1, true, xg0, yg0); pls.col0(2); @@ -285,7 +280,7 @@ cmap1_init(); pls.vpor(0.0, 1.0, 0.0, 0.9); - pls.wind(-1.0, 1.0, -1.0, 1.5); + pls.wind(-1.1, 0.75, -0.65, 1.20); /* * For the comparison to be fair, all plots should have the * same z values, but to get the max/min of the data @@ -295,10 +290,10 @@ * plw3d(1., 1., 1., xm, xM, ym, yM, zmin, zmax, 30, -60); */ - pls.w3d(1., 1., 1., xm, xM, ym, yM, lzm[0], lzM[0], 30, -60); - pls.box3("bnstu", ylab, 0.0, 0, - "bnstu", xlab, 0.0, 0, - "bcdmnstuv", "", 0.0, 4); + pls.w3d(1., 1., 1., xm, xM, ym, yM, lzm[0], lzM[0], 30, -40); + pls.box3("bntu", "X", 0.0, 0, + "bntu", "Y", 0.0, 0, + "bcdfntu", "Z", 0.5, 0); pls.col0(15); pls.lab("", "", title[alg-1]); pls.plot3dc(xg, yg, zg, PLStream.DRAW_LINEXY | @@ -352,12 +347,11 @@ int i; double r; double xt, yt; - Random rnd = new Random(); int pts = x.length; for(i=0; i<pts; i++) { - xt = rnd.nextDouble(); - yt = rnd.nextDouble(); + xt = (xM-xm)*pls.randd(); + yt = (yM-ym)*pls.randd(); if (randn == 0) { x[i] = xt + xm; y[i] = yt + ym; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-07-22 15:57:33
|
Revision: 8557 http://plplot.svn.sourceforge.net/plplot/?rev=8557&view=rev Author: andrewross Date: 2008-07-22 15:57:38 +0000 (Tue, 22 Jul 2008) Log Message: ----------- Add f77 and f95 support for plrandd, plrandi and plseed. Fix f77 support for plot3dc (previously untested by examples). Add f77 version of example 21. Note that this current crashes for me so is disabled as part of ctest. Modified Paths: -------------- trunk/bindings/f77/plstubs.h trunk/bindings/f77/scstubs.c trunk/bindings/f95/plstubs.h trunk/bindings/f95/scstubs.c trunk/bindings/f95/sfstubsf95.f90 trunk/examples/f77/CMakeLists.txt Added Paths: ----------- trunk/examples/f77/x21f.fm4 Modified: trunk/bindings/f77/plstubs.h =================================================================== --- trunk/bindings/f77/plstubs.h 2008-07-22 12:47:26 UTC (rev 8556) +++ trunk/bindings/f77/plstubs.h 2008-07-22 15:57:38 UTC (rev 8557) @@ -235,8 +235,8 @@ #define PLMTEX7 FNAME(PLMTEX7,plmtex7) #define PLMTEX37 FNAME(PLMTEX37,plmtex37) #define PLOT3D FNAME(PLOT3D,plot3d) -#define PLOT3DC_ FNAME_(PLOT3DC_,plot3dc_) -#define PLOT3DC FNAME(PLOT3DC_,plot3dc_) +#define PLOT3DC_ FNAME_(PLOT3DC,plot3dc) +#define PLOT3DC FNAME(PLOT3DC,plot3dc) #define PLOT3DCL FNAME(PLOT3DCL,plot3dcl) #define PLPARSEOPTS7 FNAME(PLPARSEOPTS7,plparseopts7) #define PLPAT FNAME(PLPAT,plpat) @@ -247,6 +247,8 @@ #define PLPSTY FNAME(PLPSTY,plpsty) #define PLPTEX7 FNAME(PLPTEX7,plptex7) #define PLPTEX37 FNAME(PLPTEX37,plptex37) +#define PLRANDD FNAME(PLRANDD,plrandd) +#define PLRANDI FNAME(PLRANDI,plrandi) #define PLREPLOT FNAME(PLREPLOT,plreplot) #define PLRGB FNAME(PLRGB,plrgb) #define PLRGB1 FNAME(PLRGB1,plrgb1) @@ -272,6 +274,7 @@ #define PLSDIORI FNAME(PLSDIORI,plsdiori) #define PLSDIPLT FNAME(PLSDIPLT,plsdiplt) #define PLSDIPLZ FNAME(PLSDIPLZ,plsdiplz) +#define PLSEED FNAME(PLSEED,plseed) #define PLSESC FNAME(PLSESC,plsesc) #define PLSETOPT7 FNAME(PLSETOPT7,plsetopt7) #define PLSFAM FNAME(PLSFAM,plsfam) Modified: trunk/bindings/f77/scstubs.c =================================================================== --- trunk/bindings/f77/scstubs.c 2008-07-22 12:47:26 UTC (rev 8556) +++ trunk/bindings/f77/scstubs.c 2008-07-22 15:57:38 UTC (rev 8557) @@ -597,6 +597,18 @@ c_plptex3(*x, *y, *z, *dx, *dy, *dz, *sx, *sy, *sz, *just, text); } +PLFLT +PLRANDD() +{ + return c_plrandd(); +} + +unsigned long +PLRANDI() +{ + return c_plrandi(); +} + void PLREPLOT(void) { @@ -752,6 +764,12 @@ } void +PLSEED(unsigned int s) +{ + c_plseed(s); +} + +void PLSESC(PLINT *esc) { c_plsesc((char) *esc); Modified: trunk/bindings/f95/plstubs.h =================================================================== --- trunk/bindings/f95/plstubs.h 2008-07-22 12:47:26 UTC (rev 8556) +++ trunk/bindings/f95/plstubs.h 2008-07-22 15:57:38 UTC (rev 8557) @@ -247,6 +247,8 @@ #define PLPSTY FNAME(PLPSTY,plpsty) #define PLPTEX7 FNAME(PLPTEX7,plptex7) #define PLPTEX37 FNAME(PLPTEX37,plptex37) +#define PLRANDD FNAME(PLRANDDF77,plranddf77) +#define PLRANDI FNAME(PLRANDIF77,plrandif77) #define PLREPLOT FNAME(PLREPLOT,plreplot) #define PLRGB FNAME(PLRGB,plrgb) #define PLRGB1 FNAME(PLRGB1,plrgb1) @@ -274,6 +276,7 @@ #define PLSDIORI FNAME(PLSDIORI,plsdiori) #define PLSDIPLT FNAME(PLSDIPLT,plsdiplt) #define PLSDIPLZ FNAME(PLSDIPLZ,plsdiplz) +#define PLSEED FNAME(PLSEEDF77,plseedf77) #define PLSESC FNAME(PLSESC,plsesc) #define PLSETOPT7 FNAME(PLSETOPT7,plsetopt7) #define PLSFAM FNAME(PLSFAM,plsfam) Modified: trunk/bindings/f95/scstubs.c =================================================================== --- trunk/bindings/f95/scstubs.c 2008-07-22 12:47:26 UTC (rev 8556) +++ trunk/bindings/f95/scstubs.c 2008-07-22 15:57:38 UTC (rev 8557) @@ -599,6 +599,18 @@ c_plptex3(*x, *y, *z, *dx, *dy, *dz, *sx, *sy, *sz, *just, text); } +PLFLT +PLRANDD() +{ + return c_plrandd(); +} + +unsigned long +PLRANDI() +{ + return c_plrandi(); +} + void PLREPLOT(void) { @@ -768,6 +780,12 @@ } void +PLSEED(unsigned int s) +{ + c_plseed(s); +} + +void PLSESC(PLINT *esc) { c_plsesc((char) *esc); Modified: trunk/bindings/f95/sfstubsf95.f90 =================================================================== --- trunk/bindings/f95/sfstubsf95.f90 2008-07-22 12:47:26 UTC (rev 8556) +++ trunk/bindings/f95/sfstubsf95.f90 2008-07-22 15:57:38 UTC (rev 8557) @@ -506,6 +506,16 @@ end interface interface + function plrandd() + end function plrandd + end interface + + interface + function plrandi() + end function plrandi + end interface + + interface subroutine plreplot end subroutine plreplot end interface @@ -653,6 +663,11 @@ end subroutine plsdiplz end interface + interface + subroutine plseed() + end subroutine plseed + end interface + ! TODO: character-version interface subroutine plsesc( esc ) Modified: trunk/examples/f77/CMakeLists.txt =================================================================== --- trunk/examples/f77/CMakeLists.txt 2008-07-22 12:47:26 UTC (rev 8556) +++ trunk/examples/f77/CMakeLists.txt 2008-07-22 15:57:38 UTC (rev 8557) @@ -42,6 +42,7 @@ "18" "19" "20" +"21" "22" "23" "28" Added: trunk/examples/f77/x21f.fm4 =================================================================== --- trunk/examples/f77/x21f.fm4 (rev 0) +++ trunk/examples/f77/x21f.fm4 2008-07-22 15:57:38 UTC (rev 8557) @@ -0,0 +1,297 @@ +C $Id:$ +C Grid data demo. +C +C Copyright (C) 2004 Joao Cardoso +C Copyright (C) 2008 Andrew Ross +C +C This file is part of PLplot. +C +C PLplot is free software; you can redistribute it and/or modify +C it under the terms of the GNU General Library Public License as +C published by the Free Software Foundation; either version 2 of the +C License, or (at your option) any later version. +C +C PLplot is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU Library General Public License for more details. +C +C You should have received a copy of the GNU Library General Public +C License along with PLplot; if not, write to the Free Software +C Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + implicit none + + real*8 PI + parameter (PI = 3.1415926535897932384d0) + + integer PL_PARSE_FULL + parameter(PL_PARSE_FULL = 1) + + integer GRID_CSA, GRID_DTLI, GRID_NNI, GRID_NNIDW, GRID_NNLI, + & GRID_NNAIDW + parameter (GRID_CSA = 1) + parameter (GRID_DTLI = 2) + parameter (GRID_NNI = 3) + parameter (GRID_NNIDW = 4) + parameter (GRID_NNLI = 5) + parameter (GRID_NNAIDW = 6) + + integer DRAW_LINEXY, MAG_COLOR, BASE_CONT + parameter(DRAW_LINEXY = 3) + parameter(MAG_COLOR = 4) + parameter(BASE_CONT = 8) + + external plrandd + real*8 plrandd + + integer pts, xp, yp, nl, knn_order, randn, rosen + real*8 threshold, wmin + parameter (pts = 500) + parameter (xp = 25) + parameter (yp = 20) + parameter (nl = 15) + parameter (knn_order = 20) + parameter (threshold = 1.001) + parameter (wmin = -1e3) + parameter (randn = 0) + parameter (rosen = 0) + + real*8 xmin, xmax, ymin, ymax + + real*8 x(pts), y(pts), z(pts), clev(nl) + real*8 xg(xp), yg(yp), zg(xp,yp) + real*8 zmin, zmax, lzmin, lzmax + integer i, j, k + integer alg; + character*80 title(6) + data title /'Cubic Spline Approximation', + & 'Delaunay Linear Interpolation', + & 'Natural Neighbors Interpolation', + & 'KNN Inv. Distance Weighted', + & '3NN Linear Interpolation', + & '4NN Around Inv. Dist. Weighted'/ + + real*8 opt(6) + data opt /0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0/ + + real*8 xt, yt + + real*8 r + integer ii, jj + real*8 dist, d + + xmin = -0.2 + ymin = -0.2 + xmax = 0.6 + ymax = 0.6 + +c call plMergeOpts(options, "x21c options", NULL); + call plparseopts(PL_PARSE_FULL); + + opt(3) = wmin; + opt(4) = dble(knn_order); + opt(5) = threshold; + +c Initialize plplot + + call plinit + + do i=1,pts + xt = (xmax-xmin)*plrandd() + yt = (ymax-ymin)*plrandd() + if (randn.eq.0) then + x(i) = xt + xmin + y(i) = yt + ymin + else + x(i) = sqrt(-2.d0*log(xt)) * cos(2.d0*PI*yt) + xmin + y(i) = sqrt(-2.d0*log(xt)) * sin(2.d0*PI*yt) + ymin + endif + if (rosen.eq.0) then + r = sqrt(x(i)*x(i) + y(i)*y(i)) + z(i) = exp(-r*r)*cos(2.d0*PI*r) + else + z(i) = log((1.d0-x(i))**2 + 100.d0*(y(i)-x(i)**2)**2) + endif + enddo + + zmin = z(1) + zmax = z(1) + do i=2,pts + zmax = max(zmax,z(i)) + zmin = min(zmin,z(i)) + enddo + + do i=1,xp + xg(i) = xmin + (xmax-xmin)*(i-1.d0)/(xp-1.d0) + enddo + do i=1,yp + yg(i) = ymin + (ymax-ymin)*(i-1.d0)/(yp-1.d0) + enddo + + call plcol0(1) + call plenv(xmin, xmax, ymin, ymax, 2, 0) + call plcol0(15) + call pllab("X", "Y", "The original data sampling") + call plcol0(2) + call plpoin(pts, x, y, 5) + call pladv(0) + + call plssub(3,2) + + do k=1,2 + call pladv(0); + do alg=1,6 + + call plgriddata(x, y, z, pts, xg, xp, yg, yp, zg, alg, + & opt(alg)) + +c - CSA can generate NaNs (only interpolates? !). +c - DTLI and NNI can generate NaNs for points outside the convex hull +c of the data points. +c - NNLI can generate NaNs if a sufficiently thick triangle is not found +c +c PLplot should be NaN/Inf aware, but changing it now is quite a job... +c so, instead of not plotting the NaN regions, a weighted average over +c the neighbors is done. +c + + if ((alg.eq.GRID_CSA).or.(alg.eq.GRID_DTLI).or. + & (alg.eq.GRID_NNLI).or.(alg.eq.GRID_NNI)) then + + do i=1,xp + do j=1,yp + if (isnan(zg(i,j))) then +c average (IDW) over the 8 neighbors + + zg(i,j) = 0.d0 + dist = 0.d0 + + ii=i-1 + do while ((ii.le.i+1).and.(ii.le.xp)) + jj = j-1 + do while ((jj.le.j+1).and.(jj.le.yp)) + if ((ii.ge.1) .and. (jj.ge.1) .and. + & (.not.isnan(zg(ii,jj))) ) then + if (abs(ii-i) + abs(jj-j) .eq. 1) then + d = 1.d0 + else + d = 1.4142 + endif + zg(i,j) = zg(i,j) + zg(ii,jj)/(d*d) + dist = dist + d + endif + jj = jj+1 + enddo + ii = ii+1 + enddo + if (dist.ne.0.d0) then + zg(i,j) = zg(i,j) / dist + else + zg(i,j) = zmin + endif + endif + enddo + enddo + endif + + call a2mnmx(zg, xp, yp, lzmax, lzmin, xp); + + call plcol0(1) + call pladv(alg) + + if (k.eq.0) then + + lzmin = min(lzmin, zmin) + lzmax = max(lzmax, zmax) + do i=1,nl + clev(i) = lzmin + (lzmax-lzmin)/(nl-1.d0)*(i-1.d0); + enddo + call plenv0(xmin, xmax, ymin, ymax, 2, 0) + call plcol0(15) + call pllab("X", "Y", title(alg)) + call plshades(zg, xp, yp, xmin, xmax, ymin, ymax, + & clev, nl, 1, 0, 1, 1) + call plcol0(2) + else + + do i = 1,nl + clev(i) = lzmin + (lzmax-lzmin)/(nl-1.d0)*(i-1.d0); + enddo + call cmap1_init() + call plvpor(0.0, 1.0, 0.0, 0.9) + call plwind(-1.1, 0.75, -0.65, 1.20) +c +c For the comparison to be fair, all plots should have the +c same z values, but to get the max/min of the data generated +c by all algorithms would imply two passes. Keep it simple. +c +c plw3d(1., 1., 1., xmin, xmax, ymin, ymax, zmin, zmax, 30, -60); +c + + call plw3d(1., 1., 1., xmin, xmax, ymin, ymax, lzmin, + & lzmax, 30, -40) + call plbox3("bntu", "X", 0., 0, + & "bntu", "Y", 0., 0, + & "bcdfntu", "Z", 0.5, 0) + call plcol0(15) + call pllab("", "", title(alg)) +c call plot3dc(xg, yg, zg, xp, yp, ior(ior(DRAW_LINEXY, +c & MAG_COLOR), BASE_CONT), clev, nl, xp) + endif + enddo + enddo + + end + + subroutine cmap1_init + implicit none + real*8 i(2), h(2), l(2), s(2) + + i(0) = 0.d0 + i(1) = 1.d0 + + h(0) = 240.d0 + h(1) = 0.d0 + + l(0) = 0.6d0 + l(1) = 0.6d0 + + s(0) = 0.8d0 + s(1) = 0.8d0 + + call plscmap1n(256) + call plscmap1l(0, 2, i, h, l, s, 0) + end subroutine + + + function isnan(x) + implicit none + + logical isnan + real*8 x + + isnan = (x.ne.x) + return + end function + + +C---------------------------------------------------------------------------- +C Subroutine a2mnmx +C Minimum and the maximum elements of a 2-d array. + + subroutine a2mnmx(f, nx, ny, fmin, fmax, xdim) + implicit none + + integer i, j, nx, ny, xdim + real*8 f(xdim, ny), fmin, fmax + + fmax = f(1, 1) + fmin = fmax + do j = 1, ny + do i = 1, nx + fmax = max(fmax, f(i, j)) + fmin = min(fmin, f(i, j)) + enddo + enddo + end Property changes on: trunk/examples/f77/x21f.fm4 ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-07-23 02:30:15
|
Revision: 8560 http://plplot.svn.sourceforge.net/plplot/?rev=8560&view=rev Author: andrewross Date: 2008-07-23 02:30:24 +0000 (Wed, 23 Jul 2008) Log Message: ----------- Fix f77 example 21 so it produces identical results to C version. Enable example 21 for f77 tests using ctest. Modified Paths: -------------- trunk/examples/f77/x21f.fm4 trunk/plplot_test/test_f77.sh.in Modified: trunk/examples/f77/x21f.fm4 =================================================================== --- trunk/examples/f77/x21f.fm4 2008-07-23 02:28:54 UTC (rev 8559) +++ trunk/examples/f77/x21f.fm4 2008-07-23 02:30:24 UTC (rev 8560) @@ -84,6 +84,8 @@ integer ii, jj real*8 dist, d + character*1 defined + xmin = -0.2 ymin = -0.2 xmax = 0.6 @@ -147,7 +149,7 @@ do alg=1,6 call plgriddata(x, y, z, pts, xg, xp, yg, yp, zg, alg, - & opt(alg)) + & opt(alg),xp) c - CSA can generate NaNs (only interpolates? !). c - DTLI and NNI can generate NaNs for points outside the convex hull @@ -179,7 +181,7 @@ if (abs(ii-i) + abs(jj-j) .eq. 1) then d = 1.d0 else - d = 1.4142 + d = 1.4142d0 endif zg(i,j) = zg(i,j) + zg(ii,jj)/(d*d) dist = dist + d @@ -198,12 +200,12 @@ enddo endif - call a2mnmx(zg, xp, yp, lzmax, lzmin, xp); + call a2mnmx(zg, xp, yp, lzmin, lzmax, xp); call plcol0(1) call pladv(alg) - if (k.eq.0) then + if (k.eq.1) then lzmin = min(lzmin, zmin) lzmax = max(lzmax, zmax) @@ -213,8 +215,8 @@ call plenv0(xmin, xmax, ymin, ymax, 2, 0) call plcol0(15) call pllab("X", "Y", title(alg)) - call plshades(zg, xp, yp, xmin, xmax, ymin, ymax, - & clev, nl, 1, 0, 1, 1) + call plshades0(zg, xp, yp, defined, xmin, xmax, ymin, + & ymax, clev, nl, 1, 0, 1, xp) call plcol0(2) else @@ -222,8 +224,8 @@ clev(i) = lzmin + (lzmax-lzmin)/(nl-1.d0)*(i-1.d0); enddo call cmap1_init() - call plvpor(0.0, 1.0, 0.0, 0.9) - call plwind(-1.1, 0.75, -0.65, 1.20) + call plvpor(0.d0, 1.d0, 0.d0, 0.9d0) + call plwind(-1.1d0, 0.75d0, -0.65d0, 1.20d0) c c For the comparison to be fair, all plots should have the c same z values, but to get the max/min of the data generated @@ -232,11 +234,11 @@ c plw3d(1., 1., 1., xmin, xmax, ymin, ymax, zmin, zmax, 30, -60); c - call plw3d(1., 1., 1., xmin, xmax, ymin, ymax, lzmin, - & lzmax, 30, -40) - call plbox3("bntu", "X", 0., 0, - & "bntu", "Y", 0., 0, - & "bcdfntu", "Z", 0.5, 0) + call plw3d(1.d0, 1.d0, 1.d0, xmin, xmax, ymin, ymax, + & lzmin, lzmax, 30.d0, -40.d0) + call plbox3("bntu", "X", 0.d0, 0, + & "bntu", "Y", 0.d0, 0, + & "bcdfntu", "Z", 0.5d0, 0) call plcol0(15) call pllab("", "", title(alg)) call plot3dc(xg, yg, zg, xp, yp, ior(ior(DRAW_LINEXY, @@ -244,6 +246,8 @@ endif enddo enddo + + call plend end Modified: trunk/plplot_test/test_f77.sh.in =================================================================== --- trunk/plplot_test/test_f77.sh.in 2008-07-23 02:28:54 UTC (rev 8559) +++ trunk/plplot_test/test_f77.sh.in 2008-07-23 02:30:24 UTC (rev 8560) @@ -49,9 +49,7 @@ # Do the standard non-interactive examples. # skip 14, 17, and 20 because they are interactive, and 20 not implemented. -# skip 21 because it delivers variable results depending on computer timing -# and load (and not implemented yet). - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 22 23 28 29 30 ; do + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 21 22 23 28 29 30 ; do $f77dir/x${index}f -dev $device -o ${OUTPUT_DIR}/x${index}f.$dsuffix $options 2> test.error status_code=$? cat test.error @@ -90,9 +88,7 @@ # Do the standard non-interactive examples. # skip 14, 17, and 20 because they are interactive, and 20 not implemented. -# skip 21 because it delivers variable results depending on computer timing -# and load (and not implemented yet). - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 22 23 28 29 30 ; do + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 21 22 23 28 29 30 ; do $f77dir/x${index}f <<EOF 2> test.error $device ${OUTPUT_DIR}/x${index}f.$dsuffix This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-07-23 08:09:27
|
Revision: 8563 http://plplot.svn.sourceforge.net/plplot/?rev=8563&view=rev Author: andrewross Date: 2008-07-23 08:09:36 +0000 (Wed, 23 Jul 2008) Log Message: ----------- Fix f95 version of example 21. Enable the example in the ctest test suite. Produces identical results to the C version with gfortran. Modified Paths: -------------- trunk/bindings/f95/sfstubsf95.f90 trunk/examples/f95/CMakeLists.txt trunk/plplot_test/test_f95.sh.in Modified: trunk/bindings/f95/sfstubsf95.f90 =================================================================== --- trunk/bindings/f95/sfstubsf95.f90 2008-07-23 03:17:46 UTC (rev 8562) +++ trunk/bindings/f95/sfstubsf95.f90 2008-07-23 08:09:36 UTC (rev 8563) @@ -506,19 +506,6 @@ end interface interface - function plrandd() - use plplot_flt - real (kind=plflt) :: plrandd - end function plrandd - end interface - - interface - function plrandi() - integer :: plrandi - end function plrandi - end interface - - interface subroutine plreplot end subroutine plreplot end interface @@ -1090,7 +1077,21 @@ enddo call plpoly3f77( size(x), x, y, z, idraw, iifcc ) end subroutine plpoly3 + + real (kind=plflt) function plrandd() + external plranddf77 + real(kind=plflt) :: plranddf77 + plrandd = plranddf77() + end function plrandd + + integer function plrandi() + external plrandif77 + integer :: plrandif77 + + plrandi = plrandif77() + end function plrandi + subroutine plscmap0( r, g, b ) integer, dimension(:) :: r, g, b Modified: trunk/examples/f95/CMakeLists.txt =================================================================== --- trunk/examples/f95/CMakeLists.txt 2008-07-23 03:17:46 UTC (rev 8562) +++ trunk/examples/f95/CMakeLists.txt 2008-07-23 08:09:36 UTC (rev 8563) @@ -42,6 +42,7 @@ "18" "19" "20" +"21" "22" "23" "28" Modified: trunk/plplot_test/test_f95.sh.in =================================================================== --- trunk/plplot_test/test_f95.sh.in 2008-07-23 03:17:46 UTC (rev 8562) +++ trunk/plplot_test/test_f95.sh.in 2008-07-23 08:09:36 UTC (rev 8563) @@ -52,7 +52,7 @@ # skip 14, 17, and 20 because they are interactive, and 20 not implemented. # skip 21 because it delivers variable results depending on computer timing # and load (and not implemented yet). - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 22 23 28 29 30; do + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 21 22 23 28 29 30; do $f95dir/x${index}f -dev $device -o ${OUTPUT_DIR}/x${index}f95.$dsuffix $options 2> test.error status_code=$? cat test.error @@ -93,7 +93,7 @@ # skip 14, 17, and 20 because they are interactive, and 20 not implemented. # skip 21 because it delivers variable results depending on computer timing # and load (and not implemented yet). - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 22 23 28 29 30; do + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 21 22 23 28 29 30; do $f95dir/x${index}f <<EOF 2> test.error $device ${OUTPUT_DIR}/x${index}f95.$dsuffix This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-07-24 13:11:12
|
Revision: 8578 http://plplot.svn.sourceforge.net/plplot/?rev=8578&view=rev Author: andrewross Date: 2008-07-24 13:11:19 +0000 (Thu, 24 Jul 2008) Log Message: ----------- Fix plimagefr support for f77 and f95 bindings. Update example 20 for f77 and f95. Now included in standard tests run with ctest. Note that the results between the two are identical, but differ slightly from the C results. The differences are on the first page. Modified Paths: -------------- trunk/bindings/f77/plstubs.h trunk/bindings/f77/sccont.c trunk/bindings/f77/scstubs.c trunk/bindings/f77/sfstubs.fm4 trunk/bindings/f95/plstubs.h trunk/bindings/f95/sccont.c trunk/bindings/f95/sfstubs.f90 trunk/bindings/f95/sfstubsf95.f90 trunk/examples/f77/x20f.fm4 trunk/examples/f95/x20f.f90 trunk/plplot_test/test_f77.sh.in trunk/plplot_test/test_f95.sh.in Modified: trunk/bindings/f77/plstubs.h =================================================================== --- trunk/bindings/f77/plstubs.h 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/bindings/f77/plstubs.h 2008-07-24 13:11:19 UTC (rev 8578) @@ -218,8 +218,10 @@ #define PLHLS FNAME(PLHLS,plhls) #define PLHLSRGB FNAME(PLHLSRGB,plhlsrgb) #define PLIMAGE FNAME(PLIMAGE,plimage) -/* Commented out for now - needs fixing to use pltr */ -/*#define PLIMAGEFR FNAME(PLIMAGEFR,plimagefr)*/ +#define PLIMAGEFR07 FNAME(PLIMAGEFR07,plimagefr07) +#define PLIMAGEFR17 FNAME(PLIMAGEFR17,plimagefr17) +#define PLIMAGEFR27 FNAME(PLIMAGEFR27,plimagefr27) +#define PLIMAGEFR7 FNAME(PLIMAGEFR7,plimagefr7) #define PLINIT FNAME(PLINIT,plinit) #define PLJOIN FNAME(PLJOIN,pljoin) #define PLLAB7 FNAME(PLLAB7,pllab7) Modified: trunk/bindings/f77/sccont.c =================================================================== --- trunk/bindings/f77/sccont.c 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/bindings/f77/sccont.c 2008-07-24 13:11:19 UTC (rev 8578) @@ -746,3 +746,119 @@ plFree2dGrid(a, *nptsx, *nptsy); } + +void +PLIMAGEFR07(PLFLT *idata, PLINT *nx, PLINT *ny, + PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, + PLFLT *zmin, PLFLT *zmax, PLFLT *valuemin, PLFLT *valuemax, + PLINT *lx) +{ + int i, j; + PLFLT **pidata; + + plAlloc2dGrid(&pidata, *nx, *ny); + + for ( i = 0 ; i < *nx ; i ++ ) { + for ( j = 0 ; j < *ny ; j ++ ) { + pidata[i][j] = idata[i + j * (*lx)]; + } + } + + c_plimagefr(pidata, *nx, *ny, + *xmin, *xmax, *ymin, *ymax, *zmin, *zmax, + *valuemin, *valuemax, pltr0, NULL); + + plFree2dGrid(pidata, *nx, *ny); +} + +void +PLIMAGEFR17(PLFLT *idata, PLINT *nx, PLINT *ny, + PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, + PLFLT *zmin, PLFLT *zmax, PLFLT *valuemin, PLFLT *valuemax, + PLFLT *xg, PLFLT *yg, PLINT *lx) +{ + int i, j; + PLFLT **pidata; + PLcGrid cgrid; + + plAlloc2dGrid(&pidata, *nx, *ny); + + cgrid.nx = (*nx)+1; + cgrid.ny = (*ny)+1; + cgrid.xg = xg; + cgrid.yg = yg; + + for ( i = 0 ; i < *nx ; i ++ ) { + for ( j = 0 ; j < *ny ; j ++ ) { + pidata[i][j] = idata[i + j * (*lx)]; + } + } + + c_plimagefr(pidata, *nx, *ny, + *xmin, *xmax, *ymin, *ymax, *zmin, *zmax, + *valuemin, *valuemax, pltr1, (void *) &cgrid); + + plFree2dGrid(pidata, *nx, *ny); +} + +void +PLIMAGEFR27(PLFLT *idata, PLINT *nx, PLINT *ny, + PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, + PLFLT *zmin, PLFLT *zmax, PLFLT *valuemin, PLFLT *valuemax, + PLFLT *xg, PLFLT *yg, PLINT *lx) +{ + int i, j; + PLFLT **pidata; + PLcGrid2 cgrid2; + + plAlloc2dGrid(&pidata, *nx, *ny); + plAlloc2dGrid(&cgrid2.xg, (*nx)+1, (*ny)+1); + plAlloc2dGrid(&cgrid2.yg, (*nx)+1, (*ny)+1); + + cgrid2.nx = (*nx)+1; + cgrid2.ny = (*ny)+1; + for ( i = 0 ; i <= *nx ; i ++ ) { + for ( j = 0 ; j <= *ny ; j ++ ) { + cgrid2.xg[i][j] = xg[i + j * ((*lx)+1)]; + cgrid2.yg[i][j] = yg[i + j * ((*lx)+1)]; + } + } + + for ( i = 0 ; i < *nx ; i ++ ) { + for ( j = 0 ; j < *ny ; j ++ ) { + pidata[i][j] = idata[i + j * (*lx)]; + } + } + + c_plimagefr(pidata, *nx, *ny, + *xmin, *xmax, *ymin, *ymax, *zmin, *zmax, + *valuemin, *valuemax, pltr2, (void *) &cgrid2); + + plFree2dGrid(pidata, *nx, *ny); + plFree2dGrid(cgrid2.xg, (*nx)+1, (*ny)+1); + plFree2dGrid(cgrid2.yg, (*nx)+1, (*ny)+1); +} + +void +PLIMAGEFR7(PLFLT *idata, PLINT *nx, PLINT *ny, + PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, + PLFLT *zmin, PLFLT *zmax, PLFLT *valuemin, PLFLT *valuemax, + PLFLT *ftr, PLINT *lx) +{ + int i, j; + PLFLT **pidata; + + plAlloc2dGrid(&pidata, *nx, *ny); + + for ( i = 0 ; i < *nx ; i ++ ) { + for ( j = 0 ; j < *ny ; j ++ ) { + pidata[i][j] = idata[i + j * (*lx)]; + } + } + + c_plimagefr(pidata, *nx, *ny, + *xmin, *xmax, *ymin, *ymax, *zmin, *zmax, + *valuemin, *valuemax, pltr, (void *) ftr); + + plFree2dGrid(pidata, *nx, *ny); +} Modified: trunk/bindings/f77/scstubs.c =================================================================== --- trunk/bindings/f77/scstubs.c 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/bindings/f77/scstubs.c 2008-07-24 13:11:19 UTC (rev 8578) @@ -386,37 +386,10 @@ c_plhlsrgb(*h, *l, *s, r, g, b); } -#if 0 void -PLIMAGEFR(PLFLT *idata, PLINT *nx, PLINT *ny, - PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, PLFLT *zmin, PLFLT *zmax, - PLFLT *Dxmin, PLFLT *Dxmax, PLFLT *Dymin, PLFLT *Dymax, - PLFLT *valuemin, PLFLT *valuemax) -{ - int i, j; - PLFLT **pidata; - - plAlloc2dGrid(&pidata, *nx, *ny); - - for ( i = 0 ; i < *nx ; i ++ ) { - for ( j = 0 ; j < *ny ; j ++ ) { - pidata[i][j] = idata[i + j * (*nx)]; - } - } - - c_plimagefr(pidata, *nx, *ny, - *xmin, *xmax, *ymin, *ymax, *zmin, *zmax, - *Dxmin, *Dxmax, *Dymin, *Dymax, - *valuemin, *valuemax); - - plFree2dGrid(pidata, *nx, *ny); -} -#endif - -void PLIMAGE(PLFLT *idata, PLINT *nx, PLINT *ny, PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, PLFLT *zmin, PLFLT *zmax, - PLFLT *Dxmin, PLFLT *Dxmax, PLFLT *Dymin, PLFLT *Dymax) + PLFLT *Dxmin, PLFLT *Dxmax, PLFLT *Dymin, PLFLT *Dymax, PLINT *lx) { int i, j; PLFLT **pidata; @@ -425,7 +398,7 @@ for ( i = 0 ; i < *nx ; i ++ ) { for ( j = 0 ; j < *ny ; j ++ ) { - pidata[i][j] = idata[i + j * (*nx)]; + pidata[i][j] = idata[i + j * (*lx)]; } } Modified: trunk/bindings/f77/sfstubs.fm4 =================================================================== --- trunk/bindings/f77/sfstubs.fm4 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/bindings/f77/sfstubs.fm4 2008-07-24 13:11:19 UTC (rev 8578) @@ -507,6 +507,68 @@ !*********************************************************************** + subroutine plimagefr0(z,nx,ny,xmin,xmax,ymin,ymax,zmin,zmax, + & valuemin,valuemax,lx) + + implicit none + integer nx, ny, lx + real*8 z(nx, ny) + real*8 xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax + + call plimagefr07(z,nx,ny,xmin,xmax,ymin,ymax,zmin,zmax, + & valuemin,valuemax,lx) + + end + +!*********************************************************************** + + subroutine plimagefr1(z,nx,ny,xmin,xmax,ymin,ymax,zmin,zmax, + & valuemin,valuemax,xg,yg,lx) + + implicit none + integer nx, ny, lx + real*8 z(nx, ny), xg(nx), yg(ny) + real*8 xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax + + call plimagefr17(z,nx,ny,xmin,xmax,ymin,ymax,zmin,zmax, + & valuemin,valuemax,xg,yg,lx) + + end + +!*********************************************************************** + + subroutine plimagefr2(z,nx,ny,xmin,xmax,ymin,ymax,zmin,zmax, + & valuemin,valuemax,xg,yg,lx) + + implicit none + integer nx, ny, lx + real*8 z(nx, ny), xg(nx,ny), yg(nx,ny) + real*8 xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax + + call plimagefr27(z,nx,ny,xmin,xmax,ymin,ymax,zmin,zmax, + & valuemin,valuemax,xg,yg,lx) + + end + +!*********************************************************************** + + subroutine plimagefr(z,nx,ny,xmin,xmax,ymin,ymax,zmin,zmax, + & valuemin,valuemax,lx) + + implicit none + integer nx, ny, lx + real*8 z(nx, ny) + real*8 xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax + real*8 tr(6) + common /plplot/ tr + + call plimagefr7(z,nx,ny,xmin,xmax,ymin,ymax,zmin,zmax, + & valuemin,valuemax,tr,lx) + + end + +!*********************************************************************** + subroutine pllab(xlab,ylab,title) implicit none Modified: trunk/bindings/f95/plstubs.h =================================================================== --- trunk/bindings/f95/plstubs.h 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/bindings/f95/plstubs.h 2008-07-24 13:11:19 UTC (rev 8578) @@ -213,8 +213,10 @@ #define PLHLS FNAME(PLHLS,plhls) #define PLHLSRGB FNAME(PLHLSRGB,plhlsrgb) #define PLIMAGE FNAME(PLIMAGEF77,plimagef77) -/* Commented out until fixed to use pltr */ -/*#define PLIMAGEFR FNAME(PLIMAGEFRF77,plimagefrf77)*/ +#define PLIMAGEFR07 FNAME(PLIMAGEFR07,plimagefr07) +#define PLIMAGEFR17 FNAME(PLIMAGEFR17,plimagefr17) +#define PLIMAGEFR27 FNAME(PLIMAGEFR27,plimagefr27) +#define PLIMAGEFR7 FNAME(PLIMAGEFR7,plimagefr7) #define PLINIT FNAME(PLINIT,plinit) #define PLJOIN FNAME(PLJOIN,pljoin) #define PLLAB7 FNAME(PLLAB7,pllab7) Modified: trunk/bindings/f95/sccont.c =================================================================== --- trunk/bindings/f95/sccont.c 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/bindings/f95/sccont.c 2008-07-24 13:11:19 UTC (rev 8578) @@ -743,3 +743,120 @@ /* Clean up memory allocated for a */ plFree2dGrid(a, *nx, *ny); } + +void +PLIMAGEFR07(PLFLT *idata, PLINT *nx, PLINT *ny, + PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, + PLFLT *zmin, PLFLT *zmax, PLFLT *valuemin, PLFLT *valuemax, + PLINT *lx) +{ + int i, j; + PLFLT **pidata; + + plAlloc2dGrid(&pidata, *nx, *ny); + + for ( i = 0 ; i < *nx ; i ++ ) { + for ( j = 0 ; j < *ny ; j ++ ) { + pidata[i][j] = idata[i + j * (*lx)]; + } + } + printf("%f %f\n",*valuemax,*valuemin); + + c_plimagefr(pidata, *nx, *ny, + *xmin, *xmax, *ymin, *ymax, *zmin, *zmax, + *valuemin, *valuemax, pltr0, NULL); + + plFree2dGrid(pidata, *nx, *ny); +} + +void +PLIMAGEFR17(PLFLT *idata, PLINT *nx, PLINT *ny, + PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, + PLFLT *zmin, PLFLT *zmax, PLFLT *valuemin, PLFLT *valuemax, + PLFLT *xg, PLFLT *yg, PLINT *lx) +{ + int i, j; + PLFLT **pidata; + PLcGrid cgrid; + + plAlloc2dGrid(&pidata, *nx, *ny); + + cgrid.nx = (*nx)+1; + cgrid.ny = (*ny)+1; + cgrid.xg = xg; + cgrid.yg = yg; + + for ( i = 0 ; i < *nx ; i ++ ) { + for ( j = 0 ; j < *ny ; j ++ ) { + pidata[i][j] = idata[i + j * (*lx)]; + } + } + + c_plimagefr(pidata, *nx, *ny, + *xmin, *xmax, *ymin, *ymax, *zmin, *zmax, + *valuemin, *valuemax, pltr1, (void *) &cgrid); + + plFree2dGrid(pidata, *nx, *ny); +} + +void +PLIMAGEFR27(PLFLT *idata, PLINT *nx, PLINT *ny, + PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, + PLFLT *zmin, PLFLT *zmax, PLFLT *valuemin, PLFLT *valuemax, + PLFLT *xg, PLFLT *yg, PLINT *lx) +{ + int i, j; + PLFLT **pidata; + PLcGrid2 cgrid2; + + plAlloc2dGrid(&pidata, *nx, *ny); + plAlloc2dGrid(&cgrid2.xg, (*nx)+1, (*ny)+1); + plAlloc2dGrid(&cgrid2.yg, (*nx)+1, (*ny)+1); + + cgrid2.nx = (*nx)+1; + cgrid2.ny = (*ny)+1; + for ( i = 0 ; i <= *nx ; i ++ ) { + for ( j = 0 ; j <= *ny ; j ++ ) { + cgrid2.xg[i][j] = xg[i + j * ((*lx)+1)]; + cgrid2.yg[i][j] = yg[i + j * ((*lx)+1)]; + } + } + + for ( i = 0 ; i < *nx ; i ++ ) { + for ( j = 0 ; j < *ny ; j ++ ) { + pidata[i][j] = idata[i + j * (*lx)]; + } + } + + c_plimagefr(pidata, *nx, *ny, + *xmin, *xmax, *ymin, *ymax, *zmin, *zmax, + *valuemin, *valuemax, pltr2, (void *) &cgrid2); + + plFree2dGrid(pidata, *nx, *ny); + plFree2dGrid(cgrid2.xg, (*nx)+1, (*ny)+1); + plFree2dGrid(cgrid2.yg, (*nx)+1, (*ny)+1); +} + +void +PLIMAGEFR7(PLFLT *idata, PLINT *nx, PLINT *ny, + PLFLT *xmin, PLFLT *xmax, PLFLT *ymin, PLFLT *ymax, + PLFLT *zmin, PLFLT *zmax, PLFLT *valuemin, PLFLT *valuemax, + PLFLT *ftr, PLINT *lx) +{ + int i, j; + PLFLT **pidata; + + plAlloc2dGrid(&pidata, *nx, *ny); + + for ( i = 0 ; i < *nx ; i ++ ) { + for ( j = 0 ; j < *ny ; j ++ ) { + pidata[i][j] = idata[i + j * (*lx)]; + } + } + + c_plimagefr(pidata, *nx, *ny, + *xmin, *xmax, *ymin, *ymax, *zmin, *zmax, + *valuemin, *valuemax, pltr, (void *) ftr); + + plFree2dGrid(pidata, *nx, *ny); +} Modified: trunk/bindings/f95/sfstubs.f90 =================================================================== --- trunk/bindings/f95/sfstubs.f90 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/bindings/f95/sfstubs.f90 2008-07-24 13:11:19 UTC (rev 8578) @@ -590,6 +590,67 @@ !*********************************************************************** + subroutine plimagefr_0(z,xmin,xmax,ymin,ymax,zmin,zmax, & + valuemin,valuemax) + + implicit none + integer nx, ny, lx + real(kind=plflt) z(:,:) + real(kind=plflt) xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax + + call plimagefr07(z,size(z,1),size(z,2),xmin,xmax,ymin,ymax,zmin,zmax, & + valuemin,valuemax,size(z,1)) + + end subroutine + +!*********************************************************************** + + subroutine plimagefr_1(z,xmin,xmax,ymin,ymax,zmin,zmax, & + valuemin,valuemax,xg,yg) + + implicit none + integer nx, ny, lx + real(kind=plflt) z(:,:), xg(:), yg(:) + real(kind=plflt) xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax + + call plimagefr17(z,size(z,1),size(z,2),xmin,xmax,ymin,ymax,zmin,zmax, & + valuemin,valuemax,xg,yg,size(z,1)) + + end subroutine + +!*********************************************************************** + + subroutine plimagefr_2(z,xmin,xmax,ymin,ymax,zmin,zmax, & + valuemin,valuemax,xg,yg) + + implicit none + integer nx, ny, lx + real(kind=plflt) z(:,:), xg(:,:), yg(:,:) + real(kind=plflt) xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax + + call plimagefr27(z,size(z,1),size(z,2),xmin,xmax,ymin,ymax,zmin,zmax, & + valuemin,valuemax,xg,yg,size(z,1)) + + end subroutine + +!*********************************************************************** + + subroutine plimagefr_tr(z,xmin,xmax,ymin,ymax,zmin,zmax, & + valuemin,valuemax,tr) + + implicit none + integer nx, ny, lx + real(kind=plflt) z(:,:) + real(kind=plflt) xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax + real(kind=plflt) tr(6) + + call plimagefr7(z,size(z,1),size(z,2),xmin,xmax,ymin,ymax,zmin,zmax, & + valuemin,valuemax,tr,size(z,1)) + + end subroutine + +!*********************************************************************** + subroutine pllab(xlab,ylab,title) implicit none Modified: trunk/bindings/f95/sfstubsf95.f90 =================================================================== --- trunk/bindings/f95/sfstubsf95.f90 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/bindings/f95/sfstubsf95.f90 2008-07-24 13:11:19 UTC (rev 8578) @@ -100,6 +100,15 @@ end interface private :: plshades_multiple_0, plshades_multiple_1, & plshades_multiple_2, plshades_multiple_tr + + interface plimagefr + module procedure plimagefr_0 + module procedure plimagefr_1 + module procedure plimagefr_2 + module procedure plimagefr_tr + end interface + private :: plimagefr_0, plimagefr_1, plimagefr_2, plimagefr_tr + contains include 'sfstubs.f90' end module plplotp @@ -973,7 +982,7 @@ nx = size(idata,1) ny = size(idata,2) call plimagef77( idata, nx, ny, xmin, xmax, ymin, ymax, zmin, zmax, & - dxmin, dxmax, dymin, dymax ) + dxmin, dxmax, dymin, dymax, nx ) end subroutine plimage subroutine plline( x, y ) Modified: trunk/examples/f77/x20f.fm4 =================================================================== --- trunk/examples/f77/x20f.fm4 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/examples/f77/x20f.fm4 2008-07-24 13:11:19 UTC (rev 8578) @@ -1,6 +1,7 @@ C $Id: x20c.c 8033 2007-11-23 15:28:09Z andrewross $ C C Copyright (C) 2004 Alan W. Irwin +C Copyright (C) 2008 Andrew Ross C C This file is part of PLplot. C @@ -73,8 +74,8 @@ real*8 XDIMR, YDIMR parameter(XDIM = 260, YDIM = 260) parameter(XDIMR = XDIM, YDIMR = YDIM) - real*8 M_PI - parameter(M_PI = 3.1415926d0) + real*8 PI + parameter(PI = 3.1415926535897932384d0) real*8 x(XDIM), y(YDIM), z(XDIM,YDIM), r(XDIM,YDIM) real*8 xi, yi, xe, ye @@ -84,10 +85,16 @@ C C Dimensions taken from "lena.pgm" C - integer width, height, num_col + integer width, height, num_col, WDIM, HDIM + parameter (WDIM = 500) + parameter (HDIM = 500) data width, height / 500, 500/ - real*8 img_f(500,500) + real*8 img_f(WDIM,HDIM) + real*8 xg(WDIM+1,HDIM+1), yg(WDIM+1,HDIM+1) + real*8 img_max, img_min + real x0, y0, dy, stretch + logical read_img external read_img @@ -120,9 +127,9 @@ C C call plMergeOpts(options, 'x20c options', NULL) - dbg = .true. + dbg = .false. nosombrero = .false. - nointeractive = .true. + nointeractive = .false. f_name = ' ' call plparseopts(PL_PARSE_FULL) @@ -154,7 +161,7 @@ call plimage(z, XDIM, YDIM, & 1.d0, XDIMR, 1.d0, YDIMR, 0.d0, 0.d0, - & 1.d0, XDIMR, 1.d0, YDIMR) + & 1.d0, XDIMR, 1.d0, YDIMR, XDIM) call pladv(0) endif @@ -163,27 +170,27 @@ if (.not. nosombrero) then C draw a yellow plot box, useful for diagnostics! :( call plcol0(2) - call plenv(0.d0, 2.d0*M_PI, 0.0d0, 3.d0*M_PI, 1, -1) + call plenv(0.d0, 2.d0*PI, 0.0d0, 3.d0*PI, 1, -1) do 210 i=1,XDIM - x(i) = (i-1)*2.d0*M_PI/(XDIM-1) + x(i) = dble(i-1)*2.d0*PI/dble(XDIM-1) 210 continue do 220 i=1,YDIM - y(i) = (i-1)*3.d0*M_PI/(YDIM-1) + y(i) = dble(i-1)*3.d0*PI/dble(YDIM-1) 220 continue do 240 i=1,XDIM do 230 j=1,YDIM - r(i,j) = sqrt(x(i)*x(i)+y(j)*y(j))+1e-3 + r(i,j) = sqrt(x(i)*x(i)+y(j)*y(j))+1.d-3 z(i,j) = sin(r(i,j)) / (r(i,j)) 230 continue 240 continue - call pllab('No, an amplitude clipped ''sombrero''', '', + call pllab('No, an amplitude clipped "sombrero"', '', & 'Saturn?') call plptex(2.d0, 2.d0, 3.d0, 4.d0, 0.d0, 'Transparent image') - call plimage(z, XDIM, YDIM, 0.d0, 2.d0*M_PI, 0.0d0, 3.d0*M_PI, - & 0.05d0, 1.d0, 0.d0, 2.d0*M_PI, 0.d0, 3.d0*M_PI) + call plimage(z, XDIM, YDIM, 0.d0, 2.d0*PI, 0.0d0, 3.d0*PI, + & 0.05d0, 1.d0, 0.d0, 2.d0*PI, 0.d0, 3.d0*PI, XDIM) C Save the plot if (f_name .ne. ' ') then @@ -213,19 +220,19 @@ call gray_cmap(num_col) C Display Lena - width_r = width - height_r = height + width_r = dble(width) + height_r = dble(height) call plenv(1.d0, width_r, 1.d0, height_r, 1, -1) if (.not. nointeractive) then - call pllab('Set and drag Button 1 to (re)set selection, Butto - &n 2 to finish.',' ','Lena...') + call pllab('Set and drag Button 1 to (re)set selection, '// + & 'Button 2 to finish.',' ','Lena...') else call pllab('',' ','Lena...') endif call plimage(img_f, width, height, 1.d0, width_r, 1.d0, - & height_r, 0.d0, 0.d0, 1.d0, width_r, 1.d0, height_r) + & height_r, 0.d0, 0.d0, 1.d0, width_r, 1.d0, height_r, WDIM) C Selection/expansion demo @@ -260,7 +267,7 @@ C Display selection only call plimage(img_f, width, height, 1.d0, width_r, 1.d0, - & height_r, 0.d0, 0.d0, xi, xe, ye, yi) + & height_r, 0.d0, 0.d0, xi, xe, ye, yi, WDIM) call plspause(1) call pladv(0) @@ -268,12 +275,46 @@ C Zoom in selection call plenv(xi, xe, ye, yi, 1, -1) call plimage(img_f, width, height, 1.d0, width_r, 1.d0, - & height_r, 0.d0, 0.d0, xi, xe, ye, yi) + & height_r, 0.d0, 0.d0, xi, xe, ye, yi, WDIM) call pladv(0) endif +c Base the dynamic range on the image contents. + + call a2mnmx(img_f,width,height,img_min,img_max,WDIM) + + call plcol(2) + call plenv(0.d0, width_r, 0.d0, height_r, 1, -1) + call pllab("", "", "Reduced dynamic range image example") + call plimagefr0(img_f, width, height, 0.d0, width_r, 0.d0, + & height_r, 0.d0, 0.d0, img_min + img_max * 0.25d0, + & img_max - img_max * 0.25d0, WDIM) + +c Draw a distorted version of the original image, showing its +c full dynamic range. + call plenv(0.d0, width_r, 0.d0, height_r, 1, -1) + call pllab("", "", "Distorted image example") + +c Populate the 2-d grids used for the distortion +c NB grids must be 1 larger in each dimension than the image +c since the coordinates are for the corner of each pixel. + x0 = 0.5d0*width_r + y0 = 0.5d0*height_r + dy = 0.5d0*height_r + stretch = 0.5d0 + do i=1,width+1 + do j=1,height+1 + xg(i,j) = x0 + (x0-dble(i-1))*(1.0d0 - stretch* + & cos((dble(j-1)-y0)/dy*PI*0.5d0)) + yg(i,j) = dble(j-1) + enddo + enddo + call plimagefr2(img_f, width, height, 0.d0, width_r, 0.d0, + & height_r, 0.d0, 0.d0, img_min, img_max, xg, yg, WDIM) + call pladv(0) + + call plend() - call exit(0) end @@ -282,7 +323,7 @@ implicit none character(*) fname integer width, height - real*8 img_f(width*height) + real*8 img_f(width,height) integer num_col character img @@ -383,8 +424,7 @@ do 210 i = 1,w record = record + 1 read( 10, rec = record ) img - k = i + (h-j)*w - img_f(k) = dble(ichar(img)) + img_f(i,h-j+1) = dble(ichar(img)) 210 continue 220 continue @@ -514,6 +554,7 @@ yi = yyi CC get_clip = gin.keysym == 'Q' + get_clip = .false. else C driver has no xormod capability, just do nothing get_clip = .false. @@ -542,3 +583,23 @@ call plscmap1l(1, 2, pos, r, g, b, 0) end + +C---------------------------------------------------------------------------- +C Subroutine a2mmx +C Minimum and the maximum elements of a 2-d array. + + subroutine a2mnmx(f, nx, ny, fmin, fmax, xdim) + implicit none + + integer i, j, nx, ny, xdim + real*8 f(xdim, ny), fmin, fmax + + fmax = f(1, 1) + fmin = fmax + do j = 1, ny + do i = 1, nx + fmax = max(fmax, f(i, j)) + fmin = min(fmin, f(i, j)) + enddo + enddo + end Modified: trunk/examples/f95/x20f.f90 =================================================================== --- trunk/examples/f95/x20f.f90 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/examples/f95/x20f.f90 2008-07-24 13:11:19 UTC (rev 8578) @@ -1,7 +1,9 @@ -! $Id: x20c.c 8033 2007-11-23 15:28:09Z andrewross $ +! $Id:$ ! ! Copyright (C) 2004 Alan W. Irwin +! Copyright (C) 2008 Andrew Ross ! +! ! This file is part of PLplot. ! ! PLplot is free software; you can redistribute it and/or modify @@ -84,7 +86,11 @@ ! integer width, height, num_col real(kind=plflt), dimension(:,:), pointer :: img_f + real(kind=plflt), dimension(:,:), pointer :: xg, yg + real(kind=plflt) :: img_max, img_min + real(kind=plflt) :: x0, y0, dy, stretch + ! ! Parameters from command-line ! @@ -107,9 +113,9 @@ ! ! call plMergeOpts(options, 'x20c options', NULL) - dbg = .true. + dbg = .false. nosombrero = .false. - nointeractive = .true. + nointeractive = .false. f_name = ' ' call plparseopts(PL_PARSE_FULL) @@ -154,20 +160,20 @@ call plenv(0._plflt, 2._plflt*M_PI, 0.0_plflt, 3._plflt*M_PI, 1, -1) do i=1,XDIM - x(i) = (i-1)*2._plflt*M_PI/(XDIM-1) + x(i) = dble(i-1)*2._plflt*M_PI/dble(XDIM-1) enddo do i=1,YDIM - y(i) = (i-1)*3._plflt*M_PI/(YDIM-1) + y(i) = dble(i-1)*3._plflt*M_PI/dble(YDIM-1) enddo do i=1,XDIM do j=1,YDIM - r(i,j) = sqrt(x(i)*x(i)+y(j)*y(j))+1e-3 + r(i,j) = sqrt(x(i)*x(i)+y(j)*y(j))+0.001_plflt z(i,j) = sin(r(i,j)) / (r(i,j)) enddo enddo - call pllab('No, an amplitude clipped ''sombrero''', '', & + call pllab('No, an amplitude clipped "sombrero"', '', & 'Saturn?') call plptex(2._plflt, 2._plflt, 3._plflt, 4._plflt, 0._plflt, 'Transparent image') call plimage(z, 0._plflt, 2._plflt*M_PI, 0.0_plflt, 3._plflt*M_PI, & @@ -199,13 +205,13 @@ call gray_cmap(num_col) ! Display Lena - width_r = width - height_r = height + width_r = dble(width) + height_r = dble(height) call plenv(1._plflt, width_r, 1._plflt, height_r, 1, -1) if (.not. nointeractive) then - call pllab('Set and drag Button 1 to (re)set selection, Butto& - &n 2 to finish.',' ','Lena...') + call pllab('Set and drag Button 1 to (re)set selection, Butto'// & + 'n 2 to finish.',' ','Lena...') else call pllab('',' ','Lena...') endif @@ -257,6 +263,44 @@ call pladv(0) endif +! Base the dynamic range on the image contents. + + call a2mnmx(img_f,width,height,img_min,img_max,width) + + call plcol(2) + call plenv(0._plflt, width_r, 0._plflt, height_r, 1, -1) + call pllab("", "", "Reduced dynamic range image example") + call plimagefr(img_f, 0._plflt, width_r, 0._plflt, & + height_r, 0._plflt, 0._plflt, img_min + img_max * 0.25_plflt, & + img_max - img_max * 0.25_plflt) + +! Draw a distorted version of the original image, showing its +! full dynamic range. + call plenv(0._plflt, width_r, 0._plflt, height_r, 1, -1) + call pllab("", "", "Distorted image example") + +! Populate the 2-d grids used for the distortion +! NB grids must be 1 larger in each dimension than the image +! since the coordinates are for the corner of each pixel. + allocate( xg(width+1,height+1) ) + allocate( yg(width+1,height+1) ) + x0 = 0.5_plflt*width_r + y0 = 0.5_plflt*height_r + dy = 0.5_plflt*height_r + stretch = 0.5_plflt + do i=1,width+1 + do j=1,height+1 + xg(i,j) = x0 + (x0-dble(i-1))*(1.0_plflt - stretch* & + cos((dble(j-1)-y0)/dy*M_PI*0.5_plflt)) + yg(i,j) = dble(j-1) + enddo + enddo + call plimagefr(img_f, 0._plflt, width_r, 0._plflt, & + height_r, 0._plflt, 0._plflt, img_min, img_max, xg, yg) + call pladv(0) + + deallocate( img_f, xg, yg ) + call plend() call exit(0) @@ -496,6 +540,7 @@ yi = yyi !C get_clip = gin.keysym == 'Q' + get_clip = .false. else ! driver has no xormod capability, just do nothing get_clip = .false. @@ -529,3 +574,24 @@ end subroutine end program + +!---------------------------------------------------------------------------- +! Subroutine a2mmx +! Minimum and the maximum elements of a 2-d array. + + subroutine a2mnmx(f, nx, ny, fmin, fmax, xdim) + use plplot + implicit none + + integer i, j, nx, ny, xdim + real(kind=plflt) f(xdim, ny), fmin, fmax + + fmax = f(1, 1) + fmin = fmax + do j = 1, ny + do i = 1, nx + fmax = max(fmax, f(i, j)) + fmin = min(fmin, f(i, j)) + enddo + enddo + end Modified: trunk/plplot_test/test_f77.sh.in =================================================================== --- trunk/plplot_test/test_f77.sh.in 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/plplot_test/test_f77.sh.in 2008-07-24 13:11:19 UTC (rev 8578) @@ -48,8 +48,8 @@ fi # Do the standard non-interactive examples. -# skip 14, 17, and 20 because they are interactive, and 20 not implemented. - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 21 22 23 28 29 30 ; do +# skip 14 and 17 because they are interactive. + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 28 29 30 ; do $f77dir/x${index}f -dev $device -o ${OUTPUT_DIR}/x${index}f.$dsuffix $options 2> test.error status_code=$? cat test.error @@ -87,8 +87,8 @@ fi # Do the standard non-interactive examples. -# skip 14, 17, and 20 because they are interactive, and 20 not implemented. - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 21 22 23 28 29 30 ; do +# skip 14 and 17 because they are interactive. + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 28 29 30 ; do $f77dir/x${index}f <<EOF 2> test.error $device ${OUTPUT_DIR}/x${index}f.$dsuffix Modified: trunk/plplot_test/test_f95.sh.in =================================================================== --- trunk/plplot_test/test_f95.sh.in 2008-07-24 13:09:41 UTC (rev 8577) +++ trunk/plplot_test/test_f95.sh.in 2008-07-24 13:11:19 UTC (rev 8578) @@ -49,10 +49,8 @@ # Do the standard non-interactive examples. -# skip 14, 17, and 20 because they are interactive, and 20 not implemented. -# skip 21 because it delivers variable results depending on computer timing -# and load (and not implemented yet). - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 21 22 23 28 29 30; do +# skip 14 and 17 because they are interactive. + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 28 29 30; do $f95dir/x${index}f -dev $device -o ${OUTPUT_DIR}/x${index}f95.$dsuffix $options 2> test.error status_code=$? cat test.error @@ -90,10 +88,8 @@ # Do the standard non-interactive examples. -# skip 14, 17, and 20 because they are interactive, and 20 not implemented. -# skip 21 because it delivers variable results depending on computer timing -# and load (and not implemented yet). - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 21 22 23 28 29 30; do +# skip 14 and 17 because they are interactive. + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 28 29 30; do $f95dir/x${index}f <<EOF 2> test.error $device ${OUTPUT_DIR}/x${index}f95.$dsuffix This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-07-24 14:01:58
|
Revision: 8584 http://plplot.svn.sourceforge.net/plplot/?rev=8584&view=rev Author: andrewross Date: 2008-07-24 14:02:07 +0000 (Thu, 24 Jul 2008) Log Message: ----------- Add support for PLGraphicsIn to f95 (use f90 type). Add support for plGetCursor. Update example 20 to use new plgetcursor subroutine. Modified Paths: -------------- trunk/bindings/f95/plstubs.h trunk/bindings/f95/scstubs.c trunk/bindings/f95/sfstubsf95.f90 trunk/examples/f95/x20f.f90 Modified: trunk/bindings/f95/plstubs.h =================================================================== --- trunk/bindings/f95/plstubs.h 2008-07-24 14:00:27 UTC (rev 8583) +++ trunk/bindings/f95/plstubs.h 2008-07-24 14:02:07 UTC (rev 8584) @@ -195,6 +195,7 @@ #define PLGDIDEV FNAME(PLGDIDEV,plgdidev) #define PLGDIORI FNAME(PLGDIORI,plgdiori) #define PLGDIPLT FNAME(PLGDIPLT,plgdiplt) +#define PLGETCURSOR FNAME(PLGETCURSOR,plgetcursor) #define PLGFAM FNAME(PLGFAM,plgfam) #define PLGFNAM7 FNAME(PLGFNAM7,plgfnam7) #define PLGLEVEL FNAME(PLGLEVEL,plglevel) Modified: trunk/bindings/f95/scstubs.c =================================================================== --- trunk/bindings/f95/scstubs.c 2008-07-24 14:00:27 UTC (rev 8583) +++ trunk/bindings/f95/scstubs.c 2008-07-24 14:02:07 UTC (rev 8584) @@ -289,6 +289,12 @@ } void +PLGETCURSOR(PLGraphicsIn *gin) +{ + plGetCursor(gin); +} + +void PLGFAM(PLINT *fam, PLINT *num, PLINT *bmax) { c_plgfam(fam, num, bmax); Modified: trunk/bindings/f95/sfstubsf95.f90 =================================================================== --- trunk/bindings/f95/sfstubsf95.f90 2008-07-24 14:00:27 UTC (rev 8583) +++ trunk/bindings/f95/sfstubsf95.f90 2008-07-24 14:02:07 UTC (rev 8584) @@ -113,9 +113,25 @@ include 'sfstubs.f90' end module plplotp + module plplot_types + use plplot_flt + type :: PLGraphicsIn + integer type ! of event (CURRENTLY UNUSED) + integer state ! key or button mask + integer keysym ! key selected + integer button ! mouse button selected + integer subwindow ! subwindow (alias subpage, alias subplot) number + character(len=16) string ! translated string + integer pX, pY ! absolute device coordinates of pointer + real(kind=plflt) dX, dY ! relative device coordinates of pointer + real(kind=plflt) wX, wY ! world coordinates of pointer + end type PLGraphicsIn + end module plplot_types + module plplot use plplotp use plplot_flt + use plplot_types ! ! To be added: renaming list ! @@ -338,6 +354,14 @@ end interface interface + subroutine plgetcursor( gin ) + use plplot_flt + use plplot_types + type(PLGraphicsIn) :: gin + end subroutine plgetcursor + end interface + + interface subroutine plgfam( fam, num, bmax ) integer :: fam, num, bmax end subroutine plgfam Modified: trunk/examples/f95/x20f.f90 =================================================================== --- trunk/examples/f95/x20f.f90 2008-07-24 14:00:27 UTC (rev 8583) +++ trunk/examples/f95/x20f.f90 2008-07-24 14:02:07 UTC (rev 8584) @@ -452,12 +452,14 @@ real(kind=plflt) xi, xe, yi, ye -! PLGraphicsIn gin - integer gin - real(kind=plflt) xxi, yyi, xxe, yye, t + type(PLGraphicsIn) :: gin + real(kind=plflt) :: xxi, yyi, xxe, yye, t logical st, start real(kind=plflt) sx(5), sy(5) + integer PLK_Return + parameter(PLK_Return = Z'0D') + xxi = xi yyi = yi xxe = xe @@ -469,54 +471,55 @@ ! Driver has xormod capability, continue if (st) then - 100 continue + do while (.true.) - call plxormod(.false., st) -!C call plGetCursor(gin) - call plxormod(.true., st) - -!C if (gin.button == 1) { -!C xxi = gin.wX -!C yyi = gin.wY - if (start) then + call plxormod(.false., st) + call plgetcursor(gin) + call plxormod(.true., st) + + if (gin%button .eq. 1) then + xxi = gin%wX + yyi = gin%wY + if (start) then !C clear previous rectangle call plline(sx, sy) - endif - - start = .false. - - sx(1) = xxi - sy(1) = yyi - sx(5) = xxi - sy(5) = yyi -!C endif - -!C if (gin.state & 0x100) then -!C xxe = gin.wX -!C yye = gin.wY - if (start) then + endif + + start = .false. + + sx(1) = xxi + sy(1) = yyi + sx(5) = xxi + sy(5) = yyi + endif + + if (iand(gin%state,Z'100').ne.0) then + xxe = gin%wX + yye = gin%wY + if (start) then ! Clear previous rectangle call plline(sx, sy) - endif - start = .true. + endif + start = .true. + + sx(3) = xxe + sy(3) = yye + sx(2) = xxe + sy(2) = yyi + sx(4) = xxi + sy(4) = yye +! Draw new rectangle + call plline(sx, sy) + endif - sx(3) = xxe - sy(3) = yye - sx(2) = xxe - sy(2) = yyi - sx(4) = xxi - sy(4) = yye -! Draw new rectangle - call plline(sx, sy) -!C endif - -!C if (gin.button == 3 || gin.keysym == PLK_Return || gin.keysym == 'Q') then - if (start) then + if ((gin%button .eq. 3).or.(gin%keysym .eq. PLK_Return).or.(gin%keysym .eq. ichar('Q'))) then + if (start) then ! Clear previous rectangle call plline(sx, sy) goto 110 - endif -!C endif + endif + endif + enddo 110 continue ! Leave xor mode @@ -539,8 +542,8 @@ ye = yye yi = yyi -!C get_clip = gin.keysym == 'Q' - get_clip = .false. + get_clip = (gin%keysym .eq. ichar('Q')) +! get_clip = .false. else ! driver has no xormod capability, just do nothing get_clip = .false. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-07-24 15:20:16
|
Revision: 8587 http://plplot.svn.sourceforge.net/plplot/?rev=8587&view=rev Author: andrewross Date: 2008-07-24 15:20:24 +0000 (Thu, 24 Jul 2008) Log Message: ----------- Fix java and python (untested) support for plimagefr. Update java example 20 consistent with the C version. Modified Paths: -------------- trunk/bindings/java/PLStream.java trunk/bindings/java/plplotjavac.i trunk/bindings/swig-support/plplotcapi.i trunk/examples/java/x20.java Modified: trunk/bindings/java/PLStream.java =================================================================== --- trunk/bindings/java/PLStream.java 2008-07-24 14:40:57 UTC (rev 8586) +++ trunk/bindings/java/PLStream.java 2008-07-24 15:20:24 UTC (rev 8587) @@ -405,9 +405,9 @@ plplotjavac.plimage(data, xmin, xmax, ymin, ymax, zmin, zmax, Dxmin, Dxmax, Dymin, Dymax); } -public void imagefr(double[][] data, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax, double valuemin, double valuemax, double[][] pltr, double[][] OBJECT_DATA) { +public void imagefr(double[][] data, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax, double valuemin, double valuemax, double[][] pltr_im, double[][] OBJECT_DATA_im) { if (set_stream() == -1) return; - plplotjavac.plimagefr(data, xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax, pltr, OBJECT_DATA); + plplotjavac.plimagefr(data, xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax, pltr_im, OBJECT_DATA_im); } public void init() { Modified: trunk/bindings/java/plplotjavac.i =================================================================== --- trunk/bindings/java/plplotjavac.i 2008-07-24 14:40:57 UTC (rev 8586) +++ trunk/bindings/java/plplotjavac.i 2008-07-24 15:20:24 UTC (rev 8587) @@ -1171,6 +1171,145 @@ return $jnicall; } +/* First of two object arrays, where we check X and Y with previous. + * Note this is the simplified Tcl-like approach to handling the xg + * and yg arrays. Later we would like to move to true call-back functions + * here instead like is done with the python interface. */ +/* This is the version for plimagefr where size is 1 larger than previous + * array */ +%typemap(in) pltr_func pltr_img { + jPLFLT **adat; + jobject *ai; + int nx = (*jenv)->GetArrayLength( jenv, $input ); + int ny = -1; + int i, j; + ai = (jobject *) malloc( nx * sizeof(jobject) ); + adat = (jPLFLT **) malloc( nx * sizeof(jPLFLT *) ); + + (*jenv)->EnsureLocalCapacity( jenv, nx ); + + for( i=0; i < nx; i++ ) + { + ai[i] = (*jenv)->GetObjectArrayElement( jenv, $input, i ); + adat[i] = (*jenv)->GetPLFLTArrayElements( jenv, ai[i], 0 ); + + if (ny == -1) + ny = (*jenv)->GetArrayLength( jenv, ai[i] ); + else if (ny != (*jenv)->GetArrayLength( jenv, ai[i] )) { + printf( "Misshapen a array.\n" ); + for( j=0; j <= i; j++ ) + (*jenv)->ReleasePLFLTArrayElements( jenv, ai[j], adat[j], 0 ); + free(adat); + free(ai); + return; + } + } + + if( !((nx == Xlen+1 && ny == Ylen+1) || (nx == Xlen+1 && ny == 1))) { + printf( "Xlen = %d, nx = %d, Ylen = %d, ny = %d\n", Xlen, nx, Ylen, ny ); + printf( "X vector or matrix must match matrix dimensions.\n" ); + for( i=0; i < nx; i++ ) + (*jenv)->ReleasePLFLTArrayElements( jenv, ai[i], adat[i], 0 ); + free(adat); + free(ai); + return; + } + /* Store whether second dimension is unity. */ + Alen = ny; + setup_array_2d_PLFLT( &xg, adat, nx, ny ); + for( i=0; i < nx; i++ ) { + (*jenv)->ReleasePLFLTArrayElements( jenv, ai[i], adat[i], 0 ); + (*jenv)->DeleteLocalRef(jenv, ai[i]); + } + + free(adat); + free(ai); + $1 = pltr2; + +} + +%typemap(freearg) pltr_func pltr_img { + free(xg[0]); + free(xg); +} +%typemap(jni) pltr_func pltr_img "jobjectArray" +%typemap(jtype) pltr_func pltr_img jPLFLTbracket2 +%typemap(jstype) pltr_func pltr_img jPLFLTbracket2 +%typemap(javain) pltr_func pltr_img "$javainput" +%typemap(javaout) pltr_func pltr_img { + return $jnicall; +} + +/* Second of two object arrays, where we check X and Y with previous object. */ +/* This is the version for plimagefr where size is 1 larger than previous + * array */ +%typemap(in) PLPointer OBJECT_DATA_img { + jPLFLT **adat; + jobject *ai; + int nx = (*jenv)->GetArrayLength( jenv, $input ); + int ny = -1; + int i, j; + PLcGrid2 cgrid; + ai = (jobject *) malloc( nx * sizeof(jobject) ); + adat = (jPLFLT **) malloc( nx * sizeof(jPLFLT *) ); + + (*jenv)->EnsureLocalCapacity( jenv, nx ); + + for( i=0; i < nx; i++ ) + { + ai[i] = (*jenv)->GetObjectArrayElement( jenv, $input, i ); + adat[i] = (*jenv)->GetPLFLTArrayElements( jenv, ai[i], 0 ); + + if (ny == -1) + ny = (*jenv)->GetArrayLength( jenv, ai[i] ); + else if (ny != (*jenv)->GetArrayLength( jenv, ai[i] )) { + printf( "Misshapen a array.\n" ); + for( j=0; j <= i; j++ ) + (*jenv)->ReleasePLFLTArrayElements( jenv, ai[j], adat[j], 0 ); + free(adat); + free(ai); + return; + } + } + + if( !((nx == Xlen+1 && ny == Ylen+1) || (nx == Ylen+1 && ny == 1 && ny == Alen))) { + printf( "Xlen = %d, nx = %d, Ylen = %d, Alen = %d, ny = %d\n", + Xlen, nx, Ylen, Alen, ny ); + printf( "Y vector or matrix must match matrix dimensions.\n" ); + for( i=0; i < nx; i++ ) + (*jenv)->ReleasePLFLTArrayElements( jenv, ai[i], adat[i], 0 ); + free(adat); + free(ai); + return; + } + setup_array_2d_PLFLT( &yg, adat, nx, ny ); + for( i=0; i < nx; i++ ) { + (*jenv)->ReleasePLFLTArrayElements( jenv, ai[i], adat[i], 0 ); + (*jenv)->DeleteLocalRef(jenv, ai[i]); + } + + free(adat); + free(ai); + cgrid.xg = xg; + cgrid.yg = yg; + cgrid.nx = nx; + cgrid.ny = ny; + $1 = &cgrid; + +} + +%typemap(freearg) PLPointer OBJECT_DATA_img { + free(yg[0]); + free(yg); +} +%typemap(jni) PLPointer OBJECT_DATA_img "jobjectArray" +%typemap(jtype) PLPointer OBJECT_DATA_img jPLFLTbracket2 +%typemap(jstype) PLPointer OBJECT_DATA_img jPLFLTbracket2 +%typemap(javain) PLPointer OBJECT_DATA_img "$javainput" +%typemap(javaout) PLPointer OBJECT_DATA_img { + return $jnicall; +} + // Do not specify defined function or fill function from java. Instead // specify NULL and plfill defaults in the interface C code. %typemap(in, numinputs=0) defined_func df { Modified: trunk/bindings/swig-support/plplotcapi.i =================================================================== --- trunk/bindings/swig-support/plplotcapi.i 2008-07-24 14:40:57 UTC (rev 8586) +++ trunk/bindings/swig-support/plplotcapi.i 2008-07-24 15:20:24 UTC (rev 8587) @@ -171,8 +171,11 @@ #ifdef SWIG_PYTHON #define SWIG_OBJECT_DATA PYOBJECT_DATA +#define SWIG_OBJECT_DATA_img PYOBJECT_DATA +#define pltr_img pltr #else #define SWIG_OBJECT_DATA OBJECT_DATA +#define SWIG_OBJECT_DATA_img OBJECT_DATA_img #endif #ifdef SWIG_PYTHON @@ -958,7 +961,7 @@ plimagefr( PLFLT **Matrix, PLINT nx, PLINT ny, PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT zmin, PLFLT zmax, PLFLT valuemin, PLFLT valuemax, - pltr_func pltr, PLPointer SWIG_OBJECT_DATA); + pltr_func pltr_img, PLPointer SWIG_OBJECT_DATA_img); #ifdef 0 /* Returns a list of file-oriented device names and their menu strings */ Modified: trunk/examples/java/x20.java =================================================================== --- trunk/examples/java/x20.java 2008-07-24 14:40:57 UTC (rev 8586) +++ trunk/examples/java/x20.java 2008-07-24 15:20:24 UTC (rev 8587) @@ -108,7 +108,13 @@ int i, j, width, height, num_col; int n[] = new int[1]; double img_f[][]; + double img_min; + double img_max; + double maxmin[] = new double[2]; + double x0, y0, dy, stretch; + double xg[][], yg[][]; + /* Bugs in plimage(): -at high magnifications, the left and right edge are ragged, try @@ -252,6 +258,57 @@ pls.adv(0); } + // Base the dynamic range on the image contents. + f2mnmx(img_f,width,height,maxmin); + img_max = maxmin[0]; + img_min = maxmin[1]; + + // For java we use 2-d arrays to replace the pltr function + // even for the NULL case. + xg = new double[width+1][height+1]; + yg = new double[width+1][height+1]; + + for (i = 0; i<=width; i++) { + for (j = 0; j<=height; j++) { + xg[i][j] = (double) i; + yg[i][j] = (double) j; + } + } + // Draw a saturated version of the original image. Only use + // the middle 50% of the image's full dynamic range. + pls.col0(2); + pls.env(0, width, 0, height, 1, -1); + pls.lab("", "", "Reduced dynamic range image example"); + pls.imagefr(img_f, 0., (double) width, 0., (double) height, 0., 0., + img_min + img_max * 0.25, + img_max - img_max * 0.25, + xg, yg); + + // Draw a distorted version of the original image, showing its full dynamic range. + pls.env(0, width, 0, height, 1, -1); + pls.lab("", "", "Distorted image example"); + + x0 = 0.5*width; + y0 = 0.5*height; + dy = 0.5*height; + stretch = 0.5; + + /* In C / C++ the following would work, with plimagefr directly calling + mypltr. For compatibilty with other language bindings the same effect + can be achieved by generating the transformed grid first and then + using pltr2. */ + /* plimagefr(img_f, width, height, 0., width, 0., height, 0., 0., img_min, img_max, mypltr, (PLPointer) &stretch); */ + + for (i = 0; i<=width; i++) { + for (j = 0; j<=height; j++) { + xg[i][j] = x0 + (x0-i)*(1.0 - stretch* + Math.cos((j-y0)/dy*Math.PI*0.5)); + yg[i][j] = j; + } + } + + pls.imagefr(img_f, 0., (double) width, 0., (double) height, 0., 0., img_min, img_max, xg, yg); + pls.adv(0); pls.end(); } @@ -410,6 +467,22 @@ pls.scmap1l(true, pos, r, g, b); } + // Calculate the minimum and maximum of a 2-d array + void f2mnmx(double [][] f, int nx, int ny, double[] fmaxmin) + { + int i, j; + + fmaxmin[0] = f[0][0]; + fmaxmin[1] = fmaxmin[0]; + + for (i = 0; i < nx; i++) { + for (j = 0; j < ny; j++) { + fmaxmin[0] = Math.max(fmaxmin[0], f[i][j]); + fmaxmin[1] = Math.min(fmaxmin[1], f[i][j]); + } + } + } + public static void main( String[] args ) { new x20( args ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2008-07-28 23:37:10
|
Revision: 8597 http://plplot.svn.sourceforge.net/plplot/?rev=8597&view=rev Author: airwin Date: 2008-07-28 23:37:18 +0000 (Mon, 28 Jul 2008) Log Message: ----------- AWI for Hezekiah M. Carty. Implement ocaml examples 4-8. Modified Paths: -------------- trunk/examples/ocaml/CMakeLists.txt trunk/examples/ocaml/Makefile.examples.in trunk/plplot_test/test_ocaml.sh.in Added Paths: ----------- trunk/examples/ocaml/x04.ml trunk/examples/ocaml/x05.ml trunk/examples/ocaml/x06.ml trunk/examples/ocaml/x07.ml trunk/examples/ocaml/x08.ml Modified: trunk/examples/ocaml/CMakeLists.txt =================================================================== --- trunk/examples/ocaml/CMakeLists.txt 2008-07-26 19:30:28 UTC (rev 8596) +++ trunk/examples/ocaml/CMakeLists.txt 2008-07-28 23:37:18 UTC (rev 8597) @@ -24,6 +24,11 @@ "01" "02" "03" + "04" + "05" + "06" + "07" + "08" "11" "19" ) Modified: trunk/examples/ocaml/Makefile.examples.in =================================================================== --- trunk/examples/ocaml/Makefile.examples.in 2008-07-26 19:30:28 UTC (rev 8596) +++ trunk/examples/ocaml/Makefile.examples.in 2008-07-28 23:37:18 UTC (rev 8597) @@ -31,6 +31,11 @@ x01$(EXEEXT) \ x02$(EXEEXT) \ x03$(EXEEXT) \ + x04$(EXEEXT) \ + x05$(EXEEXT) \ + x06$(EXEEXT) \ + x07$(EXEEXT) \ + x08$(EXEEXT) \ x11$(EXEEXT) \ x19$(EXEEXT) \ Added: trunk/examples/ocaml/x04.ml =================================================================== --- trunk/examples/ocaml/x04.ml (rev 0) +++ trunk/examples/ocaml/x04.ml 2008-07-28 23:37:18 UTC (rev 8597) @@ -0,0 +1,96 @@ +(* $Id$ + + Log plot demo. +*) + +open Plplot + +let pi = atan 1.0 *. 4.0 + +(*--------------------------------------------------------------------------*\ + * plot1 + * + * Log-linear plot. +\*--------------------------------------------------------------------------*) + +let plot1 plot_type = + (* + int i; + static PLFLT freql[101], ampl[101], phase[101]; + PLFLT f0, freq; + *) + pladv 0; + + (* Set up data for log plot *) + let f0 = 1.0 in + let freql = Array.init 101 (fun i -> -2.0 +. float_of_int i /. 20.0) in + let freq = Array.map (fun x -> 10.0**x) freql in + let ampl = + Array.map ( + fun x -> 20.0 *. log10 (1.0 /. sqrt (1.0 +. (x /. f0)**2.0)) + ) freq + in + let phase = + Array.map (fun x -> -.(180.0 /. pi) *. atan (x /. f0)) freq + in + + plvpor 0.15 0.85 0.1 0.9; + plwind (-2.0) 3.0 (-80.0) 0.0; + + (* Try different axis and labelling styles. *) + plcol0 1; + let () = + match plot_type with + 0 -> + plbox "bclnst" 0.0 0 "bnstv" 0.0 0; + | 1 -> + plbox "bcfghlnst" 0.0 0 "bcghnstv" 0.0 0; + | _ -> failwith "Bad plot type specified" + in + + (* Plot ampl vs freq *) + plcol0 2; + plline freql ampl; + plcol0 1; + plptex 1.6 (-30.0) 1.0 (-20.0) 0.5 "-20 dB/decade"; + + (* Put labels on *) + plcol0 1; + plmtex "b" 3.2 0.5 0.5 "Frequency"; + plmtex "t" 2.0 0.5 0.5 "Single Pole Low-Pass Filter"; + plcol0 2; + plmtex "l" 5.0 0.5 0.5 "Amplitude (dB)"; + + (* For the gridless case, put phase vs freq on same plot *) + if plot_type = 0 then ( + plcol0 1; + plwind (-2.0) 3.0 (-100.0) 0.0; + plbox "" 0.0 0 "cmstv" 30.0 3; + plcol0 3; + plline freql phase; + plcol0 3; + plmtex "r" 5.0 0.5 0.5 "Phase shift (degrees)"; + () + ) + else + () + +(*--------------------------------------------------------------------------*\ + * Illustration of logarithmic axes, and redefinition of window. +\*--------------------------------------------------------------------------*) + +let () = + (* Parse and process command line arguments *) + ignore (plparseopts Sys.argv [|PL_PARSE_FULL|]); + + (* Initialize plplot *) + plinit(); + plfont 2; + + (* Make log plots using two different styles. *) + plot1 0; + plot1 1; + + plend (); + () + Property changes on: trunk/examples/ocaml/x04.ml ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/examples/ocaml/x05.ml =================================================================== --- trunk/examples/ocaml/x05.ml (rev 0) +++ trunk/examples/ocaml/x05.ml 2008-07-28 23:37:18 UTC (rev 8597) @@ -0,0 +1,36 @@ +(* $Id$ + + Histogram demo. +*) + +open Plplot + +let pi = atan 1.0 *. 4.0 + +let npts = 2047 + +(*--------------------------------------------------------------------------*\ + * Draws a histogram from sample data. +\*--------------------------------------------------------------------------*) + +let () = + (* Parse and process command line arguments *) + ignore (plparseopts Sys.argv [|PL_PARSE_FULL|]); + + (* Initialize plplot *) + plinit (); + + (* Fill up data points *) + + let delta = 2.0 *. pi /. float_of_int npts in + let data = Array.init npts (fun i -> sin (float_of_int i *. delta)) in + + plcol0 1; + plhist data (-1.1) 1.1 44 0; + plcol0 2; + pllab "#frValue" "#frFrequency" + "#frPLplot Example 5 - Probability function of Oscillator"; + + plend (); + () + Property changes on: trunk/examples/ocaml/x05.ml ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/examples/ocaml/x06.ml =================================================================== --- trunk/examples/ocaml/x06.ml (rev 0) +++ trunk/examples/ocaml/x06.ml 2008-07-28 23:37:18 UTC (rev 8597) @@ -0,0 +1,56 @@ +(* $Id$ + + Font demo. +*) + +open Printf +open Plplot + +(*--------------------------------------------------------------------------*\ + * Displays the entire "plpoin" symbol (font) set. +\*--------------------------------------------------------------------------*) +let () = + (* Parse and process command line arguments *) + ignore (plparseopts Sys.argv [|PL_PARSE_FULL|]); + + (* Initialize plplot *) + plinit (); + pladv 0; + + (* Set up viewport and window *) + plcol0 2; + plvpor 0.1 1.0 0.1 0.9; + plwind 0.0 1.0 0.0 1.3; + + (* Draw the grid using plbox *) + plbox "bcg" 0.1 0 "bcg" 0.1 0; + + (* Write the digits below the frame *) + plcol0 15; + for i = 0 to 9 do + plmtex "b" 1.5 (0.1 *. float_of_int i +. 0.05) 0.5 (string_of_int i); + done; + + let k = ref 0 in + for i = 0 to 12 do + (* Write the digits to the left of the frame *) + plmtex "lv" 1.0 (1.0 -. (2.0 *. float_of_int i +. 1.0) /. 26.0) 1.0 + (string_of_int (10 * i)); + for j = 0 to 9 do + let x = 0.1 *. float_of_int j +. 0.05 in + let y = 1.25 -. 0.1 *. float_of_int i in + + (* Display the symbols *) + let () = + if (!k < 128) then + plpoin [|x|] [|y|] !k + else + () + in + incr k; + done + done; + + plmtex "t" 1.5 0.5 0.5 "PLplot Example 6 - plpoin symbols"; + plend (); + () Property changes on: trunk/examples/ocaml/x06.ml ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/examples/ocaml/x07.ml =================================================================== --- trunk/examples/ocaml/x07.ml (rev 0) +++ trunk/examples/ocaml/x07.ml 2008-07-28 23:37:18 UTC (rev 8597) @@ -0,0 +1,60 @@ +(* $Id$ + + Font demo. +*) + +open Plplot + +let base = + [|0; 200; 500; 600; 700; 800; 900; + 2000; 2100; 2200; 2300; 2400; 2500; 2600; 2700; 2800; 2900|] + +(*--------------------------------------------------------------------------*\ + * Displays the entire "plsym" symbol (font) set. +\*--------------------------------------------------------------------------*) + +let () = + (* Parse and process command line arguments *) + ignore (plparseopts Sys.argv [|PL_PARSE_FULL|]); + + (* Initialize plplot *) + plinit (); + + plfontld 1; + for l = 0 to 16 do + pladv 0; + + (* Set up viewport and window *) + plcol0 2; + plvpor 0.15 0.95 0.1 0.9; + plwind 0.0 1.0 0.0 1.0; + + (* Draw the grid using plbox *) + plbox "bcg" 0.1 0 "bcg" 0.1 0; + + (* Write the digits below the frame *) + plcol0 15; + for i = 0 to 9 do + plmtex "b" 1.5 (0.1 *. float_of_int i +. 0.05) 0.5 (string_of_int i); + done; + + let k = ref 0 in + for i = 0 to 9 do + (* Write the digits to the left of the frame *) + plmtex "lv" 1.0 (0.95 -. 0.1 *. float_of_int i) 1.0 + (string_of_int (base.(l) + 10 * i)); + for j = 0 to 9 do + let x = 0.1 *. float_of_int j +. 0.05 in + let y = 0.95 -. 0.1 *. float_of_int i in + + (* Display the symbols *) + plsym [|x|] [|y|] (base.(l) + !k); + incr k; + done; + done; + + plmtex "t" 1.5 0.5 0.5 "PLplot Example 7 - PLSYM symbols"; + done; + plend (); + () + Property changes on: trunk/examples/ocaml/x07.ml ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/examples/ocaml/x08.ml =================================================================== --- trunk/examples/ocaml/x08.ml (rev 0) +++ trunk/examples/ocaml/x08.ml 2008-07-28 23:37:18 UTC (rev 8597) @@ -0,0 +1,185 @@ +(* $Id$ + + 3-d plot demo. + + Copyright (C) 2004 Alan W. Irwin + Copyright (C) 2004 Rafael Laboissiere + Copyright (C) 2008 Hezekiah M. Carty + + This file is part of PLplot. + + PLplot is free software; you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + 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 + +*) + +open Plplot + +let pi = atan 1.0 *. 4.0 + +let xpts = 35 (* Data points in x *) +let ypts = 46 (* Data points in y *) + +let alt = [|60.0; 20.0|] +let az = [|30.0; 60.0|] + +let title = + [| + "#frPLplot Example 8 - Alt=60, Az=30"; + "#frPLplot Example 8 - Alt=20, Az=60"; + |] + +(*--------------------------------------------------------------------------*\ + * cmap1_init1 + * + * Initializes color map 1 in HLS space. + * Basic grayscale variation from half-dark (which makes more interesting + * looking plot compared to dark) to light. + * An interesting variation on this: + * s[1] = 1.0 +\*--------------------------------------------------------------------------*) + +let cmap1_init gray = + let i = [|0.0; 1.0|] in (* left and right boundaries *) + + let h, l, s = + if gray then ( + [|0.0; 0.0|], (* hue -- low: red (arbitrary if s=0) *) + (* hue -- high: red (arbitrary if s=0) *) + [|0.5; 1.0|], (* lightness -- low: half-dark *) + (* lightness -- high: light *) + [|0.0; 0.0|] (* minimum saturation *) + (* minimum saturation *) + ) + else ( + [|240.0; 0.0|], (* blue -> green -> yellow -> *) + (* -> red *) + [|0.6; 0.6|], + [|0.8; 0.8|] + ) + in + + plscmap1n 256; + plscmap1l 0 i h l s None; + () + +let levels = 10 + +(*--------------------------------------------------------------------------*\ + * Does a series of 3-d plots for a given data set, with different + * viewing options in each plot. +\*--------------------------------------------------------------------------*) +let () = + let nlevel = levels in + let rosen = true in + + (* Parse and process command line arguments *) + ignore (plparseopts Sys.argv [|PL_PARSE_FULL|]); + + (* Initialize plplot *) + plinit (); + + (* Allocate data structures *) + let z = Array.make_matrix xpts ypts 0.0 in + + let x = + Array.init xpts ( + fun i -> + (float_of_int (i - (xpts / 2)) /. float_of_int (xpts / 2)) *. + if rosen then + 1.5 + else + 1.0 + ) + in + + let y = + Array.init ypts ( + fun i -> + float_of_int (i - (ypts / 2)) /. float_of_int (ypts / 2) +. + if rosen then + 0.5 + else + 0.0 + ) + in + + for i = 0 to xpts - 1 do + let xx = x.(i) in + for j = 0 to ypts - 1 do + let yy = y.(j) in + if rosen then ( + z.(i).(j) <- (1.0 -. xx)**2. +. 100. *. (yy -. xx**2.)**2.0; + (* The log argument may be zero for just the right grid. *) + if z.(i).(j) > 0.0 then + z.(i).(j) <- log z.(i).(j) + else + z.(i).(j) <- -5. (* -MAXFLOAT would mess-up up the scale *) + ) + else ( + let r = sqrt (xx *. xx +. yy *. yy) in + z.(i).(j) <- exp (-.r *. r) *. cos (2.0 *. pi *. r) + ) + done + done; + + let zmax, zmin = plMinMax2dGrid z in + let step = (zmax -. zmin) /. float_of_int (nlevel + 1) in + let clevel = + Array.init nlevel (fun i -> zmin +. step +. step *. float_of_int i) + in + + pllightsource 1.0 1.0 1.0; + + for k = 0 to 1 do + for ifshade = 0 to 3 do + pladv 0; + plvpor 0.0 1.0 0.0 0.9; + plwind (-1.0) 1.0 (-0.9) 1.1; + plcol0 3; + plmtex "t" 1.0 0.5 0.5 title.(k); + plcol0 1; + if rosen then + plw3d 1.0 1.0 1.0 (-1.5) 1.5 (-0.5) 1.5 zmin zmax alt.(k) az.(k) + else + plw3d 1.0 1.0 1.0 (-1.0) 1.0 (-1.0) 1.0 zmin zmax alt.(k) az.(k); + + plbox3 "bnstu" "x axis" 0.0 0 + "bnstu" "y axis" 0.0 0 + "bcdmnstuv" "z axis" 0.0 0; + plcol0 2; + + (* NOTE: As of now, the named variables for the opt parameter options + have not been defined in the OCaml interface. *) + match ifshade with + 0 -> (* diffuse light surface plot *) + cmap1_init true; + plsurf3d x y z 0 [||]; + | 1 -> (* magnitude colored plot *) + cmap1_init false; + plsurf3d x y z 4 [||]; + | 2 -> (* magnitude colored plot with faceted + squares *) + cmap1_init false; + plsurf3d x y z (4 + 128) [||]; + | _ -> (* magnitude colored plot with contours *) + cmap1_init false; + plsurf3d x y z (4 + 32 + 8) clevel; + done + done; + + (* Clean up *) + plend (); + () + Property changes on: trunk/examples/ocaml/x08.ml ___________________________________________________________________ Added: svn:eol-style + native Modified: trunk/plplot_test/test_ocaml.sh.in =================================================================== --- trunk/plplot_test/test_ocaml.sh.in 2008-07-26 19:30:28 UTC (rev 8596) +++ trunk/plplot_test/test_ocaml.sh.in 2008-07-28 23:37:18 UTC (rev 8597) @@ -23,8 +23,7 @@ # and $options defined. # Do the standard non-interactive examples. -# Currently only 11 and 19 are implemented -for index in 01 02 03 11 19; do +for index in 01 02 03 04 05 06 07 08 11 19; do $ocamldir/x${index}ocaml -dev $device -o ${OUTPUT_DIR}/x${index}ocaml.$dsuffix \ $options 2> test.error # Look for any status codes (segfaults, plexit) from the examples themselves. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-06 17:36:36
|
Revision: 8608 http://plplot.svn.sourceforge.net/plplot/?rev=8608&view=rev Author: andrewross Date: 2008-08-06 17:36:43 +0000 (Wed, 06 Aug 2008) Log Message: ----------- Add new test for ctest which compares the postscript output from the different language bindings. For each binding the script lists which examples are missing compared to the C bindings, and which examples produce different results. The script requires tail and diff which are both tested for in plplot.cmake. The test will fail if any examples produce different results from the C equivalent. It will not fail just for missing examples. A complete summary of the results can be viewed in Testing/Temporary/LastTest.log in the build tree, or alternatively using ctest -V. Modified Paths: -------------- trunk/cmake/modules/plplot.cmake trunk/plplot_test/CMakeLists.txt Added Paths: ----------- trunk/plplot_test/test_diff.sh.in Modified: trunk/cmake/modules/plplot.cmake =================================================================== --- trunk/cmake/modules/plplot.cmake 2008-08-05 16:12:12 UTC (rev 8607) +++ trunk/cmake/modules/plplot.cmake 2008-08-06 17:36:43 UTC (rev 8608) @@ -73,6 +73,11 @@ ) endif(NOT SH_EXECUTABLE) +# Find diff and tail which are used to compare results from different +# bindings. +find_program(DIFF_EXECUTABLE diff) +find_program(TAIL_EXECUTABLE tail) + option(PREBUILD_DIST "Pre-build all components required for distribution" OFF) if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") set( Modified: trunk/plplot_test/CMakeLists.txt =================================================================== --- trunk/plplot_test/CMakeLists.txt 2008-08-05 16:12:12 UTC (rev 8607) +++ trunk/plplot_test/CMakeLists.txt 2008-08-06 17:36:43 UTC (rev 8608) @@ -199,6 +199,15 @@ endif(NOT TEST_DEVICE STREQUAL "pngcairo") endif(PLD_pngcairo) +if(DIFF_EXECUTABLE AND TAIL_EXECUTABLE) +configure_file(test_diff.sh.in ${CMAKE_CURRENT_BINARY_DIR}/test_diff.sh @ONLY) +set(SCRIPTS test_diff.sh) +add_test(examples_compare + ${SH_EXECUTABLE} -c "./test_diff.sh" +) +endif(DIFF_EXECUTABLE AND TAIL_EXECUTABLE) + + # Make a copy of lena.pgm to the test subdirectory of the build # tree so that example 20 will run from there. # Also need a copy of lena.img for the octave bindings Added: trunk/plplot_test/test_diff.sh.in =================================================================== --- trunk/plplot_test/test_diff.sh.in (rev 0) +++ trunk/plplot_test/test_diff.sh.in 2008-08-06 17:36:43 UTC (rev 8608) @@ -0,0 +1,100 @@ +#!@SH_EXECUTABLE@ +# Test suite to compare C examples with other language bindings +# +# Copyright (C) 2008 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 General Library Public License as published +# by the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# 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 +# + +ret=0 + +# Compare C results with c++, f77, f95, java, octave, python, tcl, perl, +# ada and ocaml results +for lang in c++ f77 f95 java octave python tcl perl ada ocaml ; do + + # Check which suffix is used for this binding + case $lang in + c++) + suffix=cxx + ;; + f77) + suffix=f + ;; + f95) + suffix=f95 + ;; + java) + suffix=j + ;; + octave) + suffix=o + ;; + python) + suffix=p + ;; + tcl) + suffix=t + ;; + perl) + suffix=pdl + ;; + ada) + suffix=a + ;; + ocaml) + suffix=ocaml + ;; + esac + + missing="" + different="" + + # Assume that if example 1 is missing then the language is + # not implemented. + if [ -f x01${suffix}.psc ] ; then + + # Standard non-interactive examples + # Skip example 14 because it requires two output files + # Skip example 17 because it is interactive + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 \ + 21 22 23 24 25 26 27 28 29 30 ; do + if [ ! -f x${index}c.psc ] ; then + echo "C example ${index} is missing" + else + if [ ! -f x${index}${suffix}.psc ] ; then + missing="${missing} ${index}" + else + @TAIL_EXECUTABLE@ --lines=+9 x${index}c.psc > test1.psc + @TAIL_EXECUTABLE@ --lines=+9 x${index}${suffix}.psc > test2.psc + @DIFF_EXECUTABLE@ -q test1.psc test2.psc 2>&1 > /dev/null + if [ $? != 0 ] ; then + different="${different} ${index}" + fi + fi + fi + done + echo "${lang}" + echo " Missing examples : ${missing}" + echo " Differing examples : ${different}" + if [ "${different}" != "" ] ; then + ret=1 + fi + fi +done + +exit ${ret} + Property changes on: trunk/plplot_test/test_diff.sh.in ___________________________________________________________________ Added: svn:executable + * Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jb...@us...> - 2008-08-08 00:20:01
|
Revision: 8615 http://plplot.svn.sourceforge.net/plplot/?rev=8615&view=rev Author: jbauck Date: 2008-08-08 00:20:10 +0000 (Fri, 08 Aug 2008) Log Message: ----------- Add interactive Ada examples x14a.adb, xthick14a.adb, x17a.adb, xthick17a.adb. These need further testing on other systems since I don't have Tcl/Tk installed on mine (for Example 14). Examples 17 contain a bug whereby all legend strings are identical and equal to the fourth string, but I'm committing it anyway in case there are other problems that I haven't found. Modified Paths: -------------- trunk/examples/ada/CMakeLists.txt trunk/examples/ada/Makefile.examples.in trunk/plplot_test/test_ada.sh.in Added Paths: ----------- trunk/examples/ada/x14a.adb.cmake trunk/examples/ada/x17a.adb.cmake trunk/examples/ada/xthick14a.adb.cmake trunk/examples/ada/xthick17a.adb.cmake Modified: trunk/examples/ada/CMakeLists.txt =================================================================== --- trunk/examples/ada/CMakeLists.txt 2008-08-07 22:04:50 UTC (rev 8614) +++ trunk/examples/ada/CMakeLists.txt 2008-08-08 00:20:10 UTC (rev 8615) @@ -32,8 +32,10 @@ "11" "12" "13" +"14" "15" "16" +"17" "18" "19" "21" @@ -59,8 +61,10 @@ "thick11" "thick12" "thick13" +"thick14" "thick15" "thick16" +"thick17" "thick18" "thick19" "thick21" Modified: trunk/examples/ada/Makefile.examples.in =================================================================== --- trunk/examples/ada/Makefile.examples.in 2008-08-07 22:04:50 UTC (rev 8614) +++ trunk/examples/ada/Makefile.examples.in 2008-08-08 00:20:10 UTC (rev 8615) @@ -43,8 +43,10 @@ x11a$(EXEEXT) \ x12a$(EXEEXT) \ x13a$(EXEEXT) \ + x14a$(EXEEXT) \ x15a$(EXEEXT) \ x16a$(EXEEXT) \ + x17a$(EXEEXT) \ x18a$(EXEEXT) \ x19a$(EXEEXT) \ x21a$(EXEEXT) \ @@ -70,8 +72,10 @@ xthick11a$(EXEEXT) \ xthick12a$(EXEEXT) \ xthick13a$(EXEEXT) \ + xthick14a$(EXEEXT) \ xthick15a$(EXEEXT) \ xthick16a$(EXEEXT) \ + xthick17a$(EXEEXT) \ xthick18a$(EXEEXT) \ xthick19a$(EXEEXT) \ xthick21a$(EXEEXT) \ Added: trunk/examples/ada/x14a.adb.cmake =================================================================== --- trunk/examples/ada/x14a.adb.cmake (rev 0) +++ trunk/examples/ada/x14a.adb.cmake 2008-08-08 00:20:10 UTC (rev 8615) @@ -0,0 +1,371 @@ +-- $Id$ + +-- Demo of multiple stream/window capability (requires Tk or Tcl-DP). + +-- Maurice LeBrun +-- IFS, University of Texas at Austin + +-- Copyright (C) 2008 Jerry Bauck + +-- This file is part of PLplot. + +-- PLplot is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Library Public License as published +-- by the Free Software Foundation; either version 2 of the License, or +-- (at your option) any later version. + +-- 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 + +with + System, + Ada.Text_IO, + Ada.Strings, + Ada.Strings.Fixed, + Ada.Strings.Unbounded, + Ada.Numerics, + Ada.Numerics.Long_Elementary_Functions, + PLplot_Traditional, + PLplot_Auxiliary; +use + Ada.Text_IO, + Ada.Numerics, + Ada.Strings, + Ada.Strings.Fixed, + Ada.Strings.Unbounded, + Ada.Numerics.Long_Elementary_Functions, + PLplot_Traditional, + PLplot_Auxiliary; + +-- COMMENT THIS LINE IF YOUR COMPILER DOES NOT INCLUDE THESE +-- DEFINITIONS, FOR EXAMPLE, IF IT IS NOT ADA 2005 WITH ANNEX G.3 COMPLIANCE. +--with Ada.Numerics.Long_Real_Arrays; use Ada.Numerics.Long_Real_Arrays; +@Ada_Is_2007_With_and_Use_Numerics@ + +------------------------------------------------------------------------------ +-- Plots several simple functions from other example programs. +-- +-- This version sends the output of the first 4 plots (one page) to two +-- independent streams. +------------------------------------------------------------------------------ + +procedure x14a is + -- Select either TK or DP driver and use a small window + -- Using DP results in a crash at the end due to some odd cleanup problems + -- The geometry strings MUST be in writable memory + geometry_master : String := "500x410+100+200"; + geometry_slave : String := "500x410+650+200"; + driver : Unbounded_String; + digmax : Integer; + xscale, yscale, xoff, yoff : Long_Float; + xs, ys : Real_Vector(0 .. 5); + space0 : Integer_Array_1D(1 .. 1) := (Others => 0); + mark0 : Integer_Array_1D(1 .. 1) := (Others => 0); + space1 : Integer_Array_1D(1 .. 1) := (Others => 1500); + mark1 : Integer_Array_1D(1 .. 1) := (Others => 1500); + + procedure plot1 is + xmin, xmax, ymin, ymax : Long_Float; + x, y : Real_Vector(0 .. 59); + begin + for i in x'range loop + x(i) := xoff + xscale * Long_Float(i + 1) / Long_Float(x'Length); + y(i) := yoff + yscale * x(i) * x(i); + end loop; + + xmin := x(x'First); + xmax := x(x'Last); + ymin := y(y'First); + ymax := y(y'Last); + + for i in xs'range loop + xs(i) := x(i * 10 + 3); + ys(i) := y(i * 10 + 3); + end loop; + + -- 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). + plcol0(1); + plenv(xmin, xmax, ymin, ymax, 0, 0); + plcol0(6); + pllab("(x)", "(y)", "#frPLplot Example 1 - y=x#u2"); + + -- Plot the data points + plcol0(9); + plpoin(xs, ys, 9); + + -- Draw the line through the data + plcol0(4); + plline(x, y); + plflush; + end plot1; + + -- ================================================================ + + + procedure plot2 is + x, y : Real_Vector(0 .. 99); + begin + -- 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). + plcol0(1); + plenv(-2.0, 10.0, -0.4, 1.2, 0, 1); + plcol0(2); + pllab("(x)", "sin(x)/x", "#frPLplot Example 1 - Sinc Function"); + + -- Fill up the arrays + for i in x'range loop + x(i) := (Long_Float(i) - 19.0) / 6.0; + y(i) := 1.0; + if x(i) /= 0.0 then + y(i) := sin(x(i)) / x(i); + end if; + end loop; + + -- Draw the line + plcol0(3); + plline(x, y); + plflush; + end plot2; + + -- ================================================================ + + + procedure plot3 is + x, y : Real_Vector(0 .. 100); + begin + -- For the final graph we wish to override the default tick intervals, and + -- so do not use PLENV + + pladv(0); + + -- Use standard viewport, and define X range from 0 to 360 degrees, Y range + -- from -1.2 to 1.2. + plvsta; + plwind(0.0, 360.0, -1.2, 1.2); + + -- Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y. + plcol0(1); + plbox("bcnst", 60.0, 2, "bcnstv", 0.2, 2); + + -- Superimpose a dashed line grid, with 1.5 mm marks and spaces. + plstyl(mark1, space1); + plcol0(2); + plbox("g", 30.0, 0, "g", 0.2, 0); + plstyl(Default_Continuous_Line); + + plcol0(3); + pllab("Angle (degrees)", "sine", "#frPLplot Example 1 - Sine function"); + + for i in x'range loop + x(i) := 3.6 * Long_Float(i); + y(i) := sin(x(i) * pi / 180.0); + end loop; + + plcol0(4); + plline(x, y); + plflush; + end plot3; + + -- ================================================================ + + + procedure plot4 is + dtr, theta, dx, dy, r : Long_Float; + x, y, x0, y0 : Real_Vector(0 .. 360); + begin + dtr := pi / 180.0; + for i in x0'range loop + x0(i) := cos(dtr * Long_Float(i)); + y0(i) := sin(dtr * Long_Float(i)); + end loop; + + -- Set up viewport and window, but do not draw box + plenv(-1.3, 1.3, -1.3, 1.3, 1, -2); + for i in 1 .. 10 loop + for j in x'range loop + x(j) := 0.1 * Long_Float(i) * x0(j); + y(j) := 0.1 * Long_Float(i) * y0(j); + end loop; + + -- Draw circles for polar grid + plline(x, y); + end loop; + + plcol0(2); + for i in 0 .. 11 loop + theta := 30.0 * Long_Float(i); + dx := cos(dtr * theta); + dy := sin(dtr * theta); + + -- Draw radial spokes for polar grid + pljoin(0.0, 0.0, dx, dy); + + -- Write labels for angle + -- Slightly off zero to avoid floating point logic flips at 90 and 270 deg. + if dx >= -0.00001 then + plptex(dx, dy, dx, dy, -0.15, Trim(Integer'image(Integer(theta)), Left)); + else + plptex(dx, dy, -dx, -dy, 1.15, Trim(Integer'image(Integer(theta)), Left)); + end if; + end loop; + + -- Draw the graph + for i in x'range loop + r := sin(dtr * Long_Float(5 * i)); + x(i) := x0(i) * r; + y(i) := y0(i) * r; + end loop; + plcol0(3); + plline(x, y); + + plcol0(4); + plmtex("t", 2.0, 0.5, 0.5, "#frPLplot Example 3 - r(#gh)=sin 5#gh"); + plflush; + end plot4; + + -- ================================================================ + + + -- Demonstration of contour plotting + procedure plot5 is + XPTS : constant Integer := 35; + YPTS : constant Integer := 46; + -- Transformation function + XSPA : Long_Float := 2.0 / Long_Float(XPTS - 1); + YSPA : Long_Float := 2.0 / Long_Float(YPTS - 1); + tr : Real_Vector(0 .. 5) := (XSPA, 0.0, -1.0, 0.0, YSPA, -1.0); + xx, yy : Long_Float; + mark : Integer_Array_1D(1 .. 1) := (Others => 1500); + space : Integer_Array_1D(1 .. 1) := (Others => 1500); + z, w : Real_Matrix(0 .. XPTS -1, 0 .. YPTS - 1); + clevel : Real_Vector(0 .. 10) := + (-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0); + + procedure mypltr -- This spec is necessary to accommodate pragma Convention(C...). + (x, y : Long_Float; + tx, ty : out Long_Float; + pltr_data : PLpointer); + pragma Convention(Convention => C, Entity => mypltr); + + procedure mypltr + (x, y : Long_Float; + tx, ty : out Long_Float; + pltr_data : PLpointer) + is + begin + tx := tr(0) * x + tr(1) * y + tr(2); + ty := tr(3) * x + tr(4) * y + tr(5); + end mypltr; + + begin + for i in z'range(1) loop + xx := Long_Float(i - (XPTS / 2)) / Long_Float(XPTS / 2); + for j in z'range(2) loop + yy := Long_Float(j - (YPTS / 2)) / Long_Float(YPTS / 2) - 1.0; + z(i, j) := xx * xx - yy * yy; + w(i, j) := 2.0 * xx * yy; + end loop; + end loop; + + plenv(-1.0, 1.0, -1.0, 1.0, 0, 0); + plcol0(2); + plcont(z, 1, XPTS, 1, YPTS, clevel, mypltr'Unrestricted_Access, System.Null_Address); + plstyl(mark, space); + plcol0(3); + plcont(w, 1, XPTS, 1, YPTS, clevel, mypltr'Unrestricted_Access, System.Null_Address); + plcol0(1); + pllab("X Coordinate", "Y Coordinate", "Streamlines of flow"); + plflush; + end plot5; + + +begin + -- plplot initialization + -- Parse and process command line arguments + plparseopts(PL_PARSE_FULL); + + driver := To_Unbounded_String(plgdev); + + Put_Line("Demo of multiple output streams via the " & plgdev & "driver."); + Put_Line("Running with the second stream as slave to the first."); + New_Line; + + -- Set up first stream + plsetopt("geometry", geometry_master); + + plsdev(To_String(driver)); + plssub(2, 2); + plinit; + + -- Start next stream + plsstrm(1); + + -- Turn off pause to make this a slave (must follow master) + plsetopt("geometry", geometry_slave); + plspause(False); + plsdev(To_String(driver)); + plinit; + + -- Set up the data & plot + -- Original case + plsstrm(0); + + xscale := 6.0; + yscale := 1.0; + xoff := 0.0; + yoff := 0.0; + plot1; + + -- Set up the data & plot + xscale := 1.0; + yscale := 1.0e+6; + plot1; + + -- Set up the data & plot + xscale := 1.0; + yscale := 1.0e-6; + digmax := 2; + plsyax(digmax, 0); + plot1; + + -- Set up the data & plot + xscale := 1.0; + yscale := 0.0014; + yoff := 0.0185; + digmax := 5; + plsyax(digmax, 0); + plot1; + + -- To slave + -- The pleop ensures the eop indicator gets lit. + plsstrm(1); + plot4; + pleop; + + -- Back to master + plsstrm(0); + plot2; + plot3; + + -- To slave + plsstrm(1); + plot5; + pleop; + + -- Back to master to wait for user to advance + plsstrm(0); + pleop; + + -- Call plend to finish off. + plend; +end x14a; Property changes on: trunk/examples/ada/x14a.adb.cmake ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/examples/ada/x17a.adb.cmake =================================================================== --- trunk/examples/ada/x17a.adb.cmake (rev 0) +++ trunk/examples/ada/x17a.adb.cmake 2008-08-08 00:20:10 UTC (rev 8615) @@ -0,0 +1,188 @@ +-- $Id$ + +-- Plots a simple stripchart with four pens. + +-- Copyright (C) 2008 Jerry Bauck + +-- This file is part of PLplot. + +-- PLplot is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Library Public License as published +-- by the Free Software Foundation; either version 2 of the License, or +-- (at your option) any later version. + +-- 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 + +with + Ada.Text_IO, + Ada.Strings.Unbounded, + Ada.Numerics, + Ada.Numerics.Long_Elementary_Functions, + Ada.Numerics.Float_Random, + PLplot_Traditional, + PLplot_Auxiliary; +use + Ada.Text_IO, + Ada.Strings.Unbounded, + Ada.Numerics, + Ada.Numerics.Long_Elementary_Functions, + Ada.Numerics.Float_Random, + PLplot_Traditional, + PLplot_Auxiliary; + +-- COMMENT THIS LINE IF YOUR COMPILER DOES NOT INCLUDE THESE +-- DEFINITIONS, FOR EXAMPLE, IF IT IS NOT ADA 2005 WITH ANNEX G.3 COMPLIANCE. +--with Ada.Numerics.Long_Real_Arrays; use Ada.Numerics.Long_Real_Arrays; +@Ada_Is_2007_With_and_Use_Numerics@ + +procedure x17a is + autoy, acc : Boolean; + pl_errcode : Integer := 0; + id1 : Integer; + nsteps : Integer := 1000; + colbox, collab : Integer; + colline, styline : Integer_Array_1D(0 .. 3); + y1, y2, y3, y4, ymin, ymax, xlab, ylab : Long_Float; + t, tmin, tmax, tjump, dt, noise : Long_Float; + legline : Stripchart_Label_String_Array_Type := + (To_Unbounded_String("sum"), + To_Unbounded_String("sin"), + To_Unbounded_String("sin*noi"), + To_Unbounded_String("sin+noi")); + Random_Generator : Generator; -- From Ada.Numerics.Float_Random +begin + -- plplot initialization + -- Parse and process command line arguments + plparseopts(PL_PARSE_FULL); + + -- If db is used the plot is much more smooth. However, because of the + -- async X behaviour, one does not have a real-time scripcharter. + plsetopt("db", ""); + plsetopt("np", ""); + + -- User sets up plot completely except for window and data + -- Eventually settings in place when strip chart is created will be + -- remembered so that multiple strip charts can be used simultaneously. + + -- Specify some reasonable defaults for ymin and ymax + -- The plot will grow automatically if needed (but not shrink) + ymin := -0.1; + ymax := 0.1; + + -- Specify initial tmin and tmax -- this determines length of window. + -- Also specify maximum jump in t + -- This can accomodate adaptive timesteps + tmin := 0.0; + tmax := 10.0; + tjump := 0.3; -- percentage of plot to jump + + -- Axes options same as plbox. + -- Only automatic tick generation and label placement allowed. + -- Eventually I'll make this fancier. + colbox := 1; + collab := 3; + + styline(0) := 2; -- pens line style + styline(1) := 3; + styline(2) := 4; + styline(3) := 5; + + colline(0) := 2; -- pens color + colline(1) := 3; + colline(2) := 4; + colline(3) := 5; + + xlab := 0.0; -- legend position + ylab := 0.25; + + autoy := True; -- autoscale y + acc := True; -- don't scrip, accumulate + + -- Initialize plplot + plinit; + + pladv(0); + plvsta; + + -- Register our error variables with PLplot + -- From here on, we're handling all errors here + -- plsError(pl_errcode, errmsg); + + -- Ada note: plsError is not yet implemented in Ada. Thus, pl_errcode is + -- hardwired to 0 for now and no effective error handling is done. + + plstripc(id1, "bcnst", "bcnstv", + tmin, tmax, tjump, ymin, ymax, + xlab, ylab, + autoy, acc, + colbox, collab, + colline, styline, legline, + "t", "", "Strip chart demo"); + + -- Ada note: this would handle errors if error handling were implemented. + if pl_errcode /= 0 then + Put_Line("There was a problem which caused the program to quit."); + plend; + return; + end if; + + -- Let plplot handle errors from here on + -- plsError(NULL, NULL); + + autoy := False; -- autoscale y + acc := True; -- accumulate + + -- This is to represent a loop over time + -- Let's try a random walk process + y1 := 0.0; + y2 := 0.0; + y3 := 0.0; + y4 := 0.0; + + dt := 0.1; + + for n in 0 .. nsteps - 1 loop + -- The Ada standard requires that the delay statement have a granularity + -- of at most 20 ms but strongly recommends at most 100 microseconds. + -- We'll try 10 ms to match the C example, x17c, but in theory this + -- might fail to compile on some Ada systems. If so, the cure is to set + -- the delay to 0.02. + delay 0.01; -- wait a little (10 ms) to simulate time elapsing + t := Long_Float(n) * dt; + noise := Long_Float(Random(Random_Generator)) - 0.5; + y1 := y1 + noise; + y2 := sin(t * pi / 18.0); + y3 := y2 * noise; + y4 := y2 + noise / 3.0; + + -- There is no need for all pens to have the same number of + -- points or being equally time spaced. + if n mod 2 /= 0 then + plstripa(id1, 0, t, y1); + end if; + + if n mod 3 /= 0 then + plstripa(id1, 1, t, y2); + end if; + + if n mod 4 /= 0 then + plstripa(id1, 2, t, y3); + end if; + + if n mod 5 /= 0 then + plstripa(id1, 3, t, y4); + end if; + pleop; -- use double buffer (-db on command line) + end loop; + + -- Destroy strip chart and its memory + plstripd(id1); + plend; +end x17a; Property changes on: trunk/examples/ada/x17a.adb.cmake ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/examples/ada/xthick14a.adb.cmake =================================================================== --- trunk/examples/ada/xthick14a.adb.cmake (rev 0) +++ trunk/examples/ada/xthick14a.adb.cmake 2008-08-08 00:20:10 UTC (rev 8615) @@ -0,0 +1,371 @@ +-- $Id$ + +-- Demo of multiple stream/window capability (requires Tk or Tcl-DP). + +-- Maurice LeBrun +-- IFS, University of Texas at Austin + +-- Copyright (C) 2008 Jerry Bauck + +-- This file is part of PLplot. + +-- PLplot is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Library Public License as published +-- by the Free Software Foundation; either version 2 of the License, or +-- (at your option) any later version. + +-- 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 + +with + System, + Ada.Text_IO, + Ada.Strings, + Ada.Strings.Fixed, + Ada.Strings.Unbounded, + Ada.Numerics, + Ada.Numerics.Long_Elementary_Functions, + PLplot, + PLplot_Auxiliary; +use + Ada.Text_IO, + Ada.Numerics, + Ada.Strings, + Ada.Strings.Fixed, + Ada.Strings.Unbounded, + Ada.Numerics.Long_Elementary_Functions, + PLplot, + PLplot_Auxiliary; + +-- COMMENT THIS LINE IF YOUR COMPILER DOES NOT INCLUDE THESE +-- DEFINITIONS, FOR EXAMPLE, IF IT IS NOT ADA 2005 WITH ANNEX G.3 COMPLIANCE. +--with Ada.Numerics.Long_Real_Arrays; use Ada.Numerics.Long_Real_Arrays; +@Ada_Is_2007_With_and_Use_Numerics@ + +------------------------------------------------------------------------------ +-- Plots several simple functions from other example programs. +-- +-- This version sends the output of the first 4 plots (one page) to two +-- independent streams. +------------------------------------------------------------------------------ + +procedure xthick14a is + -- Select either TK or DP driver and use a small window + -- Using DP results in a crash at the end due to some odd cleanup problems + -- The geometry strings MUST be in writable memory + geometry_master : String := "500x410+100+200"; + geometry_slave : String := "500x410+650+200"; + driver : Unbounded_String; + digmax : Integer; + xscale, yscale, xoff, yoff : Long_Float; + xs, ys : Real_Vector(0 .. 5); + space0 : Integer_Array_1D(1 .. 1) := (Others => 0); + mark0 : Integer_Array_1D(1 .. 1) := (Others => 0); + space1 : Integer_Array_1D(1 .. 1) := (Others => 1500); + mark1 : Integer_Array_1D(1 .. 1) := (Others => 1500); + + procedure plot1 is + xmin, xmax, ymin, ymax : Long_Float; + x, y : Real_Vector(0 .. 59); + begin + for i in x'range loop + x(i) := xoff + xscale * Long_Float(i + 1) / Long_Float(x'Length); + y(i) := yoff + yscale * x(i) * x(i); + end loop; + + xmin := x(x'First); + xmax := x(x'Last); + ymin := y(y'First); + ymax := y(y'Last); + + for i in xs'range loop + xs(i) := x(i * 10 + 3); + ys(i) := y(i * 10 + 3); + end loop; + + -- 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). + Set_Pen_Color(Red); + Set_Environment(xmin, xmax, ymin, ymax, Not_Justified, Linear_Box_Plus); + Set_Pen_Color(Wheat); + Write_Labels("(x)", "(y)", "#frPLplot Example 1 - y=x#u2"); + + -- Plot the data points + Set_Pen_Color(Blue); + Draw_Points(xs, ys, 9); + + -- Draw the line through the data + Set_Pen_Color(Aquamarine); + Draw_Curve(x, y); + Flush_Output_Stream; + end plot1; + + -- ================================================================ + + + procedure plot2 is + x, y : Real_Vector(0 .. 99); + begin + -- 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). + Set_Pen_Color(Red); + Set_Environment(-2.0, 10.0, -0.4, 1.2, Not_Justified, Linear_Zero_Axes); + Set_Pen_Color(Yellow); + Write_Labels("(x)", "sin(x)/x", "#frPLplot Example 1 - Sinc Function"); + + -- Fill up the arrays + for i in x'range loop + x(i) := (Long_Float(i) - 19.0) / 6.0; + y(i) := 1.0; + if x(i) /= 0.0 then + y(i) := sin(x(i)) / x(i); + end if; + end loop; + + -- Draw the line + Set_Pen_Color(Green); + Draw_Curve(x, y); + Flush_Output_Stream; + end plot2; + + -- ================================================================ + + + procedure plot3 is + x, y : Real_Vector(0 .. 100); + begin + -- For the final graph we wish to override the default tick intervals, and + -- so do not use PLENV + + Advance_To_Subpage(Next_Subpage); + + -- Use standard viewport, and define X range from 0 to 360 degrees, Y range + -- from -1.2 to 1.2. + Set_Viewport_Standard; + Set_Viewport_World(0.0, 360.0, -1.2, 1.2); + + -- Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y. + Set_Pen_Color(Red); + Box_Around_Viewport("bcnst", 60.0, 2, "bcnstv", 0.2, 2); + + -- Superimpose a dashed line grid, with 1.5 mm marks and spaces. + Set_Line_Style(mark1, space1); + Set_Pen_Color(Yellow); + Box_Around_Viewport("g", 30.0, 0, "g", 0.2, 0); + Set_Line_Style(Default_Continuous_Line); + + Set_Pen_Color(Green); + Write_Labels("Angle (degrees)", "sine", "#frPLplot Example 1 - Sine function"); + + for i in x'range loop + x(i) := 3.6 * Long_Float(i); + y(i) := sin(x(i) * pi / 180.0); + end loop; + + Set_Pen_Color(Aquamarine); + Draw_Curve(x, y); + Flush_Output_Stream; + end plot3; + + -- ================================================================ + + + procedure plot4 is + dtr, theta, dx, dy, r : Long_Float; + x, y, x0, y0 : Real_Vector(0 .. 360); + begin + dtr := pi / 180.0; + for i in x0'range loop + x0(i) := cos(dtr * Long_Float(i)); + y0(i) := sin(dtr * Long_Float(i)); + end loop; + + -- Set up viewport and window, but do not draw box + Set_Environment(-1.3, 1.3, -1.3, 1.3, Justified, No_Box); + for i in 1 .. 10 loop + for j in x'range loop + x(j) := 0.1 * Long_Float(i) * x0(j); + y(j) := 0.1 * Long_Float(i) * y0(j); + end loop; + + -- Draw circles for polar grid + Draw_Curve(x, y); + end loop; + + Set_Pen_Color(Yellow); + for i in 0 .. 11 loop + theta := 30.0 * Long_Float(i); + dx := cos(dtr * theta); + dy := sin(dtr * theta); + + -- Draw radial spokes for polar grid + Draw_Line(0.0, 0.0, dx, dy); + + -- Write labels for angle + -- Slightly off zero to avoid floating point logic flips at 90 and 270 deg. + if dx >= -0.00001 then + Write_Text_World(dx, dy, dx, dy, -0.15, Trim(Integer'image(Integer(theta)), Left)); + else + Write_Text_World(dx, dy, -dx, -dy, 1.15, Trim(Integer'image(Integer(theta)), Left)); + end if; + end loop; + + -- Draw the graph + for i in x'range loop + r := sin(dtr * Long_Float(5 * i)); + x(i) := x0(i) * r; + y(i) := y0(i) * r; + end loop; + Set_Pen_Color(Green); + Draw_Curve(x, y); + + Set_Pen_Color(Aquamarine); + Write_Text_Viewport("t", 2.0, 0.5, 0.5, "#frPLplot Example 3 - r(#gh)=sin 5#gh"); + Flush_Output_Stream; + end plot4; + + -- ================================================================ + + + -- Demonstration of contour plotting + procedure plot5 is + XPTS : constant Integer := 35; + YPTS : constant Integer := 46; + -- Transformation function + XSPA : Long_Float := 2.0 / Long_Float(XPTS - 1); + YSPA : Long_Float := 2.0 / Long_Float(YPTS - 1); + tr : Real_Vector(0 .. 5) := (XSPA, 0.0, -1.0, 0.0, YSPA, -1.0); + xx, yy : Long_Float; + mark : Integer_Array_1D(1 .. 1) := (Others => 1500); + space : Integer_Array_1D(1 .. 1) := (Others => 1500); + z, w : Real_Matrix(0 .. XPTS -1, 0 .. YPTS - 1); + clevel : Real_Vector(0 .. 10) := + (-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0); + + procedure mypltr -- This spec is necessary to accommodate pragma Convention(C...). + (x, y : Long_Float; + tx, ty : out Long_Float; + pltr_data : PLpointer); + pragma Convention(Convention => C, Entity => mypltr); + + procedure mypltr + (x, y : Long_Float; + tx, ty : out Long_Float; + pltr_data : PLpointer) + is + begin + tx := tr(0) * x + tr(1) * y + tr(2); + ty := tr(3) * x + tr(4) * y + tr(5); + end mypltr; + + begin + for i in z'range(1) loop + xx := Long_Float(i - (XPTS / 2)) / Long_Float(XPTS / 2); + for j in z'range(2) loop + yy := Long_Float(j - (YPTS / 2)) / Long_Float(YPTS / 2) - 1.0; + z(i, j) := xx * xx - yy * yy; + w(i, j) := 2.0 * xx * yy; + end loop; + end loop; + + Set_Environment(-1.0, 1.0, -1.0, 1.0, Not_Justified, Linear_Box_Plus); + Set_Pen_Color(Yellow); + Contour_Plot(z, 1, XPTS, 1, YPTS, clevel, mypltr'Unrestricted_Access, System.Null_Address); + Set_Line_Style(mark, space); + Set_Pen_Color(Green); + Contour_Plot(w, 1, XPTS, 1, YPTS, clevel, mypltr'Unrestricted_Access, System.Null_Address); + Set_Pen_Color(Red); + Write_Labels("X Coordinate", "Y Coordinate", "Streamlines of flow"); + Flush_Output_Stream; + end plot5; + + +begin + -- plplot initialization + -- Parse and process command line arguments + Parse_Command_Line_Arguments(Parse_Full); + + driver := To_Unbounded_String(Get_Device_Name); + + Put_Line("Demo of multiple output streams via the " & Get_Device_Name & "driver."); + Put_Line("Running with the second stream as slave to the first."); + New_Line; + + -- Set up first stream + Set_Command_Line_Option("geometry", geometry_master); + + Set_Device_Name(To_String(driver)); + Set_Number_Of_Subpages(2, 2); + Initialize_PLplot; + + -- Start next stream + Set_Stream_Number(1); + + -- Turn off pause to make this a slave (must follow master) + Set_Command_Line_Option("geometry", geometry_slave); + Set_Pause(False); + Set_Device_Name(To_String(driver)); + Initialize_PLplot; + + -- Set up the data & plot + -- Original case + Set_Stream_Number(0); + + xscale := 6.0; + yscale := 1.0; + xoff := 0.0; + yoff := 0.0; + plot1; + + -- Set up the data & plot + xscale := 1.0; + yscale := 1.0e+6; + plot1; + + -- Set up the data & plot + xscale := 1.0; + yscale := 1.0e-6; + digmax := 2; + Set_Floating_Point_Display_Y(digmax, 0); + plot1; + + -- Set up the data & plot + xscale := 1.0; + yscale := 0.0014; + yoff := 0.0185; + digmax := 5; + Set_Floating_Point_Display_Y(digmax, 0); + plot1; + + -- To slave + -- The Eject_Current_Page ensures the eop indicator gets lit. + Set_Stream_Number(1); + plot4; + Eject_Current_Page; + + -- Back to master + Set_Stream_Number(0); + plot2; + plot3; + + -- To slave + Set_Stream_Number(1); + plot5; + Eject_Current_Page; + + -- Back to master to wait for user to advance + Set_Stream_Number(0); + Eject_Current_Page; + + -- Call End_PLplot to finish off. + End_PLplot; +end xthick14a; Property changes on: trunk/examples/ada/xthick14a.adb.cmake ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/examples/ada/xthick17a.adb.cmake =================================================================== --- trunk/examples/ada/xthick17a.adb.cmake (rev 0) +++ trunk/examples/ada/xthick17a.adb.cmake 2008-08-08 00:20:10 UTC (rev 8615) @@ -0,0 +1,188 @@ +-- $Id$ + +-- Plots a simple stripchart with four pens. + +-- Copyright (C) 2008 Jerry Bauck + +-- This file is part of PLplot. + +-- PLplot is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Library Public License as published +-- by the Free Software Foundation; either version 2 of the License, or +-- (at your option) any later version. + +-- 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 + +with + Ada.Text_IO, + Ada.Strings.Unbounded, + Ada.Numerics, + Ada.Numerics.Long_Elementary_Functions, + Ada.Numerics.Float_Random, + PLplot, + PLplot_Auxiliary; +use + Ada.Text_IO, + Ada.Strings.Unbounded, + Ada.Numerics, + Ada.Numerics.Long_Elementary_Functions, + Ada.Numerics.Float_Random, + PLplot, + PLplot_Auxiliary; + +-- COMMENT THIS LINE IF YOUR COMPILER DOES NOT INCLUDE THESE +-- DEFINITIONS, FOR EXAMPLE, IF IT IS NOT ADA 2005 WITH ANNEX G.3 COMPLIANCE. +--with Ada.Numerics.Long_Real_Arrays; use Ada.Numerics.Long_Real_Arrays; +@Ada_Is_2007_With_and_Use_Numerics@ + +procedure xthick17a is + autoy, acc : Boolean; + pl_errcode : Integer := 0; + id1 : Integer; + nsteps : Integer := 1000; + colbox, collab : Integer; + colline, styline : Integer_Array_1D(0 .. 3); + y1, y2, y3, y4, ymin, ymax, xlab, ylab : Long_Float; + t, tmin, tmax, tjump, dt, noise : Long_Float; + legline : Stripchart_Label_String_Array_Type := + (To_Unbounded_String("sum"), + To_Unbounded_String("sin"), + To_Unbounded_String("sin*noi"), + To_Unbounded_String("sin+noi")); + Random_Generator : Generator; -- From Ada.Numerics.Float_Random +begin + -- plplot initialization + -- Parse and process command line arguments + Parse_Command_Line_Arguments(Parse_Full); + + -- If db is used the plot is much more smooth. However, because of the + -- async X behaviour, one does not have a real-time scripcharter. + Set_Command_Line_Option("db", ""); + Set_Command_Line_Option("np", ""); + + -- User sets up plot completely except for window and data + -- Eventually settings in place when strip chart is created will be + -- remembered so that multiple strip charts can be used simultaneously. + + -- Specify some reasonable defaults for ymin and ymax + -- The plot will grow automatically if needed (but not shrink) + ymin := -0.1; + ymax := 0.1; + + -- Specify initial tmin and tmax -- this determines length of window. + -- Also specify maximum jump in t + -- This can accomodate adaptive timesteps + tmin := 0.0; + tmax := 10.0; + tjump := 0.3; -- percentage of plot to jump + + -- Axes options same as Box_Around_Viewport. + -- Only automatic tick generation and label placement allowed. + -- Eventually I'll make this fancier. + colbox := 1; + collab := 3; + + styline(0) := 2; -- pens line style + styline(1) := 3; + styline(2) := 4; + styline(3) := 5; + + colline(0) := 2; -- pens color + colline(1) := 3; + colline(2) := 4; + colline(3) := 5; + + xlab := 0.0; -- legend position + ylab := 0.25; + + autoy := True; -- autoscale y + acc := True; -- don't scrip, accumulate + + -- Initialize plplot + Initialize_PLplot; + + Advance_To_Subpage(Next_Subpage); + Set_Viewport_Standard; + + -- Register our error variables with PLplot + -- From here on, we're handling all errors here + -- plsError(pl_errcode, errmsg); + + -- Ada note: plsError is not yet implemented in Ada. Thus, pl_errcode is + -- hardwired to 0 for now and no effective error handling is done. + + Create_Stripchart(id1, "bcnst", "bcnstv", + tmin, tmax, tjump, ymin, ymax, + xlab, ylab, + autoy, acc, + colbox, collab, + colline, styline, legline, + "t", "", "Strip chart demo"); + + -- Ada note: this would handle errors if error handling were implemented. + if pl_errcode /= 0 then + Put_Line("There was a problem which caused the program to quit."); + End_PLplot; + return; + end if; + + -- Let plplot handle errors from here on + -- plsError(NULL, NULL); + + autoy := False; -- autoscale y + acc := True; -- accumulate + + -- This is to represent a loop over time + -- Let's try a random walk process + y1 := 0.0; + y2 := 0.0; + y3 := 0.0; + y4 := 0.0; + + dt := 0.1; + + for n in 0 .. nsteps - 1 loop + -- The Ada standard requires that the delay statement have a granularity + -- of at most 20 ms but strongly recommends at most 100 microseconds. + -- We'll try 10 ms to match the C example, x17c, but in theory this + -- might fail to compile on some Ada systems. If so, the cure is to set + -- the delay to 0.02. + delay 0.01; -- wait a little (10 ms) to simulate time elapsing + t := Long_Float(n) * dt; + noise := Long_Float(Random(Random_Generator)) - 0.5; + y1 := y1 + noise; + y2 := sin(t * pi / 18.0); + y3 := y2 * noise; + y4 := y2 + noise / 3.0; + + -- There is no need for all pens to have the same number of + -- points or being equally time spaced. + if n mod 2 /= 0 then + Update_Stripchart(id1, 0, t, y1); + end if; + + if n mod 3 /= 0 then + Update_Stripchart(id1, 1, t, y2); + end if; + + if n mod 4 /= 0 then + Update_Stripchart(id1, 2, t, y3); + end if; + + if n mod 5 /= 0 then + Update_Stripchart(id1, 3, t, y4); + end if; + Eject_Current_Page; -- use double buffer (-db on command line) + end loop; + + -- Destroy strip chart and its memory + Delete_Stripchart(id1); + End_PLplot; +end xthick17a; Property changes on: trunk/examples/ada/xthick17a.adb.cmake ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/plplot_test/test_ada.sh.in =================================================================== --- trunk/plplot_test/test_ada.sh.in 2008-08-07 22:04:50 UTC (rev 8614) +++ trunk/plplot_test/test_ada.sh.in 2008-08-08 00:20:10 UTC (rev 8615) @@ -29,10 +29,10 @@ # Do the standard non-interactive examples. for index in \ 01 02 03 04 05 06 07 08 09 \ -10 11 12 13 15 16 18 19 \ +10 11 12 13 14 15 16 17 18 19 \ 21 22 23 24 25 26 27 28 29 30 \ thick01 thick02 thick03 thick04 thick05 thick06 thick07 thick08 thick09 \ -thick10 thick11 thick12 thick13 thick15 thick16 thick18 thick19 \ +thick10 thick11 thick12 thick13 thick14 thick15 thick16 thick17 thick18 thick19 \ thick21 thick22 thick23 thick24 thick25 thick26 thick27 thick28 thick29 thick30; do $adadir/x${index}a -dev $device -o ${OUTPUT_DIR}/x${index}a.$dsuffix $options 2> test.error status_code=$? This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-11 07:06:27
|
Revision: 8618 http://plplot.svn.sourceforge.net/plplot/?rev=8618&view=rev Author: andrewross Date: 2008-08-11 07:06:35 +0000 (Mon, 11 Aug 2008) Log Message: ----------- Automatically build and test f77 examples 24 25 and 27. Fix illegal comment in example 25 which prevents compilation with gfortran. Modified Paths: -------------- trunk/examples/f77/CMakeLists.txt trunk/examples/f77/x25f.fm4 trunk/plplot_test/test_f77.sh.in Modified: trunk/examples/f77/CMakeLists.txt =================================================================== --- trunk/examples/f77/CMakeLists.txt 2008-08-11 04:31:20 UTC (rev 8617) +++ trunk/examples/f77/CMakeLists.txt 2008-08-11 07:06:35 UTC (rev 8618) @@ -45,6 +45,9 @@ "21" "22" "23" +"24" +"25" +"27" "28" "29" "30" Modified: trunk/examples/f77/x25f.fm4 =================================================================== --- trunk/examples/f77/x25f.fm4 2008-08-11 04:31:20 UTC (rev 8617) +++ trunk/examples/f77/x25f.fm4 2008-08-11 07:06:35 UTC (rev 8618) @@ -81,7 +81,7 @@ npts = 10 endif if ( j .eq. 4 ) then -/* Polygon 2: a square with punctures - reversed direction */ +C Polygon 2: a square with punctures - reversed direction x0(10) = -100 ; y0(10) = -100 x0(9) = -100 ; y0(9) = -80 x0(8) = 80 ; y0(8) = 0 Modified: trunk/plplot_test/test_f77.sh.in =================================================================== --- trunk/plplot_test/test_f77.sh.in 2008-08-11 04:31:20 UTC (rev 8617) +++ trunk/plplot_test/test_f77.sh.in 2008-08-11 07:06:35 UTC (rev 8618) @@ -49,7 +49,7 @@ # Do the standard non-interactive examples. # skip 14 and 17 because they are interactive. - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 28 29 30 ; do + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 24 25 27 28 29 30 ; do $f77dir/x${index}f -dev $device -o ${OUTPUT_DIR}/x${index}f.$dsuffix $options 2> test.error status_code=$? cat test.error @@ -88,7 +88,7 @@ # Do the standard non-interactive examples. # skip 14 and 17 because they are interactive. - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 28 29 30 ; do + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 24 25 27 28 29 30 ; do $f77dir/x${index}f <<EOF 2> test.error $device ${OUTPUT_DIR}/x${index}f.$dsuffix This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-11 22:01:24
|
Revision: 8630 http://plplot.svn.sourceforge.net/plplot/?rev=8630&view=rev Author: andrewross Date: 2008-08-11 22:01:29 +0000 (Mon, 11 Aug 2008) Log Message: ----------- Add java version of example 27. Modified Paths: -------------- trunk/examples/java/CMakeLists.txt trunk/plplot_test/test_java.sh.in Added Paths: ----------- trunk/examples/java/x27.java Modified: trunk/examples/java/CMakeLists.txt =================================================================== --- trunk/examples/java/CMakeLists.txt 2008-08-11 21:42:42 UTC (rev 8629) +++ trunk/examples/java/CMakeLists.txt 2008-08-11 22:01:29 UTC (rev 8630) @@ -45,6 +45,7 @@ "24" "25" "26" +"27" "28" "29" "30" Added: trunk/examples/java/x27.java =================================================================== --- trunk/examples/java/x27.java (rev 0) +++ trunk/examples/java/x27.java 2008-08-11 22:01:29 UTC (rev 8630) @@ -0,0 +1,174 @@ +//---------------------------------------------------------------------------// +// $Id:$ +// Drawing "spirograph" curves - epitrochoids, cycolids, roulettes +//---------------------------------------------------------------------------// +// +//---------------------------------------------------------------------------// +// Copyright (C) 2007 Arjen Markus +// Copyright (C) 2008 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 27 in Java. +//---------------------------------------------------------------------------// + +package plplot.examples; + +import plplot.core.*; + +import java.lang.Math; + +class x27 { + + PLStream pls = new PLStream(); + + public static void main( String[] args ) + { + new x27( args ); + } + + //-------------------------------------------------------------------- + // Generates two kinds of plots: + // - construction of a cycloid (animated) + // - series of epitrochoids and hypotrochoids + //-------------------------------------------------------------------- + + public x27( String[] args) + { + // R, r, p, N + double params[][] = { + {21.0, 7.0, 7.0, 3.0}, // Deltoid + {21.0, 7.0, 10.0, 3.0}, + {21.0, -7.0, 10.0, 3.0}, + {20.0, 3.0, 7.0, 20.0}, + {20.0, 3.0, 10.0, 20.0}, + {20.0, -3.0, 10.0, 20.0}, + {20.0, 13.0, 7.0, 20.0}, + {20.0, 13.0, 20.0, 20.0}, + {20.0,-13.0, 20.0, 20.0} } ; + + int i ; + + // plplot initialization + + // Parse and process command line arguments + pls.parseopts(args, PLStream.PL_PARSE_FULL | PLStream.PL_PARSE_NOPROGRAM); + + // Initialize plplot + pls.init(); + + // Illustrate the construction of a cycloid + cycloid(); + + // Loop over the various curves + // First an overview, then all curves one by one + pls.ssub(3, 3) ; // Three by three window + + for ( i = 0; i < 9; i ++ ) { + pls.adv(0) ; + pls.vpor( 0.0, 1.0, 0.0, 1.0 ) ; + spiro( params[i] ) ; + } + + pls.adv(0); + pls.ssub(1, 1) ; // One window per curve + + for ( i = 0; i < 9; i ++ ) { + pls.adv(0) ; + pls.vpor( 0.0, 1.0, 0.0, 1.0 ) ; + spiro( params[i] ) ; + } + + pls.end(); + + } + + // =============================================================== + + void cycloid() + { + // TODO + } + + // =============================================================== + + void spiro( double params[] ) + { + int NPNT = 20000; + double xcoord[]; + double ycoord[]; + + int windings ; + int steps ; + int i ; + double phi ; + double phiw ; + double dphi ; + double xmin ; + double xmax ; + double ymin ; + double ymax ; + double scale ; + + // Fill the coordinates + + windings = (int) params[3] ; + steps = NPNT/windings ; + dphi = 8.0*Math.acos(-1.0)/(double)steps ; + + xmin = 0.0 ; // This initialisation is safe! + xmax = 0.0 ; + ymin = 0.0 ; + ymax = 0.0 ; + + xcoord = new double[windings*steps+1]; + ycoord = new double[windings*steps+1]; + + for ( i = 0; i <= windings*steps ; i ++ ) { + phi = (double)i * dphi ; + phiw = (params[0]-params[1])/params[1]*phi ; + xcoord[i] = (params[0]-params[1])*Math.cos(phi) + params[2]*Math.cos(phiw) ; + ycoord[i] = (params[0]-params[1])*Math.sin(phi) - params[2]*Math.sin(phiw) ; + + if ( xmin > xcoord[i] ) xmin = xcoord[i] ; + if ( xmax < xcoord[i] ) xmax = xcoord[i] ; + if ( ymin > ycoord[i] ) ymin = ycoord[i] ; + if ( ymax < ycoord[i] ) ymax = ycoord[i] ; + } + + if ( xmax-xmin > ymax-ymin ) { + scale = xmax - xmin ; + } else { + scale = ymax - ymin ; + } + xmin = - 0.65 * scale ; + xmax = 0.65 * scale ; + ymin = - 0.65 * scale ; + ymax = 0.65 * scale ; + + pls.wind( xmin, xmax, ymin, ymax ) ; + + pls.col0(1); + pls.line( xcoord, ycoord ) ; + + } + +} + +//---------------------------------------------------------------------------// +// End of x27.java +//---------------------------------------------------------------------------// Property changes on: trunk/examples/java/x27.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/plplot_test/test_java.sh.in =================================================================== --- trunk/plplot_test/test_java.sh.in 2008-08-11 21:42:42 UTC (rev 8629) +++ trunk/plplot_test/test_java.sh.in 2008-08-11 22:01:29 UTC (rev 8630) @@ -42,7 +42,7 @@ PLPLOT_CLASSPATH=@JAVADATA_HARDDIR@/plplot.jar fi -for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 20 21 22 23 24 25 26 28 29 30; do +for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 20 21 22 23 24 25 26 27 28 29 30; do if test "@WIN32@" = "1"; then java -classpath ${PLPLOT_CLASSPATH} ${JAVA_TEST_OPTS} plplot.examples.x${index} -dev $device -o ${OUTPUT_DIR}/x${index}j.$dsuffix $options 2> test.error else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-12 11:37:06
|
Revision: 8633 http://plplot.svn.sourceforge.net/plplot/?rev=8633&view=rev Author: andrewross Date: 2008-08-12 11:37:16 +0000 (Tue, 12 Aug 2008) Log Message: ----------- Add example 26 to set of standard tests for f77. Fix missing space in the title labels in x26. Results now identical to C version. Modified Paths: -------------- trunk/examples/f77/x26f.fm4 trunk/plplot_test/test_f77.sh.in Modified: trunk/examples/f77/x26f.fm4 =================================================================== --- trunk/examples/f77/x26f.fm4 2008-08-12 06:58:28 UTC (rev 8632) +++ trunk/examples/f77/x26f.fm4 2008-08-12 11:37:16 UTC (rev 8633) @@ -101,8 +101,8 @@ data (title_label(i) ,i=1,nolangs) / & 'Single Pole Low-Pass Filter', - & 'Однополюсный Низко-ЧастотныйФил\xD1 - &\x8Cтр'/ + & 'Однополюсный Низко-Частотный Фил + &ьтр'/ data (line_label(i) ,i=1,nolangs) / & '-20 dB/decade', Modified: trunk/plplot_test/test_f77.sh.in =================================================================== --- trunk/plplot_test/test_f77.sh.in 2008-08-12 06:58:28 UTC (rev 8632) +++ trunk/plplot_test/test_f77.sh.in 2008-08-12 11:37:16 UTC (rev 8633) @@ -49,7 +49,7 @@ # Do the standard non-interactive examples. # skip 14 and 17 because they are interactive. - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 24 25 27 28 29 30 ; do + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do $f77dir/x${index}f -dev $device -o ${OUTPUT_DIR}/x${index}f.$dsuffix $options 2> test.error status_code=$? cat test.error @@ -88,7 +88,7 @@ # Do the standard non-interactive examples. # skip 14 and 17 because they are interactive. - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 24 25 27 28 29 30 ; do + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do $f77dir/x${index}f <<EOF 2> test.error $device ${OUTPUT_DIR}/x${index}f.$dsuffix This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-12 13:15:05
|
Revision: 8634 http://plplot.svn.sourceforge.net/plplot/?rev=8634&view=rev Author: andrewross Date: 2008-08-12 13:15:10 +0000 (Tue, 12 Aug 2008) Log Message: ----------- Add octave version of example 27. Modified Paths: -------------- trunk/plplot_test/test_octave.sh.in Added Paths: ----------- trunk/bindings/octave/demos/x27c.m Added: trunk/bindings/octave/demos/x27c.m =================================================================== --- trunk/bindings/octave/demos/x27c.m (rev 0) +++ trunk/bindings/octave/demos/x27c.m 2008-08-12 13:15:10 UTC (rev 8634) @@ -0,0 +1,141 @@ +## $Id:$ +## +## Drawing "spirograph" curves - epitrochoids, cycolids, roulettes +## +## Copyright (C) 2007 Arjen Markus +## Copyright (C) 2008 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 General Library Public License as published +## by the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## 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 +## + + + +1; + +function ix27c + +##--------------------------------------------------------------------------*\ +## Generates two kinds of plots: +## - construction of a cycloid (animated) +## - series of epitrochoids and hypotrochoids +##--------------------------------------------------------------------------*/ + + ## R, r, p, N + params = [ + 21.0, 7.0, 7.0, 3.0; ## Deltoid + 21.0, 7.0, 10.0, 3.0; + 21.0, -7.0, 10.0, 3.0; + 20.0, 3.0, 7.0, 20.0; + 20.0, 3.0, 10.0, 20.0; + 20.0, -3.0, 10.0, 20.0; + 20.0, 13.0, 7.0, 20.0; + 20.0, 13.0, 20.0, 20.0; + 20.0,-13.0, 20.0, 20.0]; + + if (!exist("plinit")) + plplot_stub + endif + + if(isempty(sprintf("%s",plgdev'))) + plsdev("xwin"); + endif + + ## Parse and process command line arguments + + ## (void) plparseopts(&argc, argv, PL_PARSE_FULL); + + ## Initialize plplot + plinit(); + + ## Illustrate the construction of a cycloid + + cycloid(); + + ## Loop over the various curves + ## First an overview, then all curves one by one + + plssub(3, 3); ## Three by three window + + for i = 1:9 + pladv(0); + plvpor( 0.0, 1.0, 0.0, 1.0 ); + spiro( params(i,:) ); + endfor + + pladv(0); + plssub(1, 1); ## One window per curve + + for i=1:9 + pladv(0); + plvpor( 0.0, 1.0, 0.0, 1.0 ); + spiro( params(i,:) ); + endfor + + ## Don't forget to call plend() to finish off! + + plend1(); +end + +## =============================================================== + +function cycloid() + ## TODO +endfunction + +## =============================================================== + +function spiro(params) + + NPNT=20000; + + ## Fill the coordinates + + windings = floor(params(4)); + steps = floor(NPNT/windings); + dphi = 8.0*acos(-1.0)/steps; + + xmin = 0.0; ## This initialisation is safe! + xmax = 0.0; + ymin = 0.0; + ymax = 0.0; + + i = (0:windings*steps)'; + phi = i*dphi; + phiw = (params(1)-params(2))/params(2)*phi; + xcoord = (params(1)-params(2))*cos(phi) + params(3)*cos(phiw); + ycoord = (params(1)-params(2))*sin(phi) - params(3)*sin(phiw); + + xmin = min(xcoord); + xmax = max(xcoord); + ymin = min(ycoord); + ymax = max(ycoord); + + scale = max(xmax-xmin,ymax-ymin); + xmin = - 0.65 * scale; + xmax = 0.65 * scale; + ymin = - 0.65 * scale; + ymax = 0.65 * scale; + + plwind( xmin, xmax, ymin, ymax ); + + plcol0(1); + plline( xcoord, ycoord ); + +endfunction +## Log-linear plot. + +ix27c Property changes on: trunk/bindings/octave/demos/x27c.m ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/plplot_test/test_octave.sh.in =================================================================== --- trunk/plplot_test/test_octave.sh.in 2008-08-12 11:37:16 UTC (rev 8633) +++ trunk/plplot_test/test_octave.sh.in 2008-08-12 13:15:10 UTC (rev 8634) @@ -62,7 +62,7 @@ #(and should probably be dropped anyway since the map stuff is not #in the API that is supposed to be common to all front ends.) failed = []; -for i=[1:13 15 16 18 20:26 28:30 ]; +for i=[1:13 15 16 18 20:30 ]; cmd = sprintf("x%.2dc",i); t = split("$options", "-"); t(1,:)=""; for j=1:rows(t) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-13 12:04:49
|
Revision: 8637 http://plplot.svn.sourceforge.net/plplot/?rev=8637&view=rev Author: andrewross Date: 2008-08-13 12:04:56 +0000 (Wed, 13 Aug 2008) Log Message: ----------- Small modifications to example 21 to avoid rounding errors and produce consistent results with different languages. Modified Paths: -------------- trunk/bindings/octave/demos/x21c.m trunk/examples/ada/x21a.adb.cmake trunk/examples/c/x21c.c trunk/examples/c++/x21.cc trunk/examples/f77/x21f.fm4 trunk/examples/f95/x21f.f90 trunk/examples/java/x21.java Modified: trunk/bindings/octave/demos/x21c.m =================================================================== --- trunk/bindings/octave/demos/x21c.m 2008-08-12 22:22:00 UTC (rev 8636) +++ trunk/bindings/octave/demos/x21c.m 2008-08-13 12:04:56 UTC (rev 8637) @@ -50,7 +50,7 @@ pts = 500; xp = 25; yp = 20; - nl = 15; + nl = 16; knn_order = 20; threshold = 1.001; wmin = -1e3; @@ -147,13 +147,14 @@ lzM = max(max(zg)); lzm = min(min(zg)); + lzm = min(lzm, zmin)-0.01; + lzM = max(lzM, zmax)+0.01; + plcol0(1); pladv(alg); if (k == 0) - lzm = min(lzm, zmin); - lzM = max(lzM, zmax); i = (0:nl-1)'; clev = lzm + (lzM-lzm)/(nl-1)*i; @@ -178,7 +179,7 @@ ## plw3d(1., 1., 1., xm, xM, ym, yM, zmin, zmax, 30, -60); ## - plw3d(1., 1., 1., xm, xM, ym, yM, lzm, lzM, 30, -40); + plw3d(1., 1., 1., xm, xM, ym, yM, lzm, lzM, 30., -40.); plbox3("bntu", "X", 0.0, 0, "bntu", "Y", 0.0, 0, "bcdfntu", "Z", 0.5, 0); Modified: trunk/examples/ada/x21a.adb.cmake =================================================================== --- trunk/examples/ada/x21a.adb.cmake 2008-08-12 22:22:00 UTC (rev 8636) +++ trunk/examples/ada/x21a.adb.cmake 2008-08-13 12:04:56 UTC (rev 8637) @@ -59,7 +59,7 @@ pts : Integer := 500; xp : Integer := 25; yp : Integer := 20; - nl : Integer := 15; + nl : Integer := 16; knn_order : Integer := 20; threshold : Long_Float := 1.001; wmin : Long_Float := -1.0e3; @@ -239,12 +239,16 @@ lzm := Matrix_Min(zg); lzMM := Matrix_Max(zg); + lzm := Vector_Min((lzm, zmin)); + lzMM := Vector_Max((lzMM, zmax)); + + lzm := lzm - 0.01; + lzMM := lzMM + 0.01; + plcol0(1); pladv(alg); if k = 0 then - lzm := Vector_Min((lzm, zmin)); - lzMM := Vector_Max((lzMM, zmax)); for i in 0 .. nl - 1 loop clev(i) := lzm + (lzMM - lzm) / Long_Float(nl-1) * Long_Float(i); end loop; Modified: trunk/examples/c/x21c.c =================================================================== --- trunk/examples/c/x21c.c 2008-08-12 22:22:00 UTC (rev 8636) +++ trunk/examples/c/x21c.c 2008-08-13 12:04:56 UTC (rev 8637) @@ -37,7 +37,7 @@ static PLINT pts = 500; static PLINT xp = 25; static PLINT yp = 20; -static PLINT nl = 15; +static PLINT nl = 16; static int knn_order = 20; static PLFLT threshold = 1.001; static PLFLT wmin = -1e3; @@ -252,13 +252,20 @@ plMinMax2dGrid(zg, xp, yp, &lzM, &lzm); + lzm = MIN(lzm, zmin); + lzM = MAX(lzM, zmax); + + /* Increase limits slightly to prevent spurious contours + due to rounding errors */ + lzm = lzm-0.01; + lzM = lzM+0.01; + plcol0(1); + pladv(alg); if (k == 0) { - lzm = MIN(lzm, zmin); - lzM = MAX(lzM, zmax); for (i=0; i<nl; i++) clev[i] = lzm + (lzM-lzm)/(nl-1)*i; Modified: trunk/examples/c++/x21.cc =================================================================== --- trunk/examples/c++/x21.cc 2008-08-12 22:22:00 UTC (rev 8636) +++ trunk/examples/c++/x21.cc 2008-08-13 12:04:56 UTC (rev 8637) @@ -84,7 +84,7 @@ PLINT x21::pts = 500; PLINT x21::xp = 25; PLINT x21::yp = 20; -PLINT x21::nl = 15; +PLINT x21::nl = 16; PLINT x21::knn_order = 20; PLFLT x21::threshold = 1.001; PLFLT x21::wmin = -1e3; @@ -272,13 +272,17 @@ pls->MinMax2dGrid(zg, xp, yp, &lzM, &lzm); + lzm = MIN(lzm, zmin); + lzM = MAX(lzM, zmax); + + lzm = lzm-0.01; + lzM = lzM+0.01; + pls->col0(1); pls->adv(alg); if (k == 0) { - lzm = MIN(lzm, zmin); - lzM = MAX(lzM, zmax); for (i=0; i<nl; i++) clev[i] = lzm + (lzM-lzm)/(nl-1)*i; @@ -304,7 +308,7 @@ * plw3d(1., 1., 1., xm, xM, ym, yM, zmin, zmax, 30, -60); */ - pls->w3d(1., 1., 1., xm, xM, ym, yM, lzm, lzM, 30, -40); + pls->w3d(1., 1., 1., xm, xM, ym, yM, lzm, lzM, 30., -40.); pls->box3("bntu", "X", 0.0, 0, "bntu", "Y", 0.0, 0, "bcdfntu", "Z", 0.5, 0); Modified: trunk/examples/f77/x21f.fm4 =================================================================== --- trunk/examples/f77/x21f.fm4 2008-08-12 22:22:00 UTC (rev 8636) +++ trunk/examples/f77/x21f.fm4 2008-08-13 12:04:56 UTC (rev 8637) @@ -53,7 +53,7 @@ parameter (pts = 500) parameter (xp = 25) parameter (yp = 20) - parameter (nl = 15) + parameter (nl = 16) parameter (knn_order = 20) parameter (threshold = 1.001d0) parameter (wmin = -1d3) @@ -200,15 +200,19 @@ enddo endif - call a2mnmx(zg, xp, yp, lzmin, lzmax, xp); + call a2mnmx(zg, xp, yp, lzmin, lzmax, xp) + lzmin = min(lzmin, zmin) + lzmax = max(lzmax, zmax) + + lzmin = lzmin - 0.01d0 + lzmax = lzmax + 0.01d0 + call plcol0(1) call pladv(alg) if (k.eq.1) then - lzmin = min(lzmin, zmin) - lzmax = max(lzmax, zmax) do i=1,nl clev(i) = lzmin + (lzmax-lzmin)/(nl-1.d0)*(i-1.d0); enddo Modified: trunk/examples/f95/x21f.f90 =================================================================== --- trunk/examples/f95/x21f.f90 2008-08-12 22:22:00 UTC (rev 8636) +++ trunk/examples/f95/x21f.f90 2008-08-13 12:04:56 UTC (rev 8637) @@ -48,7 +48,7 @@ parameter (pts = 500) parameter (xp = 25) parameter (yp = 20) - parameter (nl = 15) + parameter (nl = 16) parameter (knn_order = 20) parameter (threshold = 1.001_plflt) parameter (wmin = -1e3_plflt) @@ -194,15 +194,19 @@ enddo endif - call a2mnmx(zg, xp, yp, lzmin, lzmax, xp); + call a2mnmx(zg, xp, yp, lzmin, lzmax, xp) + lzmin = min(lzmin, zmin) + lzmax = max(lzmax, zmax) + + lzmin = lzmin - 0.01_plflt + lzmax = lzmax + 0.01_plflt + call plcol0(1) call pladv(alg) if (k.eq.1) then - lzmin = min(lzmin, zmin) - lzmax = max(lzmax, zmax) do i=1,nl clev(i) = lzmin + (lzmax-lzmin)/(nl-1._plflt)*(i-1._plflt); enddo Modified: trunk/examples/java/x21.java =================================================================== --- trunk/examples/java/x21.java 2008-08-12 22:22:00 UTC (rev 8636) +++ trunk/examples/java/x21.java 2008-08-13 12:04:56 UTC (rev 8637) @@ -43,7 +43,7 @@ static int pts = 500; static int xp = 25; static int yp = 20; - static int nl = 15; + static int nl = 16; static int knn_order = 20; static double threshold = 1.001; static double wmin = -1e3; @@ -102,7 +102,7 @@ // &nl, // PL_OPT_INT, // "-nlevel ", - // "Specify number of contour levels [15]" }, + // "Specify number of contour levels [16]" }, // { // "knn_order", // NULL, @@ -254,14 +254,16 @@ lzm = new double[1]; lzM = new double[1]; pls.minMax2dGrid(zg, lzM, lzm); + lzm[0] = Math.min(lzm[0], zmin); + lzM[0] = Math.max(lzM[0], zmax); + lzm[0] = lzm[0] - 0.01; + lzM[0] = lzM[0] + 0.01; pls.col0(1); pls.adv(alg); if (k == 0) { - lzm[0] = Math.min(lzm[0], zmin); - lzM[0] = Math.max(lzM[0], zmax); for (i=0; i<nl; i++) clev[i] = lzm[0] + (lzM[0]-lzm[0])/(nl-1)*i; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-13 13:25:24
|
Revision: 8640 http://plplot.svn.sourceforge.net/plplot/?rev=8640&view=rev Author: andrewross Date: 2008-08-13 13:25:33 +0000 (Wed, 13 Aug 2008) Log Message: ----------- Add python version of example 27. Modified Paths: -------------- trunk/examples/python/CMakeLists.txt trunk/plplot_test/test_python.sh.in Added Paths: ----------- trunk/examples/python/x27 trunk/examples/python/xw27.py Modified: trunk/examples/python/CMakeLists.txt =================================================================== --- trunk/examples/python/CMakeLists.txt 2008-08-13 12:32:08 UTC (rev 8639) +++ trunk/examples/python/CMakeLists.txt 2008-08-13 13:25:33 UTC (rev 8640) @@ -43,6 +43,7 @@ "24" "25" "26" +"27" "28" "29" "30" Added: trunk/examples/python/x27 =================================================================== --- trunk/examples/python/x27 (rev 0) +++ trunk/examples/python/x27 2008-08-13 13:25:33 UTC (rev 8640) @@ -0,0 +1,39 @@ +#!/usr/bin/env python + +# Copyright (C) 2008 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 the file PLplot; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +# Run all python plplot examples non-interactively. + +# Append to effective python path so that can find plplot modules. +from plplot_python_start import * + +import sys +from plplot import * + +# Parse and process command line arguments +plparseopts(sys.argv, PL_PARSE_FULL) + +# Initialize plplot +plinit() + +import xw27 + +# Terminate plplot +plend() + Property changes on: trunk/examples/python/x27 ___________________________________________________________________ Added: svn:executable + * Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/examples/python/xw27.py =================================================================== --- trunk/examples/python/xw27.py (rev 0) +++ trunk/examples/python/xw27.py 2008-08-13 13:25:33 UTC (rev 8640) @@ -0,0 +1,116 @@ +# $Id:$ +# +# Copyright (C) 2007 Arjen Markus +# Copyright (C) 2008 Andrew Ross + +# Drawing "spirograph" curves - epitrochoids, cycolids, roulettes + +# This file is part of PLplot. +# +# PLplot is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Library Public License as published +# by the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# 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 +# + +from plplot_py_demos import * + +# main +# +# Generates two kinds of plots: +# - construction of a cycloid (animated) +# - series of epitrochoids and hypotrochoids + +def main(): + + # R, r, p, N + params = [ [21.0, 7.0, 7.0, 3.0], # Deltoid + [21.0, 7.0, 10.0, 3.0], + [21.0, -7.0, 10.0, 3.0], + [20.0, 3.0, 7.0, 20.0], + [20.0, 3.0, 10.0, 20.0], + [20.0, -3.0, 10.0, 20.0], + [20.0, 13.0, 7.0, 20.0], + [20.0, 13.0, 20.0, 20.0], + [20.0,-13.0, 20.0, 20.0] ] + + # Illustrate the construction of a cycloid + + # TODO + #cycloid(); + + # Loop over the various curves + # First an overview, then all curves one by one + plssub(3, 3) ; # Three by three window + + for i in range(9) : + pladv(0) ; + plvpor( 0.0, 1.0, 0.0, 1.0 ) ; + spiro( params[i] ) ; + + pladv(0) ; + plssub(1, 1) ; # One window per curve + + for i in range(9): + pladv(0) ; + plvpor( 0.0, 1.0, 0.0, 1.0 ) ; + spiro( params[i] ) ; + + +def spiro(params): + # Fill the coordinates + NPNT = 20000 + + windings = int(params[3]); + steps = int(NPNT/windings) ; + dphi = 8.0*arccos(-1.0)/steps ; + + xmin = 0.0 ; # This initialisation is safe! + xmax = 0.0 ; + ymin = 0.0 ; + ymax = 0.0 ; + + xcoord = zeros(windings*steps+1); + ycoord = zeros(windings*steps+1); + + for i in range(windings*steps+1) : + phi = i * dphi ; + phiw = (params[0]-params[1])/params[1]*phi ; + xcoord[i] = (params[0]-params[1])*cos(phi) + params[2]*cos(phiw) ; + ycoord[i] = (params[0]-params[1])*sin(phi) - params[2]*sin(phiw) ; + + if ( xmin > xcoord[i] ) : + xmin = xcoord[i] ; + if ( xmax < xcoord[i] ) : + xmax = xcoord[i] ; + if ( ymin > ycoord[i] ) : + ymin = ycoord[i] ; + if ( ymax < ycoord[i] ) : + ymax = ycoord[i] ; + + if ( xmax-xmin > ymax-ymin ) : + scale = xmax - xmin ; + else : + scale = ymax - ymin ; + + xmin = - 0.65 * scale ; + xmax = 0.65 * scale ; + ymin = - 0.65 * scale ; + ymax = 0.65 * scale ; + + plwind( xmin, xmax, ymin, ymax ) ; + + plcol0(1); + plline( xcoord, ycoord ) ; + + +main() Property changes on: trunk/examples/python/xw27.py ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/plplot_test/test_python.sh.in =================================================================== --- trunk/plplot_test/test_python.sh.in 2008-08-13 12:32:08 UTC (rev 8639) +++ trunk/plplot_test/test_python.sh.in 2008-08-13 13:25:33 UTC (rev 8640) @@ -31,7 +31,7 @@ # Skip 21 if using Numeric - it doesn't work # For 24 you need special fonts installed to get good result. for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 \ -20 22 23 24 25 26 28 29 30 @NUMPY_EXAMPLES@ ; do +20 22 23 24 25 26 27 28 29 30 @NUMPY_EXAMPLES@ ; do @PYTHON_EXECUTABLE@ $pythondir/x$index -dev $device -o ${OUTPUT_DIR}/x${index}p.$dsuffix $options 2> test.error status_code=$? cat test.error This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-13 22:27:21
|
Revision: 8642 http://plplot.svn.sourceforge.net/plplot/?rev=8642&view=rev Author: andrewross Date: 2008-08-13 22:27:30 +0000 (Wed, 13 Aug 2008) Log Message: ----------- Add python support for plimagefr. Update example 20 to use this (consistent with C version). Modified Paths: -------------- trunk/bindings/python/plplot.py.Numeric trunk/bindings/python/plplot.py.numpy trunk/bindings/python/plplotcmodule.i trunk/bindings/swig-support/plplotcapi.i trunk/examples/python/xw20.py Modified: trunk/bindings/python/plplot.py.Numeric =================================================================== --- trunk/bindings/python/plplot.py.Numeric 2008-08-13 16:02:19 UTC (rev 8641) +++ trunk/bindings/python/plplot.py.Numeric 2008-08-13 22:27:30 UTC (rev 8642) @@ -1,4 +1,5 @@ # Copyright 2002 Gary Bishop and Alan W. Irwin +# Copyright 2008 Andrew Ross # This file is part of PLplot. # PLplot is free software; you can redistribute it and/or modify @@ -251,6 +252,99 @@ _plvect(u, v, scaling, pltr, pltr_data) plvect.__doc__ = _plvect.__doc__ +# Redefine plimagefr to have the user-friendly interface +# Allowable syntaxes: + +# plimagefr( img, xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax, [pltr, [pltr_data] or [xg, yg, [wrap]]]) +_plimagefr = plimagefr +def plimagefr(img, *args): + img = Numeric.asarray(img) + + if len(img.shape) != 2: + raise ValueError, "Expected 2D img array" + + if len(args) >= 8 : + for i in range(8) : + if (type(args[i]) != types.FloatType and type(args[i]) != types.IntType) : + raise ValueError, "Expected 8 numbers for xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax" + else: + # These 8 args are xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax + xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax = args[0:8] + args = args[8:] + else: + raise ValueError, "Expected 8 numbers for xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax" + + if len(args) > 0 and ( \ + type(args[0]) == types.StringType or \ + type(args[0]) == types.FunctionType or \ + type(args[0]) == types.BuiltinFunctionType): + pltr = args[0] + # Handle the string names for the callbacks though specifying the + # built-in function name directly (without the surrounding quotes) + # or specifying any user-defined transformation function + # (following above rules) works fine too. + if type(pltr) == types.StringType: + if pltr == "pltr0": + pltr = pltr0 + elif pltr == "pltr1": + pltr = pltr1 + elif pltr == "pltr2": + pltr = pltr2 + else: + raise ValueError, "pltr string is unrecognized" + + args = args[1:] + # Handle pltr_data or separate xg, yg, [wrap] + if len(args) == 0: + # Default pltr_data + pltr_data = None + elif len(args) == 1: + #Must be pltr_data + pltr_data = args[0] + args = args[1:] + elif len(args) >= 2: + xg = Numeric.asarray(args[0]) + if len(xg.shape) < 1 or len(xg.shape) > 2: + raise ValueError, "xg must be 1D or 2D array" + yg = Numeric.asarray(args[1]) + if len(yg.shape) != len(xg.shape): + raise ValueError, "yg must have same number of dimensions as xg" + args = args[2:] + # wrap only relevant if xg and yg specified. + if len(args) > 0: + if type(args[0]) == types.IntType: + wrap = args[0] + args = args[1:] + if len(xg.shape) == 2 and len(yg.shape) == 2 and \ + img.shape[0] == xg.shape[0]-1 and img.shape[1] == xg.shape[1]-1: + # handle wrap + if wrap == 1: + img = Numeric.resize(img, (img.shape[0]+1, u.shape[1])) + xg = Numeric.resize(xg, (xg.shape[0]+1, xg.shape[1])) + yg = Numeric.resize(yg, (yg.shape[0]+1, yg.shape[1])) + elif wrap == 2: + img = Numeric.transpose(Numeric.resize( \ + Numeric.transpose(img), (img.shape[1]+1, img.shape[0]))) + xg = Numeric.transpose(Numeric.resize( \ + Numeric.transpose(xg), (xg.shape[1]+1, xg.shape[0]))) + yg = Numeric.transpose(Numeric.resize( \ + Numeric.transpose(yg), (yg.shape[1]+1, yg.shape[0]))) + elif wrap != 0: + raise ValueError, "Invalid wrap specifier, must be 0, 1 or 2." + elif wrap != 0: + raise ValueError, "Non-zero wrap specified and xg and yg are not 2D arrays" + else: + raise ValueError, "Specified wrap is not an integer" + pltr_data = (xg, yg) + else: + # default is identity transformation + pltr = pltr0 + pltr_data = None + if len(args) > 0: + raise ValueError, "Too many arguments for plimagefr" + _plimagefr(img, xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax, pltr, pltr_data) +plimagefr.__doc__ = _plimagefr.__doc__ + # Redefine plshades to have the user-friendly interface # Allowable syntaxes: Modified: trunk/bindings/python/plplot.py.numpy =================================================================== --- trunk/bindings/python/plplot.py.numpy 2008-08-13 16:02:19 UTC (rev 8641) +++ trunk/bindings/python/plplot.py.numpy 2008-08-13 22:27:30 UTC (rev 8642) @@ -1,4 +1,5 @@ # Copyright 2002 Gary Bishop and Alan W. Irwin +# Copyright 2008 Andrew Ross # This file is part of PLplot. # PLplot is free software; you can redistribute it and/or modify @@ -251,6 +252,101 @@ _plvect(u, v, scaling, pltr, pltr_data) plvect.__doc__ = _plvect.__doc__ +# Redefine plimagefr to have the user-friendly interface +# Allowable syntaxes: + +# plimagefr( img, xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax, [pltr, [pltr_data] or [xg, yg, [wrap]]]) +_plimagefr = plimagefr +def plimagefr(img, *args): + img = numpy.asarray(img) + + if len(img.shape) != 2: + raise ValueError, "Expected 2D img array" + + if len(args) >= 8 : + for i in range(8) : + if (type(args[i]) != types.FloatType and \ + type(args[i]) != numpy.float64 and \ + type(args[i]) != types.IntType) : + raise ValueError, "Expected 8 numbers for xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax" + else: + # These 8 args are xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax + xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax = args[0:8] + args = args[8:] + else: + raise ValueError, "Expected 8 numbers for xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax" + + if len(args) > 0 and ( \ + type(args[0]) == types.StringType or \ + type(args[0]) == types.FunctionType or \ + type(args[0]) == types.BuiltinFunctionType): + pltr = args[0] + # Handle the string names for the callbacks though specifying the + # built-in function name directly (without the surrounding quotes) + # or specifying any user-defined transformation function + # (following above rules) works fine too. + if type(pltr) == types.StringType: + if pltr == "pltr0": + pltr = pltr0 + elif pltr == "pltr1": + pltr = pltr1 + elif pltr == "pltr2": + pltr = pltr2 + else: + raise ValueError, "pltr string is unrecognized" + + args = args[1:] + # Handle pltr_data or separate xg, yg, [wrap] + if len(args) == 0: + # Default pltr_data + pltr_data = None + elif len(args) == 1: + #Must be pltr_data + pltr_data = args[0] + args = args[1:] + elif len(args) >= 2: + xg = numpy.asarray(args[0]) + if len(xg.shape) < 1 or len(xg.shape) > 2: + raise ValueError, "xg must be 1D or 2D array" + yg = numpy.asarray(args[1]) + if len(yg.shape) != len(xg.shape): + raise ValueError, "yg must have same number of dimensions as xg" + args = args[2:] + # wrap only relevant if xg and yg specified. + if len(args) > 0: + if type(args[0]) == types.IntType: + wrap = args[0] + args = args[1:] + if len(xg.shape) == 2 and len(yg.shape) == 2 and \ + img.shape[0] == xg.shape[0]-1 and img.shape[1] == xg.shape[1]-1: + # handle wrap + if wrap == 1: + img = numpy.resize(img, (img.shape[0]+1, u.shape[1])) + xg = numpy.resize(xg, (xg.shape[0]+1, xg.shape[1])) + yg = numpy.resize(yg, (yg.shape[0]+1, yg.shape[1])) + elif wrap == 2: + img = numpy.transpose(numpy.resize( \ + numpy.transpose(img), (img.shape[1]+1, img.shape[0]))) + xg = numpy.transpose(numpy.resize( \ + numpy.transpose(xg), (xg.shape[1]+1, xg.shape[0]))) + yg = numpy.transpose(numpy.resize( \ + numpy.transpose(yg), (yg.shape[1]+1, yg.shape[0]))) + elif wrap != 0: + raise ValueError, "Invalid wrap specifier, must be 0, 1 or 2." + elif wrap != 0: + raise ValueError, "Non-zero wrap specified and xg and yg are not 2D arrays" + else: + raise ValueError, "Specified wrap is not an integer" + pltr_data = (xg, yg) + else: + # default is identity transformation + pltr = pltr0 + pltr_data = None + if len(args) > 0: + raise ValueError, "Too many arguments for plimagefr" + _plimagefr(img, xmin, xmax, ymin, ymax, zmin, zmax, valuemin, valuemax, pltr, pltr_data) +plimagefr.__doc__ = _plimagefr.__doc__ + # Redefine plshades to have the user-friendly interface # Allowable syntaxes: @@ -265,10 +361,10 @@ raise ValueError, "Expected 2D z array" if len(args) > 4 and \ - (type(args[0]) == types.FloatType or type(args[0]) == types.IntType) and \ - (type(args[1]) == types.FloatType or type(args[1]) == types.IntType) and \ - (type(args[2]) == types.FloatType or type(args[2]) == types.IntType) and \ - (type(args[3]) == types.FloatType or type(args[3]) == types.IntType): + (type(args[0]) == types.FloatType or type(args[0]) == numpy.float64 or type(args[0]) == types.IntType) and \ + (type(args[1]) == types.FloatType or type(args[1]) == numpy.float64 or type(args[1]) == types.IntType) and \ + (type(args[2]) == types.FloatType or type(args[2]) == numpy.float64 or type(args[2]) == types.IntType) and \ + (type(args[3]) == types.FloatType or type(args[3]) == numpy.float64 or type(args[3]) == types.IntType): # These 4 args are xmin, xmax, ymin, ymax xmin, xmax, ymin, ymax = args[0:4] args = args[4:] Modified: trunk/bindings/python/plplotcmodule.i =================================================================== --- trunk/bindings/python/plplotcmodule.i 2008-08-13 16:02:19 UTC (rev 8641) +++ trunk/bindings/python/plplotcmodule.i 2008-08-13 22:27:30 UTC (rev 8642) @@ -489,7 +489,7 @@ static PLcGrid tmpGrid1; static PLcGrid2 tmpGrid2; - PLcGrid* marshal_PLcGrid1(PyObject* input) { + PLcGrid* marshal_PLcGrid1(PyObject* input, int isimg) { /* fprintf(stderr, "marshal PLcGrid1\n"); */ if(!PySequence_Check(input) || PySequence_Size(input) != 2) { PyErr_SetString(PyExc_ValueError, "Expected a sequence of two arrays."); @@ -505,10 +505,18 @@ } tmpGrid1.nx = pltr_xg->dimensions[0]; tmpGrid1.ny = pltr_yg->dimensions[0]; - if(Xlen != tmpGrid1.nx || Ylen != tmpGrid1.ny) { - PyErr_SetString(PyExc_ValueError, "pltr arguments must have X and Y dimensions of first arg."); - return NULL; + if (isimg == 0) { + if(Xlen != tmpGrid1.nx || Ylen != tmpGrid1.ny) { + PyErr_SetString(PyExc_ValueError, "pltr arguments must have X and Y dimensions of first arg."); + return NULL; + } } + else { + if(Xlen != tmpGrid1.nx-1 || Ylen != tmpGrid1.ny-1) { + PyErr_SetString(PyExc_ValueError, "pltr arguments must have X and Y dimensions of first arg + 1."); + return NULL; + } + } tmpGrid1.xg = (PLFLT*)pltr_xg->data; tmpGrid1.yg = (PLFLT*)pltr_yg->data; return &tmpGrid1; @@ -520,7 +528,7 @@ Py_DECREF(pltr_yg); } - PLcGrid2* marshal_PLcGrid2(PyObject* input) { + PLcGrid2* marshal_PLcGrid2(PyObject* input, int isimg) { int i, size; /* fprintf(stderr, "marshal PLcGrid2\n"); */ if(!PySequence_Check(input) || PySequence_Size(input) != 2) { @@ -542,10 +550,18 @@ } tmpGrid2.nx = pltr_xg->dimensions[0]; tmpGrid2.ny = pltr_xg->dimensions[1]; - if(Xlen != tmpGrid2.nx || Ylen != tmpGrid2.ny) { - PyErr_SetString(PyExc_ValueError, "pltr arguments must have X and Y dimensions of first arg."); - return NULL; + if (isimg == 0) { + if(Xlen != tmpGrid2.nx || Ylen != tmpGrid2.ny) { + PyErr_SetString(PyExc_ValueError, "pltr arguments must have X and Y dimensions of first arg."); + return NULL; + } } + else { + if(Xlen != tmpGrid2.nx-1 || Ylen != tmpGrid2.ny-1) { + PyErr_SetString(PyExc_ValueError, "pltr arguments must have X and Y dimensions of first arg + 1."); + return NULL; + } + } size = sizeof(PLFLT)*tmpGrid2.ny; tmpGrid2.xg = (PLFLT**)malloc(sizeof(PLFLT*)*tmpGrid2.nx); for(i=0; i<tmpGrid2.nx; i++) @@ -566,7 +582,7 @@ %} %typemap(in) PLcGrid* cgrid { - $1 = marshal_PLcGrid1($input); + $1 = marshal_PLcGrid1($input,0); if(!$1) return NULL; } @@ -582,7 +598,7 @@ structure that pltr2 expects */ %typemap(in) PLcGrid2* cgrid { - $1 = marshal_PLcGrid2($input); + $1 = marshal_PLcGrid2($input,0); if(!$1) return NULL; } @@ -775,18 +791,18 @@ python_pltr = 0; } - PLPointer marshal_PLPointer(PyObject* input) { + PLPointer marshal_PLPointer(PyObject* input,int isimg) { PLPointer result = NULL; switch(pltr_type) { case CB_0: break; case CB_1: if(input != Py_None) - result = marshal_PLcGrid1(input); + result = marshal_PLcGrid1(input,isimg); break; case CB_2: if(input != Py_None) - result = marshal_PLcGrid2(input); + result = marshal_PLcGrid2(input,isimg); break; case CB_Python: Py_XINCREF(input); @@ -844,7 +860,7 @@ if($input == Py_None) $1 = NULL; else { - $1 = marshal_PLPointer($input); + $1 = marshal_PLPointer($input,0); } } %typemap(freearg) PLPointer PYOBJECT_DATA { @@ -856,6 +872,23 @@ $1 = NULL; } +/* convert an arbitrary Python object into the void* pointer they want */ +%typemap(in) PLPointer PYOBJECT_DATA_img { + if($input == Py_None) + $1 = NULL; + else { + $1 = marshal_PLPointer($input,1); + } +} +%typemap(freearg) PLPointer PYOBJECT_DATA_img { + cleanup_PLPointer(); +} + +/* you can omit the data too */ +%typemap(default) PLPointer PYOBJECT_DATA_img { + $1 = NULL; +} + /* marshall the f2eval function pointer argument */ %typemap(in) f2eval_func f2eval { /* it must be a callable */ Modified: trunk/bindings/swig-support/plplotcapi.i =================================================================== --- trunk/bindings/swig-support/plplotcapi.i 2008-08-13 16:02:19 UTC (rev 8641) +++ trunk/bindings/swig-support/plplotcapi.i 2008-08-13 22:27:30 UTC (rev 8642) @@ -171,7 +171,7 @@ #ifdef SWIG_PYTHON #define SWIG_OBJECT_DATA PYOBJECT_DATA -#define SWIG_OBJECT_DATA_img PYOBJECT_DATA +#define SWIG_OBJECT_DATA_img PYOBJECT_DATA_img #define pltr_img pltr #else #define SWIG_OBJECT_DATA OBJECT_DATA Modified: trunk/examples/python/xw20.py =================================================================== --- trunk/examples/python/xw20.py 2008-08-13 16:02:19 UTC (rev 8641) +++ trunk/examples/python/xw20.py 2008-08-13 22:27:30 UTC (rev 8642) @@ -4,9 +4,6 @@ from plplot_py_demos import * -import os.path -import sys - XDIM = 260 YDIM = 220 @@ -152,7 +149,16 @@ else: # Driver has no xormod capability, just do nothing return [0, xi, xe, yi, ye] + +def mypltr(x, y, stretch): + x0 = (stretch[0] + stretch[1])*0.5 + y0 = (stretch[2] + stretch[3])*0.5 + dy = (stretch[3] - stretch[2])*0.5 + result0 = x0 + multiply.outer((x0-x),(1.0 - stretch[4]*cos((y-y0)/dy*pi*0.5))) + result1 = multiply.outer(ones(len(x)),y) + return array((result0, result1)) + # main # # @@ -190,9 +196,9 @@ r = sqrt( multiply.outer(x*x,ones(YDIM)) + multiply.outer(ones(XDIM),y*y)) + 1e-3 z = sin(r) / r - pllab("No, an amplitude clipped \"sombrero\"", "", "Saturn?"); - plptex(2., 2., 3., 4., 0., "Transparent image"); - plimage(z, 0., 2.*pi, 0, 3.*pi, 0.05, 1.,0., 2.*pi, 0, 3.*pi); + pllab("No, an amplitude clipped \"sombrero\"", "", "Saturn?") + plptex(2., 2., 3., 4., 0., "Transparent image") + plimage(z, 0., 2.*pi, 0, 3.*pi, 0.05, 1.,0., 2.*pi, 0, 3.*pi) # Save the plot if (f_name != ""): @@ -249,8 +255,34 @@ plenv(xi, xe, ye, yi, 1, -1) plimage(img, 1., width, 1., height, 0., 0., xi, xe, ye, yi) pladv(0) - plend() - sys.exit(0) + # Base the dynamic range on the image contents. + img_min = min(img.flat) + img_max = max(img.flat) + + # Draw a saturated version of the original image. Only use the middle 50% + # of the image's full dynamic range. + plcol0(2) + plenv(0, width, 0, height, 1, -1) + pllab("", "", "Reduced dynamic range image example") + plimagefr(img, 0., width, 0., height, 0., 0., img_min + img_max * 0.25, \ + img_max - img_max * 0.25) + + # Draw a distorted version of the original image, showing its full dynamic range. + plenv(0, width, 0, height, 1, -1) + pllab("", "", "Distorted image example") + + stretch = zeros(5) + stretch[1] = width + stretch[3] = height + stretch[4] = 0.5 + + xg = mypltr(arange(width+1),arange(height+1),stretch)[0] + yg = mypltr(arange(width+1),arange(height+1),stretch)[1] + plimagefr(img, 0., width, 0., height, 0., 0., img_min, img_max, \ + pltr2, xg, yg) + pladv(0) + + main() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-14 08:00:04
|
Revision: 8646 http://plplot.svn.sourceforge.net/plplot/?rev=8646&view=rev Author: andrewross Date: 2008-08-14 08:00:12 +0000 (Thu, 14 Aug 2008) Log Message: ----------- Update fortran 95 plgfci / plsci support to fix a bug and to use int64_t where available rather than long long - a more reliable way of ensuring a 64-bit integer. Add plgfci / plsfci support to f77 and update example 23 (consistent with C version) to make use of it. Modified Paths: -------------- trunk/bindings/f77/plstubs.h trunk/bindings/f77/scstubs.c trunk/bindings/f95/plstubs.h trunk/bindings/f95/scstubs.c trunk/examples/f77/x23f.fm4 trunk/examples/f95/x23f.f90 trunk/include/plplot.h Modified: trunk/bindings/f77/plstubs.h =================================================================== --- trunk/bindings/f77/plstubs.h 2008-08-14 07:57:05 UTC (rev 8645) +++ trunk/bindings/f77/plstubs.h 2008-08-14 08:00:12 UTC (rev 8646) @@ -201,6 +201,7 @@ #define PLGDIORI FNAME(PLGDIORI,plgdiori) #define PLGDIPLT FNAME(PLGDIPLT,plgdiplt) #define PLGFAM FNAME(PLGFAM,plgfam) +#define PLGFCI FNAME(PLGFCI,plgfci) #define PLGFNAM7 FNAME(PLGFNAM7,plgfnam7) #define PLGFONT FNAME(PLGFONT,plgfont) #define PLGLEVEL FNAME(PLGLEVEL,plglevel) @@ -280,6 +281,7 @@ #define PLSESC FNAME(PLSESC,plsesc) #define PLSETOPT7 FNAME(PLSETOPT7,plsetopt7) #define PLSFAM FNAME(PLSFAM,plsfam) +#define PLSFCI FNAME(PLSFCI,plsfci) #define PLSFNAM7 FNAME(PLSFNAM7,plsfnam7) #define PLSFONT FNAME(PLSFONT,plsfont) #define PLSHADE07 FNAME(PLSHADE07,plshade07) Modified: trunk/bindings/f77/scstubs.c =================================================================== --- trunk/bindings/f77/scstubs.c 2008-08-14 07:57:05 UTC (rev 8645) +++ trunk/bindings/f77/scstubs.c 2008-08-14 08:00:12 UTC (rev 8646) @@ -294,7 +294,18 @@ c_plgfam(fam, num, bmax); } +/* Note: Fortran does not have unsigned integers so we need to use a + * 64 bit signed integer which corresponds to a fortran integer*8 + * in order to contain the number. */ void +PLGFCI(PLINT64 *pfci) +{ + PLUNICODE fci; + c_plgfci(&fci); + *pfci = (PLINT64) fci; +} + +void PLGFNAM7(char *fnam, int length) { c_plgfnam(fnam); @@ -759,7 +770,18 @@ c_plsfam(*fam, *num, *bmax); } +/* Note: Fortran does not have unsigned integers so we need to use a + * 64 bit signed integer which corresponds to a fortran integer*8 + * in order to contain the number. */ void +PLSFCI(PLINT64 *fci) +{ + PLUNICODE f; + f = (PLUNICODE) (*fci & 0xffffffff); + c_plsfci(f); +} + +void PLSFNAM7(const char *fnam) { c_plsfnam(fnam); Modified: trunk/bindings/f95/plstubs.h =================================================================== --- trunk/bindings/f95/plstubs.h 2008-08-14 07:57:05 UTC (rev 8645) +++ trunk/bindings/f95/plstubs.h 2008-08-14 08:00:12 UTC (rev 8646) @@ -197,7 +197,7 @@ #define PLGDIPLT FNAME(PLGDIPLT,plgdiplt) #define PLGETCURSOR FNAME(PLGETCURSOR,plgetcursor) #define PLGFAM FNAME(PLGFAM,plgfam) -#define PLGFCI FNAME(PLGFAM,plgfci) +#define PLGFCI FNAME(PLGFCI,plgfci) #define PLGFNAM7 FNAME(PLGFNAM7,plgfnam7) #define PLGFONT FNAME(PLGFONT,plgfont) #define PLGLEVEL FNAME(PLGLEVEL,plglevel) Modified: trunk/bindings/f95/scstubs.c =================================================================== --- trunk/bindings/f95/scstubs.c 2008-08-14 07:57:05 UTC (rev 8645) +++ trunk/bindings/f95/scstubs.c 2008-08-14 08:00:12 UTC (rev 8646) @@ -300,16 +300,15 @@ c_plgfam(fam, num, bmax); } -/* Note: Fortran does not have unsigned integers so we need to use a long - * (should be 64 bit on most platforms?) which corresponds to a fortran integer*8 - * in order to contain the number. This all a bit ugly and could break on - * different hardware */ +/* Note: Fortran does not have unsigned integers so we need to use a + * 64 bit signed integer which corresponds to a fortran integer*8 + * in order to contain the number. */ void -PLGFCI(long long *pfci) +PLGFCI(PLINT64 *pfci) { PLUNICODE fci; c_plgfci(&fci); - *pfci = (long long) fci; + *pfci = (PLINT64) fci; } void @@ -830,12 +829,11 @@ c_plsfam(*fam, *num, *bmax); } -/* Note: Fortran does not have unsigned integers so we need to use a long - * (should be 64 bit on most platforms?) which corresponds to a fortran integer*8 - * in order to contain the number. This all a bit ugly and could break on - * different hardware */ +/* Note: Fortran does not have unsigned integers so we need to use a + * 64 bit signed integer which corresponds to a fortran integer*8 + * in order to contain the number. */ void -PLSFCI(long long *fci) +PLSFCI(PLINT64 *fci) { PLUNICODE f; f = (PLUNICODE) (*fci & 0xffffffff); Modified: trunk/examples/f77/x23f.fm4 =================================================================== --- trunk/examples/f77/x23f.fm4 2008-08-14 07:57:05 UTC (rev 8645) +++ trunk/examples/f77/x23f.fm4 2008-08-14 08:00:12 UTC (rev 8646) @@ -31,6 +31,13 @@ real*8 chardef, charht, deltax, deltay, x, y integer i, j, page, length, slice character*20 cmdString + integer*8 fci_old + integer ifamily, istyle, iweight + real*8 dy + integer family_index, style_index, weight_index +C Must be big enough to contain the prefix strings, the font-changing +C commands, and the "The quick brown..." string. + character*200 string integer PL_PARSE_FULL parameter(PL_PARSE_FULL = 1) @@ -38,6 +45,9 @@ C C Displays Greek letters and mathematically interesting Unicode ranges C + integer fci_combinations + parameter(fci_combinations = 30) + character*5 greek(48) integer type1(166) character*80 title(11) @@ -46,6 +56,10 @@ integer nxcells(11) integer nycells(11) integer offset(11) + integer*8 fci(fci_combinations) + character*11 family(5) + character*8 style(3) + character*7 weight(2) data (greek(i) ,i=1,48) / & '#gA','#gB','#gG','#gD','#gE','#gZ', @@ -180,6 +194,54 @@ &0, &0 / + data (fci(i), i=1,fci_combinations) / + & z'80000000', + & z'80000001', + & z'80000002', + & z'80000003', + & z'80000004', + & z'80000010', + & z'80000011', + & z'80000012', + & z'80000013', + & z'80000014', + & z'80000020', + & z'80000021', + & z'80000022', + & z'80000023', + & z'80000024', + & z'80000100', + & z'80000101', + & z'80000102', + & z'80000103', + & z'80000104', + & z'80000110', + & z'80000111', + & z'80000112', + & z'80000113', + & z'80000114', + & z'80000120', + & z'80000121', + & z'80000122', + & z'80000123', + & z'80000124' / + + data (family(i), i=1,5) / + & "sans-serif", + & "serif", + & "monospace", + & "script", + & "symbol" / + + data (style(i), i=1,3) / + & "upright", + & "italic", + & "oblique" / + + data (weight(i), i=1,2) / + & "medium", + & "bold" / + call plparseopts(PL_PARSE_FULL) call plinit() @@ -245,6 +307,99 @@ call plmtex("t", 1.5d0, 0.5d0, 0.5d0, title(page)) 130 continue +C Demonstrate methods of getting the current fonts + call plgfci(fci_old) + call plgfont(ifamily, istyle, iweight) + write (*,'(a,z8)') 'For example 23 prior to page 12 the FCI is 0x' + & ,fci_old + write (*,'(a)') 'For example 23 prior to page 12 the '// + & 'font family, style and weight are '// + & family(ifamily+1)//' '//style(istyle+1)//' '// + & weight(iweight+1) + + do 140 page=11,15 + dy = 0.030d0 + + call pladv(0) + call plvpor(0.02d0, 0.98d0, 0.02d0, 0.90d0) + call plwind(0.0d0, 1.0d0, 0.0d0, 1.0d0) + call plsfci(0) + if (page == 11) then + call plmtex('t', 1.5d0, 0.5d0, 0.5d0, + & '#<0x10>PLplot Example 23 - '// + & 'Set Font with plsfci') + elseif (page == 12) then + call plmtex('t', 1.5d0, 0.5d0, 0.5d0, + & '#<0x10>PLplot Example 23 - '// + & 'Set Font with plsfont') + elseif(page == 13) then + call plmtex('t', 1.5d0, 0.5d0, 0.5d0, + & '#<0x10>PLplot Example 23 - '// + & 'Set Font with ##<0x8nnnnnnn> construct') + elseif(page == 14) then + call plmtex('t', 1.5d0, 0.5d0, 0.5d0, + & '#<0x10>PLplot Example 23 - '// + & 'Set Font with ##<0xmn> constructs') + elseif(page == 15) then + call plmtex('t', 1.5d0, 0.5d0, 0.5d0, + & '#<0x10>PLplot Example 23 - '// + & 'Set Font with ##<FCI COMMAND STRING/> constructs') + endif + call plschr(0.d0, 0.75d0) + do 150 i=0,fci_combinations-1 + family_index = mod(i,5) + style_index = mod(i/5,3) + weight_index = mod((i/5)/3,2) + if(page == 11) then + call plsfci(fci(i+1)) + write(string,'(a)') + & 'Page 12, '// + & trim(family(family_index+1))//', '// + & trim(style(style_index+1))//', '// + & trim(weight(weight_index+1))//': '// + & 'The quick brown fox jumps over the lazy dog' + elseif(page == 12) then + call plsfont(family_index, style_index, weight_index) + write(string,'(a)') + & 'Page 13, '// + & trim(family(family_index+1))//', '// + & trim(style(style_index+1))//', '// + & trim(weight(weight_index+1))//': '// + & 'The quick brown fox jumps over the lazy dog' + elseif(page == 13) then + write(string,'(a,"#<0x",z8,">",a)') + & 'Page 14, '//trim(family(family_index+1))//', '// + & trim(style(style_index+1))//', '// + & trim(weight(weight_index+1))//': ', + & fci(i+1), + & 'The quick brown fox jumps over the lazy dog' + elseif(page == 14) then + write(string,'(a,"#<0x",z1,"0>#<0x",z1,"1>#<0x",z1,"2>",a)') + & 'Page 15, '// + & trim(family(family_index+1))//', '// + & trim(style(style_index+1))//', '// + & trim(weight(weight_index+1))//': ', + & family_index, + & style_index, + & weight_index, + & 'The quick brown fox jumps over the lazy dog' + elseif(page == 15) then + write(string,'(a)') + & 'Page 16, '// + & trim(family(family_index+1))//', '// + & trim(style(style_index+1))//', '// + & trim(weight(weight_index+1))//': '// + & '#<'//trim(family(family_index+1))//'/>#<'// + & trim(style(style_index+1))//'/>#<'// + & trim(weight(weight_index+1))//'/>'// + & 'The quick brown fox jumps over the lazy dog' + endif + call plptex (0.d0, 1.d0 - (i+0.5d0)*dy, 1.d0, + & 0.d0, 0.d0, string) + 150 continue + call plschr(0.d0, 1.0d0) + 140 continue + C Restore defaults call plcol0(1) Modified: trunk/examples/f95/x23f.f90 =================================================================== --- trunk/examples/f95/x23f.f90 2008-08-14 07:57:05 UTC (rev 8645) +++ trunk/examples/f95/x23f.f90 2008-08-14 08:00:12 UTC (rev 8646) @@ -35,10 +35,10 @@ integer(kind=plunicode) fci_old integer ifamily, istyle, iweight real(kind=plflt) dy - integer family_index, style_index, weight_index; + integer family_index, style_index, weight_index ! Must be big enough to contain the prefix strings, the font-changing ! commands, and the "The quick brown..." string. - character*200 string; + character*200 string Modified: trunk/include/plplot.h =================================================================== --- trunk/include/plplot.h 2008-08-14 07:57:05 UTC (rev 8645) +++ trunk/include/plplot.h 2008-08-14 08:00:12 UTC (rev 8646) @@ -149,14 +149,19 @@ (defined(__cplusplus) && defined(HAVE_CXX_STDINT_H)) #include <stdint.h> /* This is apparently portable if stdint.h exists. */ -typedef uint32_t PLUNICODE; +typedef uint32_t PLUINT; typedef int32_t PLINT; +typedef int64_t PLINT64; #else /* A reasonable back-up in case stdint.h does not exist on the platform. */ -typedef unsigned int PLUNICODE; +typedef unsigned int PLUINT; typedef int PLINT; +typedef long long PLINT64; #endif +/* For identifying unicode characters */ +typedef PLUINT PLUNICODE; + /* For identifying logical (boolean) arguments */ typedef PLINT PLBOOL; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-14 13:05:32
|
Revision: 8648 http://plplot.svn.sourceforge.net/plplot/?rev=8648&view=rev Author: andrewross Date: 2008-08-14 13:05:41 +0000 (Thu, 14 Aug 2008) Log Message: ----------- Add in cmake check for fortran function isnan. If it exists, this will be used in example 21, otherwise an alternative is provided. This fixes problems with ifort optimising the alternative away. Modified Paths: -------------- trunk/cmake/modules/fortran.cmake trunk/examples/f77/CMakeLists.txt trunk/examples/f77/x21f.fm4 trunk/examples/f95/CMakeLists.txt trunk/examples/f95/x21f.f90 Modified: trunk/cmake/modules/fortran.cmake =================================================================== --- trunk/cmake/modules/fortran.cmake 2008-08-14 08:14:56 UTC (rev 8647) +++ trunk/cmake/modules/fortran.cmake 2008-08-14 13:05:41 UTC (rev 8648) @@ -62,6 +62,9 @@ include(TestF77CmdLine) endif(ENABLE_f77) + # Check if isnan is available as an fortran function + include(TestFortranIsnan) + # Determine which Fortran compiler we have. We do not need to # this for all compilers, just the ones that have a test in # bindings/f77/plstubs.h and bindings/f95/plstubs.h Modified: trunk/examples/f77/CMakeLists.txt =================================================================== --- trunk/examples/f77/CMakeLists.txt 2008-08-14 08:14:56 UTC (rev 8647) +++ trunk/examples/f77/CMakeLists.txt 2008-08-14 13:05:41 UTC (rev 8648) @@ -79,6 +79,19 @@ endforeach(STRING_INDEX ${f77_STRING_INDICES}) endif(PL_DOUBLE) +# Process fortran header file to define isnan +if(FORTRAN_HAVE_ISNAN) + set(HAVE_F77_ISNAN_FALSE C) +else(FORTRAN_HAVE_ISNAN) + set(HAVE_F77_ISNAN_TRUE C) +endif(FORTRAN_HAVE_ISNAN) +configure_file( +${CMAKE_CURRENT_SOURCE_DIR}/plf77demos.inc.cmake +${CMAKE_CURRENT_BINARY_DIR}/plf77demos.inc +) +set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/plf77demos.inc +PROPERTIES GENERATED ON) + if(BUILD_TEST) remove_definitions("-DHAVE_CONFIG_H") include_directories(${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/include) @@ -106,3 +119,8 @@ DESTINATION ${DATA_DIR}/examples/f77 RENAME Makefile ) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/plf77demos.inc +DESTINATION ${DATA_DIR}/examples/f77 +) + Modified: trunk/examples/f77/x21f.fm4 =================================================================== --- trunk/examples/f77/x21f.fm4 2008-08-14 08:14:56 UTC (rev 8647) +++ trunk/examples/f77/x21f.fm4 2008-08-14 13:05:41 UTC (rev 8648) @@ -20,6 +20,8 @@ C License along with PLplot; if not, write to the Free Software C Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + include 'plf77demos.inc' + implicit none real*8 PI @@ -45,6 +47,7 @@ external plrandd real*8 plrandd +C The function myisnan is defined in plf77demos.h external myisnan logical myisnan @@ -276,17 +279,17 @@ end subroutine - function myisnan(x) - implicit none - - logical myisnan - real*8 x +c function myisnan(x) +c implicit none +c +c logical myisnan +c real*8 x +c +c myisnan = (x.ne.x) +c return +c end function - myisnan = (x.ne.x) - return - end function - C---------------------------------------------------------------------------- C Subroutine a2mnmx C Minimum and the maximum elements of a 2-d array. Modified: trunk/examples/f95/CMakeLists.txt =================================================================== --- trunk/examples/f95/CMakeLists.txt 2008-08-14 08:14:56 UTC (rev 8647) +++ trunk/examples/f95/CMakeLists.txt 2008-08-14 13:05:41 UTC (rev 8648) @@ -50,6 +50,20 @@ "30" ) +# Process fortran header file to define isnan +if(FORTRAN_HAVE_ISNAN) + set(HAVE_F77_ISNAN_FALSE !) +else(FORTRAN_HAVE_ISNAN) + set(HAVE_F77_ISNAN_TRUE !) +endif(FORTRAN_HAVE_ISNAN) +configure_file( +${CMAKE_CURRENT_SOURCE_DIR}/plf95demos.inc.cmake +${CMAKE_CURRENT_BINARY_DIR}/plf95demos.inc +) +set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/plf95demos.inc +PROPERTIES GENERATED ON) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + if(BUILD_TEST) remove_definitions("-DHAVE_CONFIG_H") @@ -102,3 +116,8 @@ DESTINATION ${DATA_DIR}/examples/f95 RENAME Makefile ) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/plf95demos.inc +DESTINATION ${DATA_DIR}/examples/f95 +) + Modified: trunk/examples/f95/x21f.f90 =================================================================== --- trunk/examples/f95/x21f.f90 2008-08-14 08:14:56 UTC (rev 8647) +++ trunk/examples/f95/x21f.f90 2008-08-14 13:05:41 UTC (rev 8648) @@ -21,6 +21,7 @@ ! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA use plplot, PI => PL_PI + implicit none ! integer PL_PARSE_FULL @@ -271,18 +272,6 @@ end subroutine cmap1_init - function myisnan(x) - use plplot - implicit none - - logical myisnan - real(kind=plflt) x - - myisnan = (x.ne.x) - return - end function myisnan - - !---------------------------------------------------------------------------- ! Subroutine a2mnmx ! Minimum and the maximum elements of a 2-d array. @@ -303,3 +292,7 @@ enddo enddo end subroutine a2mnmx + + include 'plf95demos.inc' + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-14 13:09:01
|
Revision: 8649 http://plplot.svn.sourceforge.net/plplot/?rev=8649&view=rev Author: andrewross Date: 2008-08-14 13:09:10 +0000 (Thu, 14 Aug 2008) Log Message: ----------- Add in new files for fortran isnan support. Added Paths: ----------- trunk/cmake/modules/TestFortranIsnan.cmake trunk/cmake/modules/TestFortranIsnan.f trunk/examples/f77/plf77demos.inc.cmake trunk/examples/f95/plf95demos.inc.cmake Added: trunk/cmake/modules/TestFortranIsnan.cmake =================================================================== --- trunk/cmake/modules/TestFortranIsnan.cmake (rev 0) +++ trunk/cmake/modules/TestFortranIsnan.cmake 2008-08-14 13:09:10 UTC (rev 8649) @@ -0,0 +1,44 @@ +# cmake/modules/TestFortranIsnan.cmake +# +# Fortran bindings - check is isnan function is available +# +# Copyright (C) 2008 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 the file PLplot; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +# Check if isnan function is available in fortran +IF(NOT DEFINED CMAKE_FORTRAN_HAVE_ISNAN) + MESSAGE(STATUS "Check if isnan function is available in fortran") + TRY_COMPILE(CMAKE_FORTRAN_HAVE_ISNAN + ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/cmake/modules/TestFortranIsnan.f + OUTPUT_VARIABLE OUTPUT) + IF (CMAKE_FORTRAN_HAVE_ISNAN) + MESSAGE(STATUS "Check for isnan in fortran - found") + SET (FORTRAN_HAVE_ISNAN 1 CACHE INTERNAL + "Does fortran have isnan function") + FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeOutput.log + "Determining if fortran has isnan function passed with " + "the following output:\n${OUTPUT}\n\n") + ELSE (CMAKE_FORTRAN_HAVE_ISNAN) + MESSAGE(STATUS "Check for isnan in fortran - not found") + SET (FORTRAN_HAVE_ISNAN 0 CACHE INTERNAL + "Does fortran have isnan function") + FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log + "Determining if fortran has isnan function failed with " + "the following output:\n${OUTPUT}\n\n") + ENDIF (CMAKE_FORTRAN_HAVE_ISNAN) +ENDIF(NOT DEFINED CMAKE_FORTRAN_HAVE_ISNAN) Property changes on: trunk/cmake/modules/TestFortranIsnan.cmake ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/cmake/modules/TestFortranIsnan.f =================================================================== --- trunk/cmake/modules/TestFortranIsnan.f (rev 0) +++ trunk/cmake/modules/TestFortranIsnan.f 2008-08-14 13:09:10 UTC (rev 8649) @@ -0,0 +1,9 @@ + program testisnan + +c external isnan + + if (isnan(0.0/0.0)) then + print *,"NaN" + endif + + end program testisnan Property changes on: trunk/cmake/modules/TestFortranIsnan.f ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/examples/f77/plf77demos.inc.cmake =================================================================== --- trunk/examples/f77/plf77demos.inc.cmake (rev 0) +++ trunk/examples/f77/plf77demos.inc.cmake 2008-08-14 13:09:10 UTC (rev 8649) @@ -0,0 +1,12 @@ + function myisnan(x) + + implicit none + logical myisnan + real*8 x + +@HAVE_F77_ISNAN_FALSE@ myisnan = (x.ne.x) +@HAVE_F77_ISNAN_TRUE@ myisnan = isnan(x) + + return + + end function Property changes on: trunk/examples/f77/plf77demos.inc.cmake ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/examples/f95/plf95demos.inc.cmake =================================================================== --- trunk/examples/f95/plf95demos.inc.cmake (rev 0) +++ trunk/examples/f95/plf95demos.inc.cmake 2008-08-14 13:09:10 UTC (rev 8649) @@ -0,0 +1,12 @@ + function myisnan(x) + + implicit none + logical myisnan + real*8 x + +@HAVE_F77_ISNAN_FALSE@ myisnan = (x.ne.x) +@HAVE_F77_ISNAN_TRUE@ myisnan = isnan(x) + + return + + end function Property changes on: trunk/examples/f95/plf95demos.inc.cmake ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-14 14:23:23
|
Revision: 8651 http://plplot.svn.sourceforge.net/plplot/?rev=8651&view=rev Author: andrewross Date: 2008-08-14 14:23:28 +0000 (Thu, 14 Aug 2008) Log Message: ----------- Add f95 versions of examples 24, 25, 26 and 27. Results are consistent with the C versions. Modified Paths: -------------- trunk/examples/f95/CMakeLists.txt trunk/examples/f95/Makefile.examples.in trunk/plplot_test/test_f95.sh.in Added Paths: ----------- trunk/examples/f95/x24f.f90 trunk/examples/f95/x25f.f90 trunk/examples/f95/x26f.f90 trunk/examples/f95/x27f.f90 Modified: trunk/examples/f95/CMakeLists.txt =================================================================== --- trunk/examples/f95/CMakeLists.txt 2008-08-14 13:45:08 UTC (rev 8650) +++ trunk/examples/f95/CMakeLists.txt 2008-08-14 14:23:28 UTC (rev 8651) @@ -45,6 +45,10 @@ "21" "22" "23" +"24" +"25" +"26" +"27" "28" "29" "30" Modified: trunk/examples/f95/Makefile.examples.in =================================================================== --- trunk/examples/f95/Makefile.examples.in 2008-08-14 13:45:08 UTC (rev 8650) +++ trunk/examples/f95/Makefile.examples.in 2008-08-14 14:23:28 UTC (rev 8651) @@ -52,6 +52,10 @@ x20f$(EXEEXT) \ x22f$(EXEEXT) \ x23f$(EXEEXT) \ + x24f$(EXEEXT) \ + x25f$(EXEEXT) \ + x26f$(EXEEXT) \ + x27f$(EXEEXT) \ x28f$(EXEEXT) \ x29f$(EXEEXT) \ x30f$(EXEEXT) Added: trunk/examples/f95/x24f.f90 =================================================================== --- trunk/examples/f95/x24f.f90 (rev 0) +++ trunk/examples/f95/x24f.f90 2008-08-14 14:23:28 UTC (rev 8651) @@ -0,0 +1,168 @@ +! $Id:$ +! +! Unicode Pace Flag +! +! Copyright (C) 2005 Rafael Laboissiere +! Copyright (2) 2008 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 General Library Public License as published +! by the Free Software Foundation; either version 2 of the License, or +! (at your option) any later version. +! +! 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 +! +! +! In Debian, run like this: +! +! ( TTFDIR=/usr/share/fonts/truetype ; \ +! PLPLOT_FREETYPE_SANS_FONT=$TTFDIR/arphic/bkai00mp.ttf \ +! PLPLOT_FREETYPE_SERIF_FONT=$TTFDIR/freefont/FreeSerif.ttf \ +! PLPLOT_FREETYPE_MONO_FONT=$TTFDIR/ttf-devanagari-fonts/lohit_hi.ttf \ +! PLPLOT_FREETYPE_SCRIPT_FONT=$TTFDIR/unfonts/UnBatang.ttf \ +! PLPLOT_FREETYPE_SYMBOL_FONT=$TTFDIR/ttf-bengali-fonts/JamrulNormal.ttf \ +! ./x24c -dev png -drvopt smooth=0 -o x24c.png ) +! +! Packages needed: +! +! ttf-arphic-bkai00mp +! ttf-freefont +! ttf-devanagari-fonts +! ttf-unfonts +! ttf-bengali-fonts +! + +program x24f + use plplot + implicit none + + integer i, j + integer red(7) + integer green(7) + integer blue(7) + + real(kind=plflt) px(4) + real(kind=plflt) py(4) + real(kind=plflt) sx(12) + real(kind=plflt) sy(12) + + character*30 peace(12) + + data (red(i) ,i=1,7) / 240, 204, 204, 204, 0, 39, 125 / + data (green(i) ,i=1,7) / 240, 0, 125, 204, 204, 80, 0 / + data (blue(i) ,i=1,7) / 240, 0, 0, 0, 0, 204, 125 / + + data (px(i) ,i=1,4) / 0.0d0, 0.0d0, 1.0d0, 1.0d0 / + data (py(i) ,i=1,4) / 0.0d0, 0.25d0, 0.25d0, 0.0d0 / + + data (sx(i) ,i=1,12) / & + 0.16374, & + 0.15844, & + 0.15255, & + 0.17332, & + 0.50436, & + 0.51721, & + 0.49520, & + 0.48713, & + 0.83976, & + 0.81688, & + 0.82231, & + 0.82647/ + + + data (sy(i) ,i=1,12) / & + 0.125, & + 0.375, & + 0.625, & + 0.875, & + 0.125, & + 0.375, & + 0.625, & + 0.875, & + 0.125, & + 0.375, & + 0.625, & + 0.875/ + + + ! Taken from http://www.columbia.edu/~fdc/pace/ + + ! Mandarin + peace(1) = '#<0x00>和平' + + ! Hindi + peace(2) = '#<0x20>शांति' + + ! English + peace(3) = '#<0x10>Peace' + + ! Hebrew + peace(4) = '#<0x10>שלום' + + ! Russian + peace(5) = '#<0x10>Мир' + + ! German + peace(6) = '#<0x10>Friede' + + ! Korean + peace(7) = '#<0x30>평화' + + ! French + peace(8) = '#<0x10>Paix' + + ! Spanish + peace(9) = '#<0x10>Paz' + + ! Arabic + peace(10) = '#<0x10>ﺳﻼم' + + ! Turkish + peace(11) = '#<0x10>Barış' + + ! Kurdish + peace(12) = '#<0x10>Hasîtî' + + call plparseopts(PL_PARSE_FULL) + + call plinit() + + call pladv(0) + call plvpor (0.0_plflt, 1.0_plflt, 0.0_plflt, 1.0_plflt) + call plwind (0.0_plflt, 1.0_plflt, 0.0_plflt, 1.0_plflt) + call plcol0 (0) + call plbox ('', 1.0_plflt, 0, '', 1.0_plflt, 0) + + call plscmap0n (7) + call plscmap0 (red, green, blue) + + call plschr (0.0_plflt, 4.0_plflt) + call plfont (1) + + do i = 1,4 + + call plcol0 (i); + call plfill (px, py) + + do j = 1,4 + py (j) = py (j) + 1.0_plflt / 4.0_plflt + enddo + enddo + + call plcol0 (0) + do i = 1,12 + call plptex (sx (i), sy (i), 1.0_plflt, 0.0_plflt, 0.5_plflt, peace (i)) + enddo + + call plend() + +end program x24f Property changes on: trunk/examples/f95/x24f.f90 ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/examples/f95/x25f.f90 =================================================================== --- trunk/examples/f95/x25f.f90 (rev 0) +++ trunk/examples/f95/x25f.f90 2008-08-14 14:23:28 UTC (rev 8651) @@ -0,0 +1,162 @@ +! $Id:$ +! +! Filling and clipping polygons. +! +! Copyright (C) 2005 Arjen Markus +! Copyright (C) 2008 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 General Library Public License as published +! by the Free Software Foundation; either version 2 of the License, or +! (at your option) any later version. +! +! 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 +! +! +! -------------------------------------------------------------------------- +! main +! +! Test program for filling polygons and proper clipping +! -------------------------------------------------------------------------- + +program x25f + + use plplot + implicit none + + integer i + integer j + integer npts + real(kind=plflt) xextreme(2,10) + real(kind=plflt) yextreme(2,10) + real(kind=plflt) x0(10) + real(kind=plflt) y0(10) + + data ( xextreme(1,i), xextreme(2,i), yextreme(1,i), yextreme(2,i), & + i=1,9) / & + -120.0_plflt, 120.0_plflt, -120.0_plflt, 120.0_plflt, & + -120.0_plflt, 120.0_plflt, 20.0_plflt, 120.0_plflt, & + -120.0_plflt, 120.0_plflt, -20.0_plflt, 120.0_plflt, & + -80.0_plflt, 80.0_plflt, -20.0_plflt, 120.0_plflt, & + -220.0_plflt, -120.0_plflt, -120.0_plflt, 120.0_plflt, & + -20.0_plflt, 20.0_plflt, -120.0_plflt, 120.0_plflt, & + -20.0_plflt, 20.0_plflt, -20.0_plflt, 20.0_plflt, & + -80.0_plflt, 80.0_plflt, -80.0_plflt, 80.0_plflt, & + 20.0_plflt, 120.0_plflt, -120.0_plflt, 120.0_plflt/ + + npts = 0 + + ! Parse and process command line arguments + + call plparseopts(PL_PARSE_FULL) + + ! Initialize plplot + + call plssub(3,3) + call plinit() + + do j = 1,4 + + if ( j .eq. 1 ) then + ! Polygon 1: a diamond + x0(1) = 0.0_plflt + y0(1) = -100.0_plflt + x0(2) = -100.0_plflt + y0(2) = 0.0_plflt + x0(3) = 0.0_plflt + y0(3) = 100.0_plflt + x0(4) = 100.0_plflt + y0(4) = 0.0_plflt + npts = 4 + endif + if ( j .eq. 2 ) then + ! Polygon 1: a diamond - reverse direction + x0(4) = 0.0_plflt + y0(4) = -100.0_plflt + x0(3) = -100.0_plflt + y0(3) = 0.0_plflt + x0(2) = 0.0_plflt + y0(2) = 100.0_plflt + x0(1) = 100.0_plflt + y0(1) = 0.0_plflt + npts = 4 + endif + if ( j .eq. 3 ) then + ! Polygon 2: a square with punctures + x0(1) = -100.0_plflt + y0(1) = -100.0_plflt + x0(2) = -100.0_plflt + y0(2) = -80.0_plflt + x0(3) = 80.0_plflt + y0(3) = 0.0_plflt + x0(4) = -100.0_plflt + y0(4) = 80.0_plflt + x0(5) = -100.0_plflt + y0(5) = 100.0_plflt + x0(6) = -80.0_plflt + y0(6) = 100.0_plflt + x0(7) = 0.0_plflt + y0(7) = 80.0_plflt + x0(8) = 80.0_plflt + y0(8) = 100.0_plflt + x0(9) = 100.0_plflt + y0(9) = 100.0_plflt + x0(10) = 100.0_plflt + y0(10) = -100.0_plflt + npts = 10 + endif + if ( j .eq. 4 ) then + ! Polygon 2: a square with punctures - reversed direction + x0(10) = -100.0_plflt + y0(10) = -100.0_plflt + x0(9) = -100.0_plflt + y0(9) = -80.0_plflt + x0(8) = 80.0_plflt + y0(8) = 0.0_plflt + x0(7) = -100.0_plflt + y0(7) = 80.0_plflt + x0(6) = -100.0_plflt + y0(6) = 100.0_plflt + x0(5) = -80.0_plflt + y0(5) = 100.0_plflt + x0(4) = 0.0_plflt + y0(4) = 80.0_plflt + x0(3) = 80.0_plflt + y0(3) = 100.0_plflt + x0(2) = 100.0_plflt + y0(2) = 100.0_plflt + x0(1) = 100.0_plflt + y0(1) = -100.0_plflt + npts = 10 + endif + + do i = 1,9 + call pladv(0) + call plvsta() + call plwind(xextreme(1,i), xextreme(2,i), & + yextreme(1,i), yextreme(2,i)) + + call plcol0(2) + call plbox('bc', 1.0d0, 0, 'bcnv', 10.0d0, 0) + call plcol0(1) + call plpsty(0) + call plfill(x0(1:npts),y0(1:npts)) + call plcol0(2) + call pllsty(1) + call plline(x0(1:npts),y0(1:npts)) + end do + end do + ! Don't forget to call plend() to finish off! + + call plend() + +end program x25f Property changes on: trunk/examples/f95/x25f.f90 ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/examples/f95/x26f.f90 =================================================================== --- trunk/examples/f95/x26f.f90 (rev 0) +++ trunk/examples/f95/x26f.f90 2008-08-14 14:23:28 UTC (rev 8651) @@ -0,0 +1,196 @@ +! -*- coding: utf-8; -*- +! +! $Id:$ +! +! Multi-lingual version of the first page of example 4. +! +! Copyright (C) 2006 Alan Irwin +! Copyright (C) 2006,2008 Andrew Ross +! +! Thanks to the following for providing translated strings for this example: +! Valery Pipin (Russian) +! +! This file is part of PLplot. +! +! PLplot is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Library Public License as published +! by the Free Software Foundation; either version 2 of the License, or +! (at your option) any later version. +! +! 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 +! +! + +! +! This example designed just for devices (e.g., psttfc and the +! cairo-related devices) that utilise the pango and fontconfig libraries. The +! best choice of glyph is selected by fontconfig and automatically rendered +! by pango in way that is sensitive to complex text layout (CTL) language +! issues for each unicode character in this example. Of course, you must +! have the appropriate TrueType fonts installed to have access to all the +! required glyphs. +! +! Translation instructions: The strings to be translated are given by +! x_label, y_label, alty_label, title_label, and line_label below. The +! encoding used must be UTF-8. +! +! The following strings to be translated involve some scientific/mathematical +! jargon which is now discussed further to help translators. +! +! (1) dB is a decibel unit, see http://en.wikipedia.org/wiki/Decibel . +! (2) degrees is an angular measure, see +! http://en.wikipedia.org/wiki/Degree_(angle) . +! (3) low-pass filter is one that transmits (passes) low frequencies. +! (4) pole is in the mathematical sense, see +! http://en.wikipedia.org/wiki/Pole_(complex_analysis) . "Single Pole" +! means a particular mathematical transformation of the filter function has +! a single pole, see +! http://ccrma.stanford.edu/~jos/filters/Pole_Zero_Analysis_I.html . +! Furthermore, a single-pole filter must have an inverse square decline +! (or -20 db/decade). Since the filter plotted here does have that +! characteristic, it must by definition be a single-pole filter, see also +! http://www-k.ext.ti.com/SRVS/Data/ti/KnowledgeBases/analog/document/faqs/1p.htm +! (5) decade represents a factor of 10, see +! http://en.wikipedia.org/wiki/Decade_(log_scale) . +! +! +! + +! -------------------------------------------------------------------------- +! main +! +! Illustration of logarithmic axes, and redefinition of window. +! -------------------------------------------------------------------------- + +program x26f + + use plplot, PI => PL_PI + implicit none + + integer nolangs + parameter ( nolangs = 2 ) + + character*80 x_label(nolangs) + character*80 y_label(nolangs) + character*80 alty_label(nolangs) + character*80 title_label(nolangs) + character*80 line_label(nolangs) + + integer i + + data (x_label(i) ,i=1,nolangs) / & + 'Frequency', & + 'Частота'/ + + data (y_label(i) ,i=1,nolangs) / & + 'Amplitude (dB)', & + 'Амплитуда (dB)'/ + + data (alty_label(i) ,i=1,nolangs) / & + 'Phase shift (degrees)', & + 'Фазовый сдвиг (градусы)'/ + + data (title_label(i) ,i=1,nolangs) / & + 'Single Pole Low-Pass Filter', & + 'Однополюсный Низко-Частотный Фильтр'/ + + data (line_label(i) ,i=1,nolangs) / & + '-20 dB/decade', & + '-20 dB/десяток'/ + + ! Parse and process command line arguments + + call plparseopts(PL_PARSE_FULL) + + ! Initialize plplot + + call plinit() + call plfont(2) + + ! Make log plots using two different styles. + + do i = 1,nolangs + call plot1(0, x_label(i), y_label(i), alty_label(i), & + title_label(i), line_label(i)) + end do + call plend() + +end program x26f + + ! -------------------------------------------------------------------------- + ! plot1 + ! + ! Log-linear plot. + ! -------------------------------------------------------------------------- + + subroutine plot1( type, x_label, y_label, alty_label, & + title_label, line_label ) + + use plplot, PI => PL_PI + implicit none + + integer type + character(*) x_label, y_label, alty_label, title_label, line_label + + integer i + real(kind=plflt) freql(101), ampl(101), phase(101) + real(kind=plflt) f0, freq + + call pladv(0) + + ! Set up data for log plot + + f0 = 1.0 + do i = 1,101 + freql(i) = -2.0_plflt + (i-1) / 20.0_plflt + freq = 10.0_plflt ** freql(i) + ampl(i) = 20.0_plflt * log10(1.0_plflt / sqrt(1.0_plflt + (freq/f0)**2)) + phase(i) = -(180.0_plflt / PI) * atan(freq / f0) + end do + call plvpor(0.15_plflt, 0.85_plflt, 0.1_plflt, 0.9_plflt) + call plwind(-2.0_plflt, 3.0_plflt, -80.0_plflt, 0.0_plflt) + + ! Try different axis and labelling styles. + + call plcol0(1) + if ( type .eq. 0 ) then + call plbox("bclnst", 0.0_plflt, 0, "bnstv", 0.0_plflt, 0) + endif + if ( type .eq. 1 ) then + call plbox("bcfghlnst", 0.0_plflt, 0, "bcghnstv", 0.0_plflt, 0) + endif + + ! Plot ampl vs freq + + call plcol0(2) + call plline(freql, ampl) + call plcol0(1) + call plptex(1.6_plflt, -30.0_plflt, 1.0_plflt, -20.0_plflt, 0.5_plflt, line_label) + + ! Put labels on + + call plcol0(1) + call plmtex("b", 3.2_plflt, 0.5_plflt, 0.5_plflt, x_label) + call plmtex("t", 2.0_plflt, 0.5_plflt, 0.5_plflt, title_label) + call plcol0(2) + call plmtex("l", 5.0_plflt, 0.5_plflt, 0.5_plflt, y_label) + + ! For the gridless case, put phase vs freq on same plot + + if (type .eq. 0) then + call plcol0(1) + call plwind(-2.0_plflt, 3.0_plflt, -100.0_plflt, 0.0_plflt) + call plbox("", 0.0_plflt, 0, "cmstv", 30.0_plflt, 3) + call plcol0(3) + call plline(freql, phase) + call plcol0(3) + call plmtex("r", 5.0_plflt, 0.5_plflt, 0.5_plflt, alty_label) + endif + end subroutine plot1 Property changes on: trunk/examples/f95/x26f.f90 ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/examples/f95/x27f.f90 =================================================================== --- trunk/examples/f95/x27f.f90 (rev 0) +++ trunk/examples/f95/x27f.f90 2008-08-14 14:23:28 UTC (rev 8651) @@ -0,0 +1,169 @@ +! $Id:$ +! +! Drawing "spirograph" curves - epitrochoids, cycolids, roulettes +! +! Copyright (C) 2007 Arjen Markus +! Copyright (C) 2008 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 General Library Public License as published +! by the Free Software Foundation; either version 2 of the License, or +! (at your option) any later version. +! +! 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 +! +! + +! -------------------------------------------------------------------------- +! main +! +! Generates two kinds of plots: +! - construction of a cycloid (animated) +! - series of epitrochoids and hypotrochoids +! -------------------------------------------------------------------------- + +program x27f + + use plplot + implicit none + + ! R, r, p, N + + real(kind=plflt) params(4,9) + + integer i, j + + data ( ( params(i,j) ,i=1,4) ,j=1,9 ) / & + 21.0_plflt, 7.0_plflt, 7.0_plflt, 3.0_plflt, & + 21.0_plflt, 7.0_plflt, 10.0_plflt, 3.0_plflt, & + 21.0_plflt, -7.0_plflt, 10.0_plflt, 3.0_plflt, & + 20.0_plflt, 3.0_plflt, 7.0_plflt, 20.0_plflt, & + 20.0_plflt, 3.0_plflt, 10.0_plflt, 20.0_plflt, & + 20.0_plflt, -3.0_plflt, 10.0_plflt, 20.0_plflt, & + 20.0_plflt, 13.0_plflt, 7.0_plflt, 20.0_plflt, & + 20.0_plflt, 13.0_plflt, 20.0_plflt, 20.0_plflt, & + 20.0_plflt,-13.0_plflt, 20.0_plflt, 20.0_plflt/ + + ! plplot initialization + + ! Parse and process command line arguments + + call plparseopts(PL_PARSE_FULL) + + ! Initialize plplot + + call plinit() + + ! Illustrate the construction of a cycloid + + call cycloid() + + ! Loop over the various curves + ! First an overview, then all curves one by one + + call plssub(3, 3) + + do i = 1,9 + call pladv(0) + call plvpor( 0.0_plflt, 1.0_plflt, 0.0_plflt, 1.0_plflt ) + call spiro( params(1,i) ) + end do + call pladv(0) + call plssub(1, 1) + + do i = 1,9 + call pladv(0) + call plvpor( 0.0_plflt, 1.0_plflt, 0.0_plflt, 1.0_plflt ) + call spiro( params(1,i) ) + end do + ! Don't forget to call plend() to finish off! + + call plend() + +end program x27f + +! =============================================================== + +subroutine cycloid + + ! TODO + +end subroutine cycloid + +! =============================================================== + +subroutine spiro( params ) + + use plplot + implicit none + + real(kind=plflt) params(*) + integer NPNT + parameter ( NPNT = 20000 ) + integer n + real(kind=plflt) xcoord(NPNT+1) + real(kind=plflt) ycoord(NPNT+1) + + integer windings + integer steps + integer i + real(kind=plflt) phi + real(kind=plflt) phiw + real(kind=plflt) dphi + real(kind=plflt) xmin + real(kind=plflt) xmax + real(kind=plflt) ymin + real(kind=plflt) ymax + real(kind=plflt) scale + + ! Fill the coordinates + + windings = int(params(4)) + steps = NPNT/windings + dphi = 8.0_plflt*acos(-1.0_plflt)/dble(steps) + + ! This initialisation is safe! + xmin = 0.0_plflt + xmax = 0.0_plflt + ymin = 0.0_plflt + ymax = 0.0_plflt + + n = windings*steps+1 + + do i = 1,n + phi = dble(i-1) * dphi + phiw = (params(1)-params(2))/params(2)*phi + xcoord(i) = (params(1)-params(2))*cos(phi)+params(3)*cos(phiw) + ycoord(i) = (params(1)-params(2))*sin(phi)-params(3)*sin(phiw) + + if ( xmin > xcoord(i) ) xmin = xcoord(i) + if ( xmax < xcoord(i) ) xmax = xcoord(i) + if ( ymin > ycoord(i) ) ymin = ycoord(i) + if ( ymax < ycoord(i) ) ymax = ycoord(i) + end do + + if ( xmax-xmin > ymax-ymin ) then + scale = xmax - xmin + else + scale = ymax - ymin + endif + xmin = - 0.65_plflt * scale + xmax = 0.65_plflt * scale + ymin = - 0.65_plflt * scale + ymax = 0.65_plflt * scale + + call plwind( xmin, xmax, ymin, ymax ) + + call plcol0(1) + call plline(xcoord(1:n), ycoord(1:n) ) + +end subroutine spiro Property changes on: trunk/examples/f95/x27f.f90 ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/plplot_test/test_f95.sh.in =================================================================== --- trunk/plplot_test/test_f95.sh.in 2008-08-14 13:45:08 UTC (rev 8650) +++ trunk/plplot_test/test_f95.sh.in 2008-08-14 14:23:28 UTC (rev 8651) @@ -53,7 +53,7 @@ # Do the standard non-interactive examples. # skip 14 and 17 because they are interactive. - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 28 29 30; do + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30; do if [ "$verbose_test" ]; then echo "x${index}f" fi @@ -98,7 +98,7 @@ # Do the standard non-interactive examples. # skip 14 and 17 because they are interactive. - for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 28 29 30; do + for index in 01 02 03 04 05 06 07 08 09 10 11 12 13 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30; do if [ "$verbose_test" ]; then echo "x${index}f" fi This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-08-14 14:28:22
|
Revision: 8652 http://plplot.svn.sourceforge.net/plplot/?rev=8652&view=rev Author: andrewross Date: 2008-08-14 14:28:28 +0000 (Thu, 14 Aug 2008) Log Message: ----------- Update install tree makefiles to reflect recent updates to the examples. Modified Paths: -------------- trunk/bindings/octave/demos/plplot_octave_demo.m trunk/examples/c++/Makefile.examples.in trunk/examples/f77/Makefile.examples.in trunk/examples/f95/Makefile.examples.in trunk/examples/java/Makefile.examples.in trunk/examples/python/CMakeLists.txt Modified: trunk/bindings/octave/demos/plplot_octave_demo.m =================================================================== --- trunk/bindings/octave/demos/plplot_octave_demo.m 2008-08-14 14:23:28 UTC (rev 8651) +++ trunk/bindings/octave/demos/plplot_octave_demo.m 2008-08-14 14:28:28 UTC (rev 8652) @@ -28,7 +28,7 @@ plplot_stub; -for i=[1:19,22]; +for i=[1:30]; ## To set defaults, use plSetOpt, as used in the command line, e.g. ## plSetOpt("dev", "png"); ## plSetOpt("o", "foo.ps"); Modified: trunk/examples/c++/Makefile.examples.in =================================================================== --- trunk/examples/c++/Makefile.examples.in 2008-08-14 14:23:28 UTC (rev 8651) +++ trunk/examples/c++/Makefile.examples.in 2008-08-14 14:28:28 UTC (rev 8652) @@ -59,6 +59,7 @@ x24$(EXEEXT) \ x25$(EXEEXT) \ x26$(EXEEXT) \ + x27$(EXEEXT) \ x28$(EXEEXT) \ x29$(EXEEXT) \ x30$(EXEEXT) \ Modified: trunk/examples/f77/Makefile.examples.in =================================================================== --- trunk/examples/f77/Makefile.examples.in 2008-08-14 14:23:28 UTC (rev 8651) +++ trunk/examples/f77/Makefile.examples.in 2008-08-14 14:28:28 UTC (rev 8652) @@ -50,10 +50,15 @@ x18f$(EXEEXT) \ x19f$(EXEEXT) \ x20f$(EXEEXT) \ + x21f$(EXEEXT) \ x22f$(EXEEXT) \ x23f$(EXEEXT) \ x24f$(EXEEXT) \ + x25f$(EXEEXT) \ + x26f$(EXEEXT) \ + x27f$(EXEEXT) \ x28f$(EXEEXT) \ + x28f$(EXEEXT) \ x29f$(EXEEXT) \ x30f$(EXEEXT) Modified: trunk/examples/f95/Makefile.examples.in =================================================================== --- trunk/examples/f95/Makefile.examples.in 2008-08-14 14:23:28 UTC (rev 8651) +++ trunk/examples/f95/Makefile.examples.in 2008-08-14 14:28:28 UTC (rev 8652) @@ -50,6 +50,7 @@ x18f$(EXEEXT) \ x19f$(EXEEXT) \ x20f$(EXEEXT) \ + x21f$(EXEEXT) \ x22f$(EXEEXT) \ x23f$(EXEEXT) \ x24f$(EXEEXT) \ Modified: trunk/examples/java/Makefile.examples.in =================================================================== --- trunk/examples/java/Makefile.examples.in 2008-08-14 14:23:28 UTC (rev 8651) +++ trunk/examples/java/Makefile.examples.in 2008-08-14 14:28:28 UTC (rev 8652) @@ -48,6 +48,7 @@ x23.class \ x24.class \ x26.class \ + x27.class \ x28.class \ x29.class \ x30.class Modified: trunk/examples/python/CMakeLists.txt =================================================================== --- trunk/examples/python/CMakeLists.txt 2008-08-14 14:23:28 UTC (rev 8651) +++ trunk/examples/python/CMakeLists.txt 2008-08-14 14:28:28 UTC (rev 8652) @@ -34,6 +34,7 @@ "13" "15" "16" +"17" "18" "19" "20" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2008-08-15 00:30:20
|
Revision: 8660 http://plplot.svn.sourceforge.net/plplot/?rev=8660&view=rev Author: airwin Date: 2008-08-15 00:30:29 +0000 (Fri, 15 Aug 2008) Log Message: ----------- AWI for Hezekiah M. Carty. Add 10th, 12th, and 13th standard examples. Their results agree exactly with the corresponding C results. Modified Paths: -------------- trunk/examples/ocaml/CMakeLists.txt trunk/examples/ocaml/Makefile.examples.in trunk/plplot_test/test_ocaml.sh.in Added Paths: ----------- trunk/examples/ocaml/x10.ml trunk/examples/ocaml/x12.ml trunk/examples/ocaml/x13.ml Modified: trunk/examples/ocaml/CMakeLists.txt =================================================================== --- trunk/examples/ocaml/CMakeLists.txt 2008-08-15 00:28:15 UTC (rev 8659) +++ trunk/examples/ocaml/CMakeLists.txt 2008-08-15 00:30:29 UTC (rev 8660) @@ -29,7 +29,10 @@ "06" "07" "08" + "10" "11" + "12" + "13" "19" ) Modified: trunk/examples/ocaml/Makefile.examples.in =================================================================== --- trunk/examples/ocaml/Makefile.examples.in 2008-08-15 00:28:15 UTC (rev 8659) +++ trunk/examples/ocaml/Makefile.examples.in 2008-08-15 00:30:29 UTC (rev 8660) @@ -36,7 +36,10 @@ x06$(EXEEXT) \ x07$(EXEEXT) \ x08$(EXEEXT) \ + x10$(EXEEXT) \ x11$(EXEEXT) \ + x12$(EXEEXT) \ + x13$(EXEEXT) \ x19$(EXEEXT) \ all: $(EXECUTABLES_list) Added: trunk/examples/ocaml/x10.ml =================================================================== --- trunk/examples/ocaml/x10.ml (rev 0) +++ trunk/examples/ocaml/x10.ml 2008-08-15 00:30:29 UTC (rev 8660) @@ -0,0 +1,28 @@ +(* $Id$ + + Window positioning demo. +*) + +open Plplot + +(*--------------------------------------------------------------------------*\ + * Demonstrates absolute positioning of graphs on a page. +\*--------------------------------------------------------------------------*) +let () = + (* Parse and process command line arguments *) + ignore (plparseopts Sys.argv [|PL_PARSE_FULL|]); + + (* Initialize plplot *) + plinit (); + + pladv 0; + plvpor 0.0 1.0 0.0 1.0; + plwind 0.0 1.0 0.0 1.0; + plbox "bc" 0.0 0 "bc" 0.0 0; + + plsvpa 50.0 150.0 50.0 100.0; + plwind 0.0 1.0 0.0 1.0; + plbox "bc" 0.0 0 "bc" 0.0 0; + plptex 0.5 0.5 1.0 0.0 0.5 "BOX at (50,150,50,100)"; + plend (); + () Property changes on: trunk/examples/ocaml/x10.ml ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/examples/ocaml/x12.ml =================================================================== --- trunk/examples/ocaml/x12.ml (rev 0) +++ trunk/examples/ocaml/x12.ml 2008-08-15 00:30:29 UTC (rev 8660) @@ -0,0 +1,50 @@ +(* $Id$ + Bar chart demo. +*) + +open Plplot + +let plfbox x0 y0 = + let x = [|x0; x0; x0 +. 1.0; x0 +. 1.0|] in + let y = [|0.0; y0; y0; 0.0|] in + plfill x y; + plcol0 1; + pllsty 1; + plline x y; + () + +(*--------------------------------------------------------------------------*\ + * Does a simple bar chart, using color fill. If color fill is + * unavailable, pattern fill is used instead (automatic). +\*--------------------------------------------------------------------------*) + +let () = + (* Parse and process command line arguments *) + ignore (plparseopts Sys.argv [|PL_PARSE_FULL|]); + + (* Initialize plplot *) + plinit (); + + pladv 0; + plvsta (); + plwind 1980.0 1990.0 0.0 35.0; + plbox "bc" 1.0 0 "bcnv" 10.0 0; + plcol0 2; + pllab "Year" "Widget Sales (millions)" "#frPLplot Example 12"; + + let y0 = [|5.0; 15.0; 12.0; 24.0; 28.0; 30.0; 20.0; 8.0; 12.0; 3.0|] in + + for i = 0 to 9 do + plcol0 (i + 1); + plpsty 0; + plfbox (1980.0 +. float_of_int i) y0.(i); + let text = Printf.sprintf "%.0f" y0.(i) in + plptex (1980.0 +. float_of_int i +. 0.5) (y0.(i) +. 1.0) 1.0 0.0 0.5 text; + let text = string_of_int (1980 + i) in + plmtex "b" 1.0 (float_of_int (i + 1) *. 0.1 -. 0.05) 0.5 text; + done; + + (* Don't forget to call plend() to finish off! *) + plend (); + () + Property changes on: trunk/examples/ocaml/x12.ml ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/examples/ocaml/x13.ml =================================================================== --- trunk/examples/ocaml/x13.ml (rev 0) +++ trunk/examples/ocaml/x13.ml 2008-08-15 00:30:29 UTC (rev 8660) @@ -0,0 +1,80 @@ +(* $Id$ + Pie chart demo. +*) + +open Plplot + +let pi = atan 1.0 *. 4.0 + +let text = [| + "Maurice"; + "Geoffrey"; + "Alan"; + "Rafael"; + "Vince"; +|] + +(*--------------------------------------------------------------------------*\ + * Does a simple pie chart. +\*--------------------------------------------------------------------------*) + +let () = + let x = Array.make 500 0.0 in + let y = Array.make 500 0.0 in + let per = [|10.0; 32.0; 12.0; 30.0; 16.0|] in + + (* Parse and process command line arguments *) + ignore (plparseopts Sys.argv [|PL_PARSE_FULL|]); + + (* Initialize plplot *) + plinit (); + + plenv 0.0 10.0 0.0 10.0 1 (-2); + plcol0 2; + (* All theta quantities scaled by 2*M_PI/500 to be integers to avoid + floating point logic problems. *) + let theta0 = ref 0 in + for i = 0 to 4 do + let j = ref 0 in + x.(!j) <- 5.0; + y.(!j) <- 5.0; + incr j; + (* Theta quantities multiplied by 2*M_PI/500 afterward so + in fact per is interpreted as a percentage. *) + let theta1 = + if i = 4 then + 500 + else + int_of_float (float_of_int !theta0 +. 5.0 *. per.(i)) + in + for theta = !theta0 to theta1 do + x.(!j) <- 5.0 +. 3.0 *. cos ((2.0 *. pi /. 500.0) *. float_of_int theta); + y.(!j) <- 5.0 +. 3.0 *. sin ((2.0 *. pi /. 500.0) *. float_of_int theta); + incr j; + done; + let x' = Array.sub x 0 !j in + let y' = Array.sub y 0 !j in + plcol0 (i + 1); + plpsty ((i + 3) mod 8 + 1); + plfill x' y'; + plcol0 1; + plline x' y'; + let just = (2.0 *. pi /. 500.0) *. float_of_int (!theta0 + theta1) /. 2.0 in + let dx = 0.25 *. cos just in + let dy = 0.25 *. sin just in + let just = + if (!theta0 + theta1 < 250 || !theta0 + theta1 > 750) then + 0.0 + else + 1.0 + in + plptex (x.(!j / 2) +. dx) (y.(!j / 2) +. dy) 1.0 0.0 just text.(i); + theta0 := theta1; + done; + plfont 2; + plschr 0.0 1.3; + plptex 5.0 9.0 1.0 0.0 0.5 "Percentage of Sales"; + + (* Don't forget to call PLEND to finish off! *) + plend (); + () Property changes on: trunk/examples/ocaml/x13.ml ___________________________________________________________________ Added: svn:eol-style + native Modified: trunk/plplot_test/test_ocaml.sh.in =================================================================== --- trunk/plplot_test/test_ocaml.sh.in 2008-08-15 00:28:15 UTC (rev 8659) +++ trunk/plplot_test/test_ocaml.sh.in 2008-08-15 00:30:29 UTC (rev 8660) @@ -23,7 +23,7 @@ # $options, and possibly $verbose_test defined. # Do the standard non-interactive examples. -for index in 01 02 03 04 05 06 07 08 11 19; do +for index in 01 02 03 04 05 06 07 08 10 11 12 13 19; do if [ "$verbose_test" ]; then echo "x${index}ocaml" fi This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |