plplot 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +115 -0
- data/examples/x01.rb +284 -0
- data/examples/x02.rb +134 -0
- data/examples/x03.rb +81 -0
- data/examples/x04.rb +98 -0
- data/examples/x05.rb +33 -0
- data/examples/x06.rb +62 -0
- data/examples/x07.rb +69 -0
- data/examples/x08.rb +179 -0
- data/examples/x09.rb +371 -0
- data/examples/x10.rb +29 -0
- data/examples/x11.rb +151 -0
- data/examples/x12.rb +65 -0
- data/examples/x13.rb +86 -0
- data/examples/x14.rb +391 -0
- data/examples/x15.rb +266 -0
- data/examples/x16.rb +349 -0
- data/examples/x18.rb +146 -0
- data/examples/x20.rb +360 -0
- data/examples/x21.rb +280 -0
- data/examples/x22.rb +242 -0
- data/examples/x23.rb +361 -0
- data/examples/x24.rb +126 -0
- data/examples/x25.rb +114 -0
- data/examples/x26.rb +180 -0
- data/examples/x27.rb +124 -0
- data/examples/x28.rb +369 -0
- data/examples/x30.rb +141 -0
- data/examples/x31.rb +238 -0
- data/examples/x32.rb +159 -0
- data/ext/depend +1 -0
- data/ext/extconf.rb +75 -0
- data/ext/rbplplot.c +4982 -0
- data/lib/plplot.rb +101 -0
- metadata +115 -0
data/README
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
--
|
2
|
+
|
3
|
+
This file includes an RDoc hack so that links can be made to open up into a new
|
4
|
+
frame rather then the current frame.
|
5
|
+
|
6
|
+
The "trick" is to append ``"target="_top'' to the URL.
|
7
|
+
|
8
|
+
++
|
9
|
+
|
10
|
+
= Ruby/PLplot
|
11
|
+
|
12
|
+
== Introduction
|
13
|
+
|
14
|
+
This is the first public release of the Ruby bindings to
|
15
|
+
PLplot[http://plplot.sourceforge.net/"target="_top], a cross-platform software
|
16
|
+
package for creating scientific plots.
|
17
|
+
|
18
|
+
This release should be considered a beta release because the {Ruby API to
|
19
|
+
PLplot}[link:classes/PLplot.html] may change slightly based on user feedback.
|
20
|
+
|
21
|
+
== Installation
|
22
|
+
|
23
|
+
Ruby/PLplot can be installed via
|
24
|
+
RubyGems[http://www.rubygems.org/"target=_top"]:
|
25
|
+
|
26
|
+
gem install plplot
|
27
|
+
|
28
|
+
Ruby/PLplot should work with either Ruby 1.8 or 1.9. It was developed mostly
|
29
|
+
using Ruby 1.8.6 and somewhat tested against Ruby 1.9.1.
|
30
|
+
|
31
|
+
Ruby/PLplot requires a very recent version of the \PLplot libraries. Until a
|
32
|
+
new version of \PLplot is released and package maintainers support it, you will
|
33
|
+
likely have to build your own copy of the \PLplot libraries from source code
|
34
|
+
checked out from the trunk of the \PLplot source code repository. This must be
|
35
|
+
done prior to installing Ruby/PLplot. If you try to install Ruby/PLplot with
|
36
|
+
an inappropriate version of \PLplot, you will get the error message "the
|
37
|
+
\PLplot library lacks support for arbitrary storage of 2D data".
|
38
|
+
|
39
|
+
== Documentation
|
40
|
+
|
41
|
+
Documentation for the {Ruby aspects of the PLplot
|
42
|
+
API}[link:classes/PLplot.html] are installed as part of the gem-based
|
43
|
+
installation. To view the documentation, run
|
44
|
+
|
45
|
+
gem server
|
46
|
+
|
47
|
+
then point your browser to <tt>\http://localhost:8808/</tt> and navigate to
|
48
|
+
(and follow) the plplot <b>[rdoc]</b> link. You can get more information about
|
49
|
+
RubyGem's documenation server by running:
|
50
|
+
|
51
|
+
gem help server
|
52
|
+
|
53
|
+
The Ruby/PLplot API is mostly very similar to the \PLplot C API. For details
|
54
|
+
on \PLplot functionality, see the {PLplot
|
55
|
+
documentation}[http://plplot.sourceforge.net/documentation.php"target="_top].
|
56
|
+
|
57
|
+
== Examples
|
58
|
+
|
59
|
+
Ruby/PLplot provides Ruby versions of the extensive suite of \PLplot's standard
|
60
|
+
examples. The only \PLplot examples not (yet) supported are those that depend
|
61
|
+
on missing functionality (see below): x17 (stripchart), x19 (maps), and x29
|
62
|
+
(time handling).
|
63
|
+
|
64
|
+
The examples are installed automatically, but not as runnable programs. They
|
65
|
+
are "hidden" in the local gem repository. At some point they will be made more
|
66
|
+
visible, but until then you can find them in
|
67
|
+
<tt>$GEMDIR/gems/plplot-X.Y.Z/examples</tt>.
|
68
|
+
|
69
|
+
== Command line option parsing
|
70
|
+
|
71
|
+
\PLplot has many different drivers and options that can be specified by the
|
72
|
+
user. \PLplot provides excellent command line parsing functionality via its
|
73
|
+
<tt>plparseopts</tt> and related functions. Ruby also provides excellent
|
74
|
+
command line parsing via the OptionParser class. In order to provide the best
|
75
|
+
of both worlds, Ruby/PLplot provides the PLOptionParser class. This class
|
76
|
+
provides OptionParser functionality (it is a subclass of OptionParser) with
|
77
|
+
built-in support for standard \PLplot options via a modified option syntax.
|
78
|
+
|
79
|
+
Ruby/PLplot users are encouraged to use PLOptionParser for parsing command line
|
80
|
+
arguments, but it is not required. The Ruby <tt>plsetopt</tt> method is an
|
81
|
+
enhanced version of \PLplot's <tt>plsetopt</tt> function. In addition to the
|
82
|
+
"standard" calling sequence
|
83
|
+
|
84
|
+
plsetopt(opt, optarg)
|
85
|
+
|
86
|
+
<tt>plsetopt</tt> can be called with an Array of Strings (such as
|
87
|
+
<tt>ARGV</tt>) which provides functionality similar to <tt>plparseopts</tt>.
|
88
|
+
This allows for a great deal of user control over how command line arguments
|
89
|
+
are handled while still providing a simple way to leverage \PLplot's built-in
|
90
|
+
command line parsing capabilties.
|
91
|
+
|
92
|
+
== What's missing
|
93
|
+
|
94
|
+
Most of the \PLplot API is supported, but there are a few \PLplot functions
|
95
|
+
that have yet to be incorporated:
|
96
|
+
|
97
|
+
* Stripchart functions
|
98
|
+
- <tt>plstripa</tt>
|
99
|
+
- <tt>plstripc</tt>
|
100
|
+
- <tt>plstripd</tt>
|
101
|
+
|
102
|
+
* Time functions
|
103
|
+
- <tt>plbtime</tt>
|
104
|
+
- <tt>plconfigtime</tt>
|
105
|
+
- <tt>plctime</tt>
|
106
|
+
|
107
|
+
* Map functions
|
108
|
+
- <tt>plmap</tt>
|
109
|
+
- <tt>plmeridians</tt>
|
110
|
+
|
111
|
+
* Other functions
|
112
|
+
- <tt>plot3dcl</tt>
|
113
|
+
- <tt>plsmem</tt>
|
114
|
+
- <tt>plparseopts</tt> et al (but see above)
|
115
|
+
- <tt>plsurf3dl</tt>
|
data/examples/x01.rb
ADDED
@@ -0,0 +1,284 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$-w = true if $0 == __FILE__
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'plplot'
|
6
|
+
include PLplot
|
7
|
+
include NMath
|
8
|
+
|
9
|
+
# Simple line plot and multiple windows demo.
|
10
|
+
#
|
11
|
+
# Copyright (C) 2004 Rafael Laboissiere
|
12
|
+
#
|
13
|
+
# This file is part of PLplot.
|
14
|
+
#
|
15
|
+
# PLplot is free software; you can redistribute it and/or modify
|
16
|
+
# it under the terms of the GNU General Library Public License as published
|
17
|
+
# by the Free Software Foundation; either version 2 of the License, or
|
18
|
+
# (at your option) any later version.
|
19
|
+
#
|
20
|
+
# PLplot is distributed in the hope that it will be useful,
|
21
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
22
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
23
|
+
# GNU Library General Public License for more details.
|
24
|
+
#
|
25
|
+
# You should have received a copy of the GNU Library General Public License
|
26
|
+
# along with PLplot; if not, write to the Free Software
|
27
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
28
|
+
|
29
|
+
|
30
|
+
# Defaults for user options. Use global variables to track user options since
|
31
|
+
# that matches the C example most closely.
|
32
|
+
|
33
|
+
$locate_mode = false
|
34
|
+
$test_xor = false
|
35
|
+
$fontset = 1
|
36
|
+
$f_name = nil
|
37
|
+
|
38
|
+
# Create PLOptionParser for parsing options
|
39
|
+
|
40
|
+
PLOP = PLOptionParser.new do |op|
|
41
|
+
op.separator('')
|
42
|
+
op.separator('x01 options:')
|
43
|
+
op.on('--locate', 'Turns on test of API locate function') do
|
44
|
+
$locate_mode = true
|
45
|
+
end
|
46
|
+
op.on('--xor', 'Turns on test of XOR') do
|
47
|
+
$test_xor = true
|
48
|
+
end
|
49
|
+
op.on('--font={0|1}', Integer, 'Selects stroke font set [1]') do |o|
|
50
|
+
raise "font must be 0 or 1" unless (0..1) === o
|
51
|
+
$font = o
|
52
|
+
end
|
53
|
+
op.on('--save=FILE', 'Save plot in color postscript file FILE') do |o|
|
54
|
+
$f_name = o
|
55
|
+
end
|
56
|
+
op.separator('')
|
57
|
+
op.separator('Make sure you get it right!')
|
58
|
+
end
|
59
|
+
|
60
|
+
def plot1(xscale, yscale, xoff, yoff, do_test)
|
61
|
+
|
62
|
+
x = NArray.float(60).indgen!(1).mul!(xscale/60.0).add!(xoff)
|
63
|
+
y = (x**2).mul!(yscale).add!(yoff)
|
64
|
+
|
65
|
+
xmin = x[0]
|
66
|
+
xmax = x[59]
|
67
|
+
ymin = y[0]
|
68
|
+
ymax = y[59]
|
69
|
+
|
70
|
+
xs=[]
|
71
|
+
ys=[]
|
72
|
+
|
73
|
+
6.times do |i|
|
74
|
+
xs[i] = x[i * 10 + 3]
|
75
|
+
ys[i] = y[i * 10 + 3]
|
76
|
+
end
|
77
|
+
|
78
|
+
# Set up the viewport and window using PLENV. The range in X is
|
79
|
+
# 0.0 to 6.0, and the range in Y is 0.0 to 30.0. The axes are
|
80
|
+
# scaled separately (just = 0), and we just draw a labelled
|
81
|
+
# box (axis = 0).
|
82
|
+
|
83
|
+
plcol0(1)
|
84
|
+
plenv(xmin, xmax, ymin, ymax, 0, 0)
|
85
|
+
plcol0(2)
|
86
|
+
pllab("(x)", "(y)", "#frPLplot Example 1 - y=x#u2")
|
87
|
+
|
88
|
+
# Plot the data points
|
89
|
+
|
90
|
+
plcol0(4)
|
91
|
+
plpoin(xs, ys, 9)
|
92
|
+
|
93
|
+
# Draw the line through the data
|
94
|
+
|
95
|
+
plcol0(3)
|
96
|
+
plline(x, y)
|
97
|
+
|
98
|
+
# xor mode enable erasing a line/point/text by replotting it again
|
99
|
+
# it does not work in double buffering mode, however
|
100
|
+
|
101
|
+
if do_test && $test_xor
|
102
|
+
st = plxormod(true) # enter xor mode
|
103
|
+
if (st)
|
104
|
+
60.times do |i|
|
105
|
+
plpoin(x[i], y[i], 9) # draw a point
|
106
|
+
sleep(0.050) # wait a little
|
107
|
+
plflush # force an update of the tk driver
|
108
|
+
plpoin(x[i], y[i], 9) # erase point
|
109
|
+
end
|
110
|
+
plxormod(0) # leave xor mode
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# ===============================================================
|
116
|
+
|
117
|
+
def plot2
|
118
|
+
|
119
|
+
# Set up the viewport and window using PLENV. The range in X is -2.0 to
|
120
|
+
# 10.0, and the range in Y is -0.4 to 2.0. The axes are scaled separately
|
121
|
+
# (just = 0), and we draw a box with axes (axis = 1).
|
122
|
+
|
123
|
+
plcol0(1)
|
124
|
+
plenv(-2.0, 10.0, -0.4, 1.2, 0, 1)
|
125
|
+
plcol0(2)
|
126
|
+
pllab("(x)", "sin(x)/x", "#frPLplot Example 1 - Sinc Function")
|
127
|
+
|
128
|
+
# Fill up the arrays
|
129
|
+
|
130
|
+
x = NArray.float(100).indgen!(-19).div!(6)
|
131
|
+
y = sin(x)/x
|
132
|
+
y[x.eq(0).where] = 1.0
|
133
|
+
|
134
|
+
# Draw the line
|
135
|
+
|
136
|
+
plcol0(3)
|
137
|
+
plwid(2)
|
138
|
+
plline(x, y)
|
139
|
+
plwid(0) # Restore default(?)
|
140
|
+
end
|
141
|
+
|
142
|
+
# ===============================================================
|
143
|
+
|
144
|
+
def plot3
|
145
|
+
|
146
|
+
space1 = 1500
|
147
|
+
mark1 = 1500
|
148
|
+
|
149
|
+
# For the final graph we wish to override the default tick intervals, and
|
150
|
+
# so do not use plenv.
|
151
|
+
|
152
|
+
pladv(0)
|
153
|
+
|
154
|
+
# Use standard viewport, and define X range from 0 to 360 degrees, Y range
|
155
|
+
# from -1.2 to 1.2.
|
156
|
+
|
157
|
+
plvsta
|
158
|
+
plwind(0.0, 360.0, -1.2, 1.2)
|
159
|
+
|
160
|
+
# Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y.
|
161
|
+
|
162
|
+
plcol0(1)
|
163
|
+
plbox("bcnst", 60.0, 2, "bcnstv", 0.2, 2)
|
164
|
+
|
165
|
+
# Superimpose a dashed line grid, with 1.5 mm marks and spaces.
|
166
|
+
|
167
|
+
plstyl(mark1, space1)
|
168
|
+
plcol0(2)
|
169
|
+
plbox("g", 30.0, 0, "g", 0.2, 0)
|
170
|
+
plstyl
|
171
|
+
|
172
|
+
plcol0(3)
|
173
|
+
pllab("Angle (degrees)", "sine", "#frPLplot Example 1 - Sine function")
|
174
|
+
|
175
|
+
x = NArray.float(101).indgen!.mul!(3.6)
|
176
|
+
y = sin(x * (PI/180))
|
177
|
+
|
178
|
+
plcol0(4)
|
179
|
+
plline(x, y)
|
180
|
+
end
|
181
|
+
|
182
|
+
#--------------------------------------------------------------------------
|
183
|
+
# main
|
184
|
+
#
|
185
|
+
# Generates several simple line plots. Demonstrates:
|
186
|
+
# - subwindow capability
|
187
|
+
# - setting up the window, drawing plot, and labelling
|
188
|
+
# - changing the color
|
189
|
+
# - automatic axis rescaling to exponential notation
|
190
|
+
# - placing the axes in the middle of the box
|
191
|
+
# - gridded coordinate axes
|
192
|
+
#--------------------------------------------------------------------------
|
193
|
+
|
194
|
+
|
195
|
+
# plplot initialization
|
196
|
+
|
197
|
+
PLOP.parse!
|
198
|
+
|
199
|
+
# Get version number, just for kicks
|
200
|
+
|
201
|
+
puts "PLplot library version: #{PL::VERSION}"
|
202
|
+
|
203
|
+
# Initialize plplot
|
204
|
+
# Divide page into 2x2 plots
|
205
|
+
# Note: calling plstar replaces separate calls to plssub and plinit
|
206
|
+
|
207
|
+
plstar(2,2)
|
208
|
+
|
209
|
+
## Select font set as per input flag
|
210
|
+
|
211
|
+
plfontld($fontset)
|
212
|
+
|
213
|
+
# Set up the data
|
214
|
+
# Original case
|
215
|
+
|
216
|
+
xscale = 6
|
217
|
+
yscale = 1
|
218
|
+
xoff = 0
|
219
|
+
yoff = 0
|
220
|
+
|
221
|
+
# Do a plot
|
222
|
+
|
223
|
+
plot1(xscale, yscale, xoff, yoff, 0)
|
224
|
+
|
225
|
+
# Set up the data
|
226
|
+
|
227
|
+
xscale = 1
|
228
|
+
yscale = 0.0014
|
229
|
+
yoff = 0.0185
|
230
|
+
|
231
|
+
# Do a plot
|
232
|
+
|
233
|
+
digmax = 5
|
234
|
+
plsyax(digmax, 0)
|
235
|
+
|
236
|
+
plot1(xscale, yscale, xoff, yoff, 1)
|
237
|
+
|
238
|
+
plot2
|
239
|
+
|
240
|
+
plot3
|
241
|
+
|
242
|
+
# Show how to save a plot:
|
243
|
+
# Open a new device, make it current, copy parameters,
|
244
|
+
# and replay the plot buffer
|
245
|
+
|
246
|
+
if ($f_name) # command line option '-save filename'
|
247
|
+
printf("The current plot was saved in color Postscript under the name `%s'.\n", $f_name)
|
248
|
+
cur_strm = plgstrm # get current stream
|
249
|
+
new_strm = plmkstrm # create a new one
|
250
|
+
|
251
|
+
plsfnam($f_name) # file name
|
252
|
+
plsdev("psc") # device type
|
253
|
+
|
254
|
+
plcpstrm(cur_strm, 0) # copy old stream parameters to new stream
|
255
|
+
plreplot # do the save by replaying the plot buffer
|
256
|
+
plend1 # finish the device
|
257
|
+
|
258
|
+
plsstrm(cur_strm) # return to previous stream
|
259
|
+
end
|
260
|
+
|
261
|
+
# Let's get some user input
|
262
|
+
|
263
|
+
if ($locate_mode)
|
264
|
+
while(true)
|
265
|
+
break unless gin = plGetCursor
|
266
|
+
break if gin.keysym == PLK::Escape
|
267
|
+
|
268
|
+
pltext
|
269
|
+
if gin.keystr
|
270
|
+
printf("subwin = %d, wx = %f, wy = %f, dx = %f, dy = %f, c = '%s', state = 0x%08x\n",
|
271
|
+
gin.subwindow, gin.wx, gin.wy, gin.dx, gin.dy, gin.keystr, gin.state)
|
272
|
+
else
|
273
|
+
printf("subwin = %d, wx = %f, wy = %f, dx = %f, dy = %f, c = 0x%08x, state = 0x%08x\n",
|
274
|
+
gin.subwindow, gin.wx, gin.wy, gin.dx, gin.dy, gin.keysym, gin.state)
|
275
|
+
end
|
276
|
+
|
277
|
+
plgra
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
# Don't forget to call plend to finish off!
|
282
|
+
|
283
|
+
plend1
|
284
|
+
plend
|
data/examples/x02.rb
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$-w = true if $0 == __FILE__
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'plplot'
|
6
|
+
include PLplot
|
7
|
+
|
8
|
+
# Multiple window and color map 0 demo.
|
9
|
+
#
|
10
|
+
# Demonstrates multiple windows and color map 0 palette, both default and
|
11
|
+
# user-modified.
|
12
|
+
|
13
|
+
#--------------------------------------------------------------------------*\
|
14
|
+
# demo1
|
15
|
+
#
|
16
|
+
# Demonstrates multiple windows and default color map 0 palette.
|
17
|
+
#--------------------------------------------------------------------------*/
|
18
|
+
|
19
|
+
def demo1
|
20
|
+
|
21
|
+
plbop
|
22
|
+
|
23
|
+
# Divide screen into 16 regions */
|
24
|
+
plssub(4, 4)
|
25
|
+
|
26
|
+
draw_windows( 16, 0 )
|
27
|
+
|
28
|
+
pleop
|
29
|
+
end
|
30
|
+
|
31
|
+
#--------------------------------------------------------------------------*\
|
32
|
+
# demo2
|
33
|
+
#
|
34
|
+
# Demonstrates multiple windows, user-modified color map 0 palette, and
|
35
|
+
# HLS -> RGB translation.
|
36
|
+
#--------------------------------------------------------------------------*/
|
37
|
+
|
38
|
+
def demo2
|
39
|
+
|
40
|
+
# Set up cmap0 */
|
41
|
+
# Use 100 custom colors in addition to base 16 */
|
42
|
+
n = 100+16
|
43
|
+
r = NArray.int(n)
|
44
|
+
g = NArray.int(n)
|
45
|
+
b = NArray.int(n)
|
46
|
+
|
47
|
+
# Min & max lightness values */
|
48
|
+
lmin = 0.15
|
49
|
+
lmax = 0.85
|
50
|
+
|
51
|
+
plbop
|
52
|
+
|
53
|
+
# Divide screen into 100 regions
|
54
|
+
|
55
|
+
plssub(10, 10)
|
56
|
+
|
57
|
+
100.times do |i|
|
58
|
+
|
59
|
+
# Bounds on HLS, from plhlsrgb commentary --
|
60
|
+
# hue [0., 360.] degrees
|
61
|
+
# lightness [0., 1.] magnitude
|
62
|
+
# saturation [0., 1.] magnitude
|
63
|
+
|
64
|
+
# Vary hue uniformly from left to right
|
65
|
+
h = (360.0 / 10.0 ) * ( i % 10 )
|
66
|
+
# Vary lightness uniformly from top to bottom, between min & max
|
67
|
+
l = lmin + (lmax - lmin) * (i / 10) / 9.0
|
68
|
+
# Use max saturation
|
69
|
+
s = 1.0
|
70
|
+
|
71
|
+
r1, g1, b1 = plhlsrgb(h, l, s)
|
72
|
+
#printf("%3d %15.9f %15.9f %15.9f %15.9f %15.9f %15.9f\n",
|
73
|
+
# i+16,h,l,s,r1,g1,b1)
|
74
|
+
|
75
|
+
# Use 255.001 to avoid close truncation decisions in this example. */
|
76
|
+
r[i+16] = r1 * 255.001
|
77
|
+
g[i+16] = g1 * 255.001
|
78
|
+
b[i+16] = b1 * 255.001
|
79
|
+
end
|
80
|
+
|
81
|
+
# Load default cmap0 colors into our custom set
|
82
|
+
16.times {|i| r[i], g[i], b[i] = plgcol0(i)}
|
83
|
+
|
84
|
+
#n.times {|i| printf("%3d %3d %3d %3d\n", i, r[i], g[i], b[i])}
|
85
|
+
|
86
|
+
# Now set cmap0 all at once (faster, since fewer driver calls) */
|
87
|
+
plscmap0(r, g, b)
|
88
|
+
|
89
|
+
draw_windows( 100, 16 )
|
90
|
+
|
91
|
+
pleop
|
92
|
+
end
|
93
|
+
|
94
|
+
#--------------------------------------------------------------------------
|
95
|
+
# draw_windows
|
96
|
+
#
|
97
|
+
# Draws a set of numbered boxes with colors according to cmap0 entry.
|
98
|
+
#--------------------------------------------------------------------------
|
99
|
+
|
100
|
+
def draw_windows(nw, cmap0_offset)
|
101
|
+
|
102
|
+
plschr(0.0, 3.5)
|
103
|
+
plfont(4)
|
104
|
+
|
105
|
+
nw.times do |i|
|
106
|
+
plcol0(i+cmap0_offset)
|
107
|
+
text = i.to_s
|
108
|
+
pladv(0)
|
109
|
+
vmin = 0.1
|
110
|
+
vmax = 0.9
|
111
|
+
3.times do |j|
|
112
|
+
plwid(j + 1)
|
113
|
+
plvpor(vmin, vmax, vmin, vmax)
|
114
|
+
plwind(0.0, 1.0, 0.0, 1.0)
|
115
|
+
plbox("bc", 0.0, 0, "bc", 0.0, 0)
|
116
|
+
vmin = vmin + 0.1
|
117
|
+
vmax = vmax - 0.1
|
118
|
+
end
|
119
|
+
plwid(1)
|
120
|
+
plptex(0.5, 0.5, 1.0, 0.0, 0.5, text)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# Parse and process command line arguments
|
125
|
+
PLOptionParser.parse!
|
126
|
+
|
127
|
+
# Initialize plplot
|
128
|
+
plinit
|
129
|
+
|
130
|
+
# Run demos
|
131
|
+
demo1
|
132
|
+
demo2
|
133
|
+
|
134
|
+
plend
|